|
12864串行不顯示,是原理圖有問題嗎,還是程序有問題?
- /********************************************************************
- * 名稱 : writebyte()
- * 功能 : 按照液晶的串口通信協(xié)議,發(fā)送數(shù)據(jù)
- * 輸入 : zdata
- * 輸出 : 無
- ***********************************************************************/
- void writebyte(unsigned char zdata)
- {
- for(i=0; i<8; i++)
- {
- if((zdata << i) & 0x80)
- {
- rw = 1;
- }
- else
- {
- rw = 0;
- }
- en = 0;
- en = 1;
- }
- }
- /********************************************************************
- * 名稱 : write_com()
- * 功能 : 寫串口指令
- * 輸入 : cmdcode
- * 輸出 : 無
- ***********************************************************************/
- void write_com(unsigned char cmdcode)
- {
- writebyte(0xf1);
- writebyte(cmdcode);
- writebyte(cmdcode << 4);
- }
- /********************************************************************
- * 名稱 : write_data()
- * 功能 : 寫串口指令
- * 輸入 : cmdcode
- * 輸出 : 無
- ***********************************************************************/
- void write_data(unsigned char Dispdata)
- {
- writebyte(0xfb);
- writebyte(Dispdata);
- writebyte(Dispdata << 4);
- }
- /**********************************************************
- *函數(shù)名: addr_12864
- *功能:寫地址
- *說明:寫漢字時要寫個地址
- *輸入:無
- *返回:無
- **********************************************************/
- void addr_12864(uchar hang,uchar lie) //地址轉(zhuǎn)換
- {
- uchar address;
- switch(hang)
- {
- case 1: address=0x80 + lie ; //計(jì)算12864第一行的地址
- break;
- case 2: address=0x90 + lie ; //計(jì)算12864第二行的地址
- break;
- case 3: address=0x88 + lie ; //計(jì)算12864第三行的地址
- break;
- case 4: address=0x98 + lie ; //計(jì)算12864第四行的地址
- break;
- default :
- break;
- }
- write_com(address); //寫地址給12864
- }
- /***********************lcd12864上顯示3位十進(jìn)制數(shù)************************/
- void write_lcd3(uchar hang,uchar add,uint date)
- {
- addr_12864(hang,add); //寫12864地址
- if(date/100%10 == 0)
- write_data(' ');
- else
- write_data(0x30+date/100%10); //顯示百位數(shù)
- write_data(0x30+date/10%10); //顯示十位數(shù)
- write_data(0x30+date%10); //顯示個位數(shù)
- }
-
- /***********************lcd12864上顯示2位十進(jìn)制數(shù)************************/
- void write_lcd2(uchar hang,uchar add,uint date)
- {
- addr_12864(hang,add); //寫12864地址
- write_data(0x30+date/10%10); //顯示十位數(shù)
- write_data(0x30+date%10); //顯示個位數(shù)
- }
-
- /**********************************************************
- *函數(shù)名: write_string
- *功能:在12864上顯示字符數(shù)據(jù)
- *說明:
- *輸入:無
- *返回:無
- **********************************************************/
- void write_string(uchar hang,uchar lie,uchar *p)
- {
- addr_12864(hang,lie); //寫12864地址
- while(1)
- {
- if(*p == '\0') break; //\0字符串的結(jié)尾標(biāo)志 break結(jié)束while循環(huán) 結(jié)束寫字符
- write_data(*p); //寫數(shù)據(jù)
- p++; //指針地址加1
- }
- }
-
- /*****************控制光標(biāo)函數(shù)********************/
- void write_guanbiao(uchar hang,uchar lie,uchar date)
- {
- addr_12864(hang,lie); //寫12864地址
- if(date == 1)
- write_com(0x0f); //顯示光標(biāo)并且閃爍
- else
- write_com(0xc0); //關(guān)閉光標(biāo)
- }
- /********************************************************************
- * 名稱 : init_12864()
- * 功能 : 初始化函數(shù)
- * 輸入 : cmdcode
- * 輸出 : 無
- ***********************************************************************/
- void init_12864()
- {
- write_com(0x30); //功能設(shè)置 基本指令
- write_com(0x0c); //開顯示 不顯示光標(biāo)
- write_com(0x01); //清屏
- write_string(1,0,"PM2.5:000ug/m3 "); //初始化12864顯示
- write_string(2,0,"溫度:00℃ "); //初始化12864顯示
- write_string(3,0,"濕度:00% "); //初始化12864顯示
- write_string(4,0,"一氧化碳000 PPM "); //初始化12864顯示
- }
復(fù)制代碼
|
|