单片机1602液晶显示

上传人:n**** 文档编号:90668019 上传时间:2019-06-14 格式:DOC 页数:10 大小:1.36MB
返回 下载 相关 举报
单片机1602液晶显示_第1页
第1页 / 共10页
单片机1602液晶显示_第2页
第2页 / 共10页
单片机1602液晶显示_第3页
第3页 / 共10页
单片机1602液晶显示_第4页
第4页 / 共10页
单片机1602液晶显示_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《单片机1602液晶显示》由会员分享,可在线阅读,更多相关《单片机1602液晶显示(10页珍藏版)》请在金锄头文库上搜索。

1、 基于单片机89C52的1602液晶显示2012年8月23日单片机1602液晶显示一、电路原理图如下图所示: 二、程序调试 源程序经Keil 软件测试无错误,生成hex文件后烧写进89C52单片机。#include /包含头文件#define uint unsigned int /预定义 #define uchar unsigned char sbit rs=P05; /1602的数据/指令选择控制线 sbit rw=P06; /1602的读写控制线 sbit en=P07; /1602的使能控制线 uchar code table1=Hello!; /要显示的内容1放入数组tablel uc

2、har code table2=Nice to meet you;/要显示的内容2放入数组table2 void delay(uint n) /延时函数 uint x,y; for(x=n;x0;x-) for(y=110;y0;y-); void lcd_wcom(uchar com) /1602写命令函数 rs=0; /选择指令寄存器 rw=0; /选择写 P2=com; /把命令字送入P2 delay(5); /延时一小会儿,让1602准备接收数据 en=1; /使能线电平变化,命令送入1602的8位数据口 en=0; void lcd_wdat(uchar dat) /1602写数据函

3、数 rs=1; /选择数据寄存器 rw=0; /选择写 P2=dat; /把要显示的数据送入P2 delay(5); /延时一小会儿,让1602准备接收数据 en=1; /使能线电平变化,数据送入1602的8位数据口 en=0; void lcd_init() /1602初始化函数 lcd_wcom(0x38); /8位数据口,5*7字形 lcd_wcom(0x0c); /开显示屏,关光标,光标不闪烁 lcd_wcom(0x06); /写一个数据后,光标右移,屏幕文字不动 lcd_wcom(0x01); /清屏 void main() /主函数 uchar n,m=0; lcd_init();

4、 /液晶初始化 lcd_wcom(0x86);/显示地址设为86H(即06H,)第一行第6位 for(m=0;m6;m+) /将table1中的数据依次写入1602显示 lcd_wdat(table1m); delay(200); lcd_wcom(0x0f); /开显示屏,有光标,光标不闪烁 lcd_wcom(0x80+0x40); /设定显示地址为0xc0,第二行第1位 for(n=0;n16;n+) /将table2中的数据依次写入1602 lcd_wdat(table2n); delay(200); while(1); /动态停机 三、方案改进增加了四个按键,s4实现功能切换。1、输出

5、信息;2、实现数字时钟;源程序如下:#include /包含头文件#define uint unsigned int /预定义 #define uchar unsigned char sbit rs=P05; /1602的数据/指令选择控制线 sbit rw=P06; /1602的读写控制线 sbit en=P07; /1602的使能控制线 sbit s1=P30; /按键定义sbit s2=P31;sbit s3=P32;sbit s4=P33;sbit rd=P37;uchar count,s1num;char miao,shi,fen;uchar code table1= Hello!;

6、 /要显示的内容1放入数组tablel uchar code table2=Nice to meet you;uchar code table3=2011-8-1 MON;uchar code table4= 00:00:00;void delay(uint n) /延时函数 uint x,y; for(x=n;x0;x-) for(y=110;y0;y-); void lcd_wcom(uchar com) /1602写命令函数 rs=0; /选择指令寄存器 rw=0; /选择写 P2=com; /把命令字送入P2 delay(5); /延时一小会儿,让1602准备接收数据 en=1; /使

7、能线电平变化,命令送入1602的8位数据口 en=0; void lcd_wdat(uchar dat) /1602写数据函数 rs=1; /选择数据寄存器 rw=0; /选择写 P2=dat; /把要显示的数据送入P2 delay(5); /延时一小会儿,让1602准备接收数据 en=1; /使能线电平变化,数据送入1602的8位数据口 en=0; void lcd_init() /1602初始化函数 lcd_wcom(0x38); /8位数据口,5*7字形 lcd_wcom(0x0c); /开显示屏,关光标,光标不闪烁 lcd_wcom(0x06); /写一个数据后,光标右移,屏幕文字不动

8、 lcd_wcom(0x01); /清屏 void lcd_init1() uchar num; en=0; lcd_wcom(0x38); lcd_wcom(0x0c); lcd_wcom(0x06); lcd_wcom(0x01); lcd_wcom(0x80); /第一行第一位地址 for(num=0;num12;num+) lcd_wdat(table3num); delay(5); lcd_wcom(0x08+0x40);/第二行第一位地址 for(num=0;num12;num+) lcd_wdat(table4num); delay(5); TMOD=0x01; /定时器0,工作

9、方式1 TH0=0x3c; /定时器赋初值,定时时间设为50ms,计数20次得1s TL0=0xb0; EA=1; /允许中断,开定时器0 ET0=1; TR0=1; void write_sfm(uchar add,uchar date) uchar shi,ge; /向时分秒各位写入数字 shi=date/10; ge=date%10; lcd_wcom(0x08+0x40+add); lcd_wdat(0x30+shi); lcd_wdat(0x30+ge);void keyscan() rd=0; if(s1=0) delay(5); /延时,清抖 if(s1=0) s1num+; w

10、hile(!s1); if(s1num=1) TR0=0; /关定时器0 lcd_wcom(0x08+0x40+11); /按s1一次选中秒位 lcd_wcom(0x0f); /开显示屏,有光标,光标不闪 if(s1num=2) lcd_wcom(0x08+0x40+8); /按s1两次选中分位 if(s1num=3) lcd_wcom(0x08+0x40+5); /按s1三次选中时位 if(s1num=4) s1num=0; /按s1四次撤销选中 lcd_wcom(0x0c); /开显示屏,关光标,光标不闪 TR0=1; /开定时器0 if(s1num!=0) /调节时、分、秒各位数值 if(s2=0) /s2键实现各位数字加一操作 delay(5); if(s2=0) while(!s2); if(s1num=1) miao+; if(miao=60) miao=0; write_sfm(11,miao); lcd_wcom(0x08+0x40+11); if(s1num=2) fen+; if(fen=60) fen=0; write_sfm(8,fen); lcd_wcom(0x08+0x40+8);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号