|
50黑币
问题:以下是我写的ht1621驱动,驱动后显示屏显示图像不对,目前怀疑send_bit函数不能准确发送相应数据,求大家帮忙解答一下,谢谢。PS附件为数据手册
单片机源程序如下:
- #include "lcd.h"
- void delay(void)//延时10us
- {
- int i;
- for(i=0;i<10;i++)
- {
- __NOP();
- }
- }
- void send_bit(uint8_t data,uint8_t cnt) //data为发送数据,cnt为发送位数
- {
- int i;
- for(i=0;i<cnt;i++)
- {
- WR_L;
- delay();
- if(data&0x80)
- {
- DATA_H;
- }
- else
- {
- DATA_L;
- }
- WR_H;
- delay();
- data<<=1;
- }
- }
- void write_cmd(uint8_t data) //发送命令
- {
- CS_L;
- send_bit(0x80,3);
- send_bit(data,9);
- delay();
- CS_H;
- }
- void write_data(uint8_t addr,uint8_t data)
- {
- CS_L;
- addr<<=2;
- data<<=4;
- send_bit(0xa0,3);
- send_bit(addr,6);
- send_bit(data,4);
- delay();
- CS_H;
- }
- void clean_screen(void)
- {
- int i,temp=0;
- for(i=0;i<32;i++)
- {
- write_data(temp,0);
- temp++;
- }
- }
- void show_all_screen(void)
- {
- int i,temp=0;
- for(i=0;i<32;i++)
- {
- write_data(temp,1);
- temp++;
- }
- }
- void LCD_init(void)
- {
- write_cmd(SYS_EN);/ /打开系统振荡器
- write_cmd(RC256);//内部时钟
- write_cmd(BIAS);//1/3duty 4com
- write_cmd(LCD_ON);打开LCD偏压
- clean_screen();
- }
复制代码 以下是头文件里面一些定义- #define COMMAND 0x80 // 命令码-100
- #define WRITE_DATA 0xA0 //写命令-101
- #define READ_DATA 0xC0 //读命令-110
- #define BIAS 0X52 // 1/3duty 4com
- #define SYS_EN 0x02 // 打开系统振荡器
- #define LCD_ON 0x06 // 打开LCD偏压
- #define RC256 0x30 // 内部时钟
复制代码
|
最佳答案
查看完整内容
1.代码不会撸,你的send_bit就是高位在前的发送,看着跟时序能对上;
2.注意下这货的ADDRESS和DATA发送数据不一样,ADDRESS高位在前,DATA是低位在前。
3.没有细细看手册,不行编不下去了...
|