|
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.沒有細細看手冊,不行編不下去了...
|