标题:
单片机驱动2004液晶测试程序,4线 8线 控制器HD44780
[打印本页]
作者:
qpzmg
时间:
2019-6-27 15:50
标题:
单片机驱动2004液晶测试程序,4线 8线 控制器HD44780
两个C51单片机的测试程序,一个是连接八条数据线的,另一个是连接四条数据线的。附件里有原程序和proteus仿真文件。
Snap3.jpg
(68.49 KB, 下载次数: 87)
下载附件
2019-6-27 15:50 上传
Snap4.jpg
(60.25 KB, 下载次数: 83)
下载附件
2019-6-27 15:50 上传
单片机源程序如下:
/*=========================================================
LCD2004模拟口线接线方式 连接线图: =
---------------------------------------------------- =
| LCM-----51 | LCM-----51 | LCM------51 | | =
---------------------------------------------------| =
| | RS -------P3.5 | | =
| | RW------- GND | | =
| | E --------P3.4 | | =
| | | | =
| DB4-----P0.4 | | | =
| DB5-----P0.5 | | | =
| DB6-----P0.6 | | | =
| DB7-----P0.7 | | | =
---------------------------------------------------- =
[注:AT89S51 使用 11.0592M 晶体震荡器] =
=========================================================*/
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit LCM_RS=P3^5; //定义引脚
sbit LCM_E =P3^4;
sbit LED =P2^5;//LED 的输出锁存端
sbit dula =P2^6;//数码管的段锁存端 74HC573
sbit wela =P2^7;//数码管的位锁存端
#define LCM_Data P0
#define Busy 0x80 //用于检测 LCM 状态字中的 Busy 标识
uchar num;
uchar code table0[]="ABCDEFGHIJKLMNOPQRST";
uchar code table1[]="01234567890123456789";
uchar code table2[]="UVWXYZ!@#%&?+<[>]*-;";
uchar code table3[]="abcdefghijklmnopqrst";
void delay(uint z)//延时函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//写数据 RS=H,RW=L,D0~D7=数据,E=高脉冲
void WriteDataLCM(uchar Data)
{
LCM_RS = 1;
LCM_E = 0;
LCM_Data =(Data & 0xF0);
LCM_E = 1;
delay(5);
LCM_E = 0;
LCM_Data =(Data & 0x0F)<<4;
LCM_E = 1;
delay(5);
LCM_E = 0;
}
//写指令 RS=L,RW=L,D0~D7=指令码,E=高脉冲
void WriteCommandLCM(uchar Command)
{
delay(5); //短暂延时,代替检测忙状态
LCM_RS = 0;
LCM_E = 0;
LCM_Data =( Command & 0xF0);
LCM_E = 1;
delay(5);
LCM_E = 0;
LCM_Data =( Command & 0x0F )<<4;
LCM_E = 1;
delay(5);
LCM_E = 0;
}
//读数据 RS=H,RW=H,E=H
//读状态 RS=L,RW=H,E=H
//由于不要检测忙,所以读数据和读状态两个函数省略
void LCMInit(void) //LCM 初始化
{
WriteCommandLCM(0x03);
delay(5);
WriteCommandLCM(0x02);
delay(5);
WriteCommandLCM(0x28); //显示模式设置,开始要求每次检测忙信号
WriteCommandLCM(0x0C);
WriteCommandLCM(0x06); // 显示光标移动设置
WriteCommandLCM(0x01);
delay(5);
}
void main(void)
{
LED=0; //将LED的锁存端关闭
dula=0;//将数码管的段锁存端关闭
wela=0;//将数码管的位锁存端关闭
LCMInit(); //LCM 初始化
//第一行显示
WriteCommandLCM(0x80+0x00);
for(num=0;num<20;num++)
{
WriteDataLCM(table0[num]);
delay(250);
}
//第二行显示
WriteCommandLCM(0x80+0x40);
for(num=0;num<20;num++)
{
WriteDataLCM(table1[num]);
delay(250);
}
//第三行显示
WriteCommandLCM(0x80+0x14);
for(num=0;num<20;num++)
{
WriteDataLCM(table2[num]);
delay(250);
}
//第四行显示
WriteCommandLCM(0x80+0x54);
for(num=0;num<20;num++)
-----限于篇幅余下内容下载附件----------
复制代码
所有资料51hei提供下载:
2004液晶测试程序.rar
(79.32 KB, 下载次数: 49)
2019-6-27 15:50 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
lonsieur
时间:
2019-6-27 18:26
仿真原理图要自己连吗,里面没有仿真图。。。
作者:
redrobot123
时间:
2019-6-27 20:41
学习来了
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1