|
50黑幣
問題:以下是我寫的ht1621驅(qū)動(dòng),驅(qū)動(dòng)后顯示屏顯示圖像不對(duì),目前懷疑send_bit函數(shù)不能準(zhǔn)確發(fā)送相應(yīng)數(shù)據(jù),求大家?guī)兔獯鹨幌,謝謝。PS附件為數(shù)據(jù)手冊(cè)
單片機(jī)源程序如下:
- #include "lcd.h"
- void delay(void)//延時(shí)10us
- {
- int i;
- for(i=0;i<10;i++)
- {
- __NOP();
- }
- }
- void send_bit(uint8_t data,uint8_t cnt) //data為發(fā)送數(shù)據(jù),cnt為發(fā)送位數(shù)
- {
- 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) //發(fā)送命令
- {
- 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);/ /打開系統(tǒng)振蕩器
- write_cmd(RC256);//內(nèi)部時(shí)鐘
- write_cmd(BIAS);//1/3duty 4com
- write_cmd(LCD_ON);打開LCD偏壓
- clean_screen();
- }
復(fù)制代碼 以下是頭文件里面一些定義- #define COMMAND 0x80 // 命令碼-100
- #define WRITE_DATA 0xA0 //寫命令-101
- #define READ_DATA 0xC0 //讀命令-110
- #define BIAS 0X52 // 1/3duty 4com
- #define SYS_EN 0x02 // 打開系統(tǒng)振蕩器
- #define LCD_ON 0x06 // 打開LCD偏壓
- #define RC256 0x30 // 內(nèi)部時(shí)鐘
復(fù)制代碼
|
最佳答案
查看完整內(nèi)容
1.代碼不會(huì)擼,你的send_bit就是高位在前的發(fā)送,看著跟時(shí)序能對(duì)上;
2.注意下這貨的ADDRESS和DATA發(fā)送數(shù)據(jù)不一樣,ADDRESS高位在前,DATA是低位在前。
3.沒有細(xì)細(xì)看手冊(cè),不行編不下去了...
|