标题:
单片机驱动LCD12864串行不显示
[打印本页]
作者:
小灰灰、
时间:
2023-4-1 23:29
标题:
单片机驱动LCD12864串行不显示
12864串行不显示,是原理图有问题吗,还是程序有问题?
1.jpg
(1.17 MB, 下载次数: 25)
下载附件
2023-4-2 00:03 上传
2.png
(17.17 KB, 下载次数: 29)
下载附件
2023-4-2 00:03 上传
/********************************************************************
* 名称 : 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显示
}
复制代码
作者:
小灰灰、
时间:
2023-4-1 23:31
E和R/W接P2.6和P2.7
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1