单片机1602液晶显示(共10页)_第1页
单片机1602液晶显示(共10页)_第2页
单片机1602液晶显示(共10页)_第3页
单片机1602液晶显示(共10页)_第4页
单片机1602液晶显示(共10页)_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上 基于单片机89C52的1602液晶显示2012年8月23日单片机1602液晶显示一、电路原理图如下图所示: 二、程序调试 源程序经Keil 软件测试无错误,生成hex文件后烧写进89C52单片机。#include<reg52.h> /包含头文件#define uint unsigned int /预定义 #define uchar unsigned char sbit rs=P05; /1602的数据/指令选择控制线 sbit rw=P06; /1602的读写控制线 sbit en=P07; /1602的使能控制线 uchar code table1=&

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

3、变化,命令送入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); /写一个数据后,光标右移,屏幕文字不动 lcd

4、_wcom(0x01); /清屏 void main() /主函数 uchar n,m=0; lcd_init(); /液晶初始化 lcd_wcom(0x86);/显示地址设为86H(即06H,)第一行第6位 for(m=0;m<6;m+) /将table1中的数据依次写入1602显示 lcd_wdat(table1m); delay(200); lcd_wcom(0x0f); /开显示屏,有光标,光标不闪烁 lcd_wcom(0x80+0x40); /设定显示地址为0xc0,第二行第1位 for(n=0;n<16;n+) /将table2中的数据依次写入1602 lcd_wdat

5、(table2n); delay(200); while(1); /动态停机 三、方案改进增加了四个按键,s4实现功能切换。1、输出信息;2、实现数字时钟;源程序如下:#include<reg52.h> /包含头文件#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

6、s4=P33;sbit rd=P37;uchar count,s1num;char miao,shi,fen;uchar code table1=" Hello!" /要显示的内容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;x>0;x-) for(y=1

7、10;y>0;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写数据函数 rs=1; /选择数据寄存器 rw=0; /选择写 P2=dat; /把要显示的数据送入P2 delay(5); /延时一小会儿,让1602准备接收数据 en=1; /使能线电平变化,数据送入1602的8位

8、数据口 en=0; void lcd_init() /1602初始化函数 lcd_wcom(0x38); /8位数据口,5*7字形 lcd_wcom(0x0c); /开显示屏,关光标,光标不闪烁 lcd_wcom(0x06); /写一个数据后,光标右移,屏幕文字不动 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;num<12;nu

9、m+) lcd_wdat(table3num); delay(5); lcd_wcom(0x08+0x40);/第二行第一位地址 for(num=0;num<12;num+) lcd_wdat(table4num); delay(5); TMOD=0x01; /定时器0,工作方式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;

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+; while(!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

11、) 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(fe

12、n=60) fen=0; write_sfm(8,fen); lcd_wcom(0x08+0x40+8); if(s1num=3) shi+; if(shi=24) shi=0; write_sfm(5,shi); lcd_wcom(0x08+0x40+5); if(s3=0) /s3键实现各位数字减一操作 delay(5); if(s3=0) while(!s3); if(s1num=1) miao-; if(miao=-1) miao=59; write_sfm(11,miao); lcd_wcom(0x08+0x40+11); if(s1num=2) fen-; if(fen=-1) f

13、en=59; write_sfm(8,fen); lcd_wcom(0x08+0x40+8); if(s1num=3) shi-; if(shi=-1) shi=23; write_sfm(5,shi); lcd_wcom(0x08+0x40+5); void clock() lcd_init1(); while(1) keyscan(); void main() /主函数 uchar n,m=0; lcd_init(); /液晶初始化 lcd_wcom(0x86); /显示地址设为86H(即06H,)第一行第6位 for(m=0;m<10;m+) /将table1中的数据依次写入1602显示 lcd_wdat(table1m); delay(200); lcd_wcom(0x0f); /开显示屏,有光标,光标不闪烁 lcd_wcom(0x80+0x40); /重新设定显示地址为0xc0,即第二行第1位 for(n=0;n<16;n+) /将table2中的数据依次写入1602显示 lcd_wdat(table2n); delay(200); while(1); /动态停机 if(s4=0) delay(5); if(s4=0) clock(); /功能切换 w

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论