標(biāo)題:
單片機驅(qū)動LCD12864串行不顯示
[打印本頁]
作者:
小灰灰、
時間:
2023-4-1 23:29
標(biāo)題:
單片機驅(qū)動LCD12864串行不顯示
12864串行不顯示,是原理圖有問題嗎,還是程序有問題?
1.jpg
(1.17 MB, 下載次數(shù): 25)
下載附件
2023-4-2 00:03 上傳
2.png
(17.17 KB, 下載次數(shù): 29)
下載附件
2023-4-2 00:03 上傳
/********************************************************************
* 名稱 : 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 ; //計算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位十進(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ù)制代碼
作者:
小灰灰、
時間:
2023-4-1 23:31
E和R/W接P2.6和P2.7
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1