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显示
- }
复制代码
|