44780 16x2 字符液晶屏驱动演示程序总线方式
连接线图:lcm-------51 lcm-------51 lcm--------51
db0-----p0.0 db4-----p0.4 rw-------p2.0
db1-----p0.1 db5-----p0.5 rc-------p2.1
db2-----p0.2 db6-----p0.6 e--------p2.7 =>74ls00+wr+rd
db3-----p0.3 db7-----p0.7 vlcd接1k2电阻到gnd
[注]:at89c51的晶振频率为12mhz
//#pragma src// 产生汇编文件
#include
#include
变量类型标识的宏定义
#defineuchar unsigned char
#define uint unsigned int
lcm1602a端口地址定义
char xdata lcd1602cmdport _at_ 0x7cff;//e=1 rs=0 rw=0
char xdata lcd1602wdataport _at_ 0x7eff;//e =1 rs=1 rw=0
char xdata lcd1602statusport _at_ 0x7dff;//cs=1 rs=0 rw=1
#define busy0x80 // 忙判别位
code char exampl[]=for an example. - by xiaoqi\n;
void delay400ms(void);
void delay5ms(void);
void lcdwritedata( char dataw );
void lcdwritecommand( uchar cmd,uchar attribc );
void lcdreset( void );
void display( uchar dd );
void disponechar(uchar x,uchar y,uchar wdata);
void eputstr(uchar x,uchar y, uchar code *ptr);
测试主程序
void main(void)
{
uchar temp;
delay400ms();// 启动时必须的延时,等待lcm进入工作状态
lcdreset(); // 这也是必需的....初始化
temp = 32;
eputstr(0,0,exampl);// 上面一行显示一个预定字符串
delay400ms(); // 保留显示内容
delay400ms();
delay400ms();
delay400ms();
delay400ms();
delay400ms();
delay400ms();
delay400ms();
while(1)
{
temp &= 0x7f;// 只显示ascii字符
if (temp31){l++;};
for (i=0;i
disponechar(x++,y,ptr[i]);
if ( x == 16 ){
x = 0; y ^= 1;
}
}
}
演示一行连续字符串,配合上位程序演示移动字串
void display( uchar dd ) {
uchar i;
for (i=0;i<16;i++) {
disponechar(i,1,dd++);
dd &= 0x7f;
if (dd<32) dd=32;
}
}
显示光标定位
void locatexy( char posx,char posy) {
uchar temp;
temp = posx & 0xf;
posy &= 0x1;
if ( posy )temp |= 0x40;
temp |= 0x80;
lcdwritecommand(temp,0);
}
按指定位置显示数出一个字符
void disponechar(uchar x,uchar y,uchar wdata) {
locatexy( x, y );// 定位显示地址
lcdwritedata( wdata );// 写字符
}
初始化程序, 必须按照产品资料介绍的初始化过程进行
void lcdreset( void ) {
lcdwritecommand( 0x38, 0);// 显示模式设置(不检测忙信号)
delay5ms();
lcdwritecommand( 0x38, 0);// 共三次
delay5ms();
lcdwritecommand( 0x38, 0);
delay5ms();
lcdwritecommand( 0x38, 1);// 显示模式设置(以后均检测忙信号)
lcdwritecommand( 0x08, 1);// 显示关闭
lcdwritecommand( 0x01, 1);// 显示清屏
lcdwritecommand( 0x06, 1);// 显示光标移动设置
lcdwritecommand( 0x0c, 1);// 显示开及光标设置
}
写控制字符子程序: e=1 rs=0 rw=0
void lcdwritecommand( uchar cmd,uchar attribc ) {
if (attribc) while( lcd1602statusport & busy );// 检测忙信号?
lcd1602cmdport = cmd;
}
当前位置写字符子程序: e =1 rs=1 rw=0
void lcdwritedata( char dataw ) {
while( lcd1602statusport & busy );// 检测忙信号
lcd1602wdataport = dataw;
}
// 短延时
void delay5ms(void)
{
uint i = 5552;
while(i--);
}
//长延时
void delay400ms(void)
{
uchar i = 5;
uint j;
while(i--)
{
j=7269;
while(j--);
};
}
纯电动汽车它究竟怕不怕水呢
一个安全性的漏洞会导致什么样的混乱?
应急救援的“新武器”:消防灭火侦察机器人
魅族科技宣布Flyme 8系统将和魅族16s Pro一起亮相新品发布会
采用LATTICE的XP系列芯片实现FPGA的自动白平衡系统的设计
44780 16x2 字符液晶屏驱动演示程序总线方式
卧薪16年,大唐联仪代表的中国通信测试仪表行业领跑5G
胶带母卷三季度行情的简述及其市场发展趋势的分析
海信胶片DP2988H三无灯亮
高抗干扰3路3键触摸IC-VK3603
漫谈AMBA总线-AXI4协议的基本介绍
分享几种电压电流转换电路图 常见电压电流转换电路结构和原理讲解
excel导出功能如何实现?
最抢手配色—惹火红!aigo国民好物移动固态硬盘S7 Pro初体验
华盛昌DT-8806系列非接触红外额温计技术优势
我国研制出首块彩色柔性AMOLED显示屏
光时分复用系统(OTDM),OTDM的优点/组成和未来发展方
红米5Plus曝光:血洗千元机市场!红米Pro系列惨遭放弃?
变容二极管参数有哪些 变容二极管在电路中的主要作用
四气两尘空气质量监测站的产品介绍说明