12864串行不顯示,是原理圖有問題嗎,還是程序有問題?
- /********************************************************************
- * 名稱 : writebyte()
- * 功能 : 按照液晶的串口通信協議,發送數據
- * 輸入 : 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);
- }
- /**********************************************************
- *函數名: addr_12864
- *功能:寫地址
- *說明:寫漢字時要寫個地址
- *輸入:無
- *返回:無
- **********************************************************/
- void addr_12864(uchar hang,uchar lie) //地址轉換
- {
- uchar address;
- switch(hang)
- {
- case 1: address=0x80 + lie ; //計算12864第一行的地址
- break;
- case 2: address=0x90 + lie ; //計算12864第二行的地址
- break;
- case 3: address=0x88 + lie ; //計算12864第三行的地址
- break;
- case 4: address=0x98 + lie ; //計算12864第四行的地址
- break;
- default :
- break;
- }
- write_com(address); //寫地址給12864
- }
- /***********************lcd12864上顯示3位十進制數************************/
- 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); //顯示百位數
- write_data(0x30+date/10%10); //顯示十位數
- write_data(0x30+date%10); //顯示個位數
- }
-
- /***********************lcd12864上顯示2位十進制數************************/
- void write_lcd2(uchar hang,uchar add,uint date)
- {
- addr_12864(hang,add); //寫12864地址
- write_data(0x30+date/10%10); //顯示十位數
- write_data(0x30+date%10); //顯示個位數
- }
-
- /**********************************************************
- *函數名: write_string
- *功能:在12864上顯示字符數據
- *說明:
- *輸入:無
- *返回:無
- **********************************************************/
- void write_string(uchar hang,uchar lie,uchar *p)
- {
- addr_12864(hang,lie); //寫12864地址
- while(1)
- {
- if(*p == '\0') break; //\0字符串的結尾標志 break結束while循環 結束寫字符
- write_data(*p); //寫數據
- p++; //指針地址加1
- }
- }
-
- /*****************控制光標函數********************/
- void write_guanbiao(uchar hang,uchar lie,uchar date)
- {
- addr_12864(hang,lie); //寫12864地址
- if(date == 1)
- write_com(0x0f); //顯示光標并且閃爍
- else
- write_com(0xc0); //關閉光標
- }
- /********************************************************************
- * 名稱 : init_12864()
- * 功能 : 初始化函數
- * 輸入 : cmdcode
- * 輸出 : 無
- ***********************************************************************/
- void init_12864()
- {
- write_com(0x30); //功能設置 基本指令
- write_com(0x0c); //開顯示 不顯示光標
- 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顯示
- }
復制代碼
|