Proteus中1602液晶顯示的仿真實例
首先,給出1602的Proteus中的連線圖,如下:
說明:
1.Proteus里面的1602液晶顯示的元件名是:LM016L(在元件查找里面可以找到)這個元件不要進(jìn)行什么設(shè)置,只要按要求連線
2.數(shù)據(jù)端口D0-D7我是與51單片機(jī)I/O口中4個中的一個連接(這里我是和P0口連接的),為了看起來很清晰,我使用了公共端連線方式,連在一起的線,公共端同名(在線上右鍵選Place Wire lable放置公共端名)。
3.RS是 數(shù)據(jù)和命令的選擇 端,RW我直接接地了,我不進(jìn)行數(shù)據(jù)的讀取,我只進(jìn)行寫數(shù)據(jù)(通過用延時函數(shù)來跳過讀寫檢查)。
顯示初始化函數(shù)init()
1.液晶顯示使能端E清零(因為上電默認(rèn)是高電平,所以開始要清零)
1.顯示模式設(shè)置:com(0x38);38是以2行16字的5*7的點(diǎn)陣方式顯示
2.顯示開關(guān):com(0x0f);0f是開顯示,且開光標(biāo)閃爍
0e開顯示,且開光標(biāo),光標(biāo)不閃爍
0c只是開顯示
3.顯示模式設(shè)置:com(0x06);06屏幕不移動顯示(靜態(tài)屏幕顯示)
05整屏右移(效果我沒用出來)
07整屏左移(效果我沒用出來)
4.清屏:com(0x01);01顯示清屏,數(shù)據(jù)指針也清屏
void init()
{
en=0;
write_com(0x38);//顯示設(shè)置
write_com(0x0f);//顯示開關(guān)
write_com(0x06);//屏幕不移動
write_com(0x01);//清屏
}
寫數(shù)據(jù)子函數(shù)date()
void date(uchar dat)
{
rs=1;
delay(1);
P0=dat;
delay(1);
en=1;
delay(1);
en=0;
delay(1);
}
寫命令自函數(shù)com()
void com(uchar com)
{
rs=0;
delay(1);
P0=com;
delay(1);
en=1;
delay(1);
en=0;
delay(1);
}
主函數(shù)
void main()
{
init();
com(要輸入的命令的16進(jìn)制碼);
date('要輸入的字符')
}
常見問題:
1.實物的1602液晶顯示和Proteus的LM016L有什么區(qū)別:
答:LM016L液晶顯示的主控芯片是HD44780,如果實物1602芯片的主控芯片也是HD44780或HD44780芯片兼容的1602液晶顯示,那么可以說基本上LM016L等價于1602了,但是細(xì)微的具體命令控制上可能有細(xì)微差別。
就我目前發(fā)現(xiàn)了一個差別,就是屏幕移動的問題
命令代碼1602LM016L
0x18字符逐列左移字符逐列右移
0x1c字符逐列右移 字符逐列左移
使用方法:
for(i=0;i<16;i++)把列 逐個的往左或右移動了16次
{
com(0x1c);在實物1602右移,在Proteus是左移
delay(20);
}
參考完整代碼下載地址(代碼是實現(xiàn)了2行i like MCU的左移,可在Proteus下仿真)
CSDN:http://download.csdn.net/source/1948231
1602/LM016L液晶顯示的使用手冊(一篇中文,一篇英文)
CSDN下載地址: http://download.csdn.net/source/1948273