基于51单片机LCD1602数字时钟演示ppt

合集下载

LCD1602数字时钟

LCD1602数字时钟

20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。

时间对人们来说总是那么宝贵,工作的忙碌性和繁杂性容易使人忘记当前的时间。

忘记了要做的事情,当事情不是很重要的时候,这种遗忘无伤大雅。

但是,一旦重要事情,一时的耽误可能酿成大祸。

目前,单片机正朝着高性能和多品种方向发展趋势将是进一步向着CMOS化、低功耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方面发展。

下面是单片机的主要发展趋势。

单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思想和设计方法。

从前必须由模拟电路或数字电路实现的大部分功能,现在已能用单片机通过软件方法来实现了。

这种软件代替硬件的控制技术也称为微控制技术,是传统控制技术的一次革命。

纵观自己所处的这个快速发展的信息时代,数字电路的技术已广泛应用于各个领域中,它们无处不在我们的身边,我们通常所使用的手机,数码相机,MP3,MP4等电子产品都关联到数字电路的应用,而我想从自己所学专业的某一点出发,来分析数字电路在生活中的广泛应用。

由于时间在日常生活中的重要性,所以以时间为媒介的电子钟就被选为我这次论文选题的目标。

单片机简介单片微型计算机简称单片机,是典型的嵌入式微控制器(Microcontroller Unit),常用英文字母的缩写MCU表示单片机,它最早是被用在工业控制领域。

单片机由芯片内仅有CPU的专用处理器发展而来。

最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中。

INTEL的Z80是最早按照这种思想设计出的处理器,从此以后,单片机和专用处理器的发展便分道扬镳。

单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。

基于stc51单片机的LCD1602显示时间的电子万年历(显示

基于stc51单片机的LCD1602显示时间的电子万年历(显示

1 课设所需软件简介1.1 Keil uVision4的简要介绍2009年2月发布Keil μVision4,Keil μVision4引入灵活的窗口管理系统,使开发人员能够使用多台监视器,并提供了视觉上的表面对窗口位置的完全控制的任何地方。

新的用户界面可以更好地利用屏幕空间和更有效地组织多个窗口,提供一个整洁,高效的环境来开发应用程序。

新版本支持更多最新的ARM芯片,还添加了一些其他新功能。

2011年3月ARM公司发布最新集成开发环境RealView MDK开发工具中集成了最新版本的Keil uVision4,其编译器、调试工具实现与ARM器件的最完美匹配。

Keil C51开发系统基本知识Keil C51开发系统基本知识1. 系统概述Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。

另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。

在开发大型软件时更能体现高级语言的优势。

下面详细介绍Keil C51开发系统各部分功能和使用。

2. Keil C51单片机软件开发系统的整体结构C51工具包的整体结构,uVision与Ishell分别是C51 for Windows和for Dos 的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。

开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。

然后分别由C51及C51编译器编译生成目标文件(.OBJ)。

目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。

ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。

使用独立的Keil仿真器时,注意事项:* 仿真器标配11.0592MHz的晶振,但用户可以在仿真器上的晶振插孔中换插其他频率的晶振。

基于单片机的电子时钟设计论文ppt课件

基于单片机的电子时钟设计论文ppt课件

2.按键模块
在该模块中,采用四个按键作为对电 子时钟的控制输入,经过按键来实现时 钟的时间设置、定时功能。电路中将四 个按键的一端接地,而单片机的P2口默 以为高电平,一旦按键被按下,那么该 按键对应的管脚被拉低,经过软件扫描 按键即可知道用户所要实现的功能,调 用相应的按键子程序来完成该操作。 本设计中,四个按键K1、K2、K3、K4分 别与AT89C51单片机的引脚P1.0、P1.1、 P1.2、P1.3衔接。当按下K1时,开场进展 “时〞的校正,再次按下K1时,那么切换 到“分〞的校正,第三次按下那么切换到 “秒〞的校正,第四次按下那么前往到正 常时间显示。当按下K2时,切换到闹钟 方式,延续按下K2键时依次进展定时。 K3和K4键那么是实现加一和减一功能。
五.仿真结果
PPT终了 谢谢观看
6.时间显示模块
数码管显示方式有两种:
1. 共阴极接法。把发光二极管的阴极连在一同构成阴极公共引脚, 如以下图a所示。运用时阴极公共引脚接地,这样阴极引脚上 加高电平的发光二极管就导通点亮,而加低电平的那么不点亮。
共阳极接法。把发光二极管的阳极连在一同构成阳极公共引脚,如 以下图b所示。运用时阳极公共引脚接+5V。这样阴极引脚上加 低电平的发光二极管即可导通点亮,而加高电平的那么不点亮。
二.电子时钟总体设计
振荡电路 复位电路 蜂鸣器
AT89C51
时间显示 按键电路
本设计电路的硬件部分共由五部分组 成,分别为按键模块、复位电路模块、振 荡电路模块、发声模块、时间显示模块。 振荡电路模块担任给单片机提供时钟周期。 复位电路模块担任上电后自动复位,或按 键后强迫复位。上电后,由单片机内部定 时器计时,同时经过动态显示函数自动将 时分秒显示到数码管上。与此同时,按键 扫描函数不断扫描按键引脚形状,一旦扫 描按键被按下,即进入相应的功能函数。 假设检测到定时时间到,那么驱动蜂鸣器 发声提示。

51单片机的1602液晶闹钟

51单片机的1602液晶闹钟

#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit LCD_RS=P2^6; //复位端液晶sbit LCD_RW=P2^5; //写数据端液晶sbit LCD_EP=P2^7; //使能端液晶sbit key1=P2^0;//键盘1sbit key2=P2^1;//键盘2sbit key3=P2^2;//键盘3sbit key4=P2^3;//键盘4sbit Beep=P1^5;//蜂鸣器uint num;uchar keynum,keynum1,shi1,fen1,miao1,aa,nian,shi2,fen2,miao2; uchar code table[]="2013-07-24-3"; //设定开始显示的时间uchar code table1[]=" 15:57:00";uchar code table2[]="1234567"; //定义二维字符数组uchar miao=00;uchar fen=57;uchar shi=15;uchar yue=07;uchar ri=24;uchar week=3;uchar nian=2013;void delay(uint z)//延时{uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void di(){Beep=1;delay(1000);Beep=0;}void write_com(uchar com)//写指令函数液晶{LCD_RS=0;LCD_RW=0;P0=com;delay(5);//E变为以有个时间LCD_EP=1;delay(5);//一个高脉冲LCD_EP=0;}void write_date(uchar date)//写数据函数液晶{LCD_RS=1;LCD_RW=0;P0=date;delay(5);//E变为yi有个时间LCD_EP=1;delay(5);//一个高脉冲LCD_EP=0;}void init()//初始化函数{TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;LCD_EP=0;write_com(0x38);//显示模式write_com(0x0c);//打开显示,光标不开,不闪烁write_com(0x01);//清屏write_com(0x80);//数据指针初始化}void year(uchar date)//显示年{uchar bai,shi,ge;uint qian;qian=2;bai=0;shi=date%1000%100/10;ge=date%10;write_com(0x80);write_date(0x30+qian);write_date(0x30+bai);write_date(0x30+shi);write_date(0x30+ge);}void xianshi(uchar add,uchar date)//显示月,日,时,分,秒{uchar shi,ge;shi=date/10;ge=date%10;write_com(add+0x80);write_date(0x30+shi);write_date(0x30+ge);}void xingqi()//显示星期{write_com(0x8b);write_date(table2[week-1]);}void key(){if(key1==0){delay(5); //去抖延时if(key1==0) //确认按键1被按下,{keynum++;while(!key1);//松手检测}if(keynum==1)//按下一次{TR0=0; //关闭定时器0write_com(0x83);//光标跳到nian份write_com(0x0f);//开启光标显示,光标闪烁}if(keynum==2){write_com(0x86);//光标跳到yue}if(keynum==3){write_com(0x89);//光标跳到ri}if(keynum==4){write_com(0x8b);//光标跳到xingqi}if(keynum==5){write_com(0x80+0x44);//光标跳到时}if(keynum==6){write_com(0x80+0x47);//光标跳到分}if(keynum==7){write_com(0x80+0x4a); //光标跳到秒}if(keynum==8){ keynum=0; //退出调时间模式TR0=1; //开启定时器0write_com(0x0c); //关闭光标显示}}if(keynum) //当进入调时间模式时{if(key2==0) //2按键按下jia{delay(5); //去抖延时if(key2==0){if(keynum==1)//调nian{nian++;//2每按下一次if(nian==2099)nian=2000; //加满清0year(nian);write_com(0x83); //写完数据指针指向月份原来位置}if(keynum==2)//调月{yue++;//2每按下一次月份加1if(yue==13)yue=1; //加满清0xianshi(5,yue); //显示月份write_com(0x86); //写完数据指针指向月份原来位置}if(keynum==3)//调日{ ri++;if(yue==1||yue==3||yue==5||yue==7||yue==8||yue==10||yue==12)//1,3,5,7,8,10,12月有31天if(ri==32)ri=1;//加满还原if(yue==4||yue==6||yue==9||yue==11)//4,6,9,11月有30天if(ri==31)ri=1;if(yue==2&&((nian%4==0&&nian%100!=0)||nian%400==0))//闰年2月有29天if(ri==30)ri=1;if(yue==2&&(nian%4!=0)||(nian%100==0&&nian%400!=0))//非闰年2月有28天if(ri==29)ri=1;xianshi(8,ri);write_com(0x89); //写完数据指针指向日原来位置}if(keynum==4)//调星期{week++; //2每按下一次星期加1if(week==7) //加满还原week=1;xingqi(); //显示星期write_com(0x8b); //写完数据指针指向星期原来位置}if(keynum==5)//调时{shi++;//2每按下一次时加1if(shi==24)shi=0; //加满还原xianshi(0x43,shi); //显示时write_com(0x80+0x44); //写完数据指针指向时原来位置}if(keynum==6)//调分{fen++;//2每按下一次分加1if(fen==60)fen=0;//加满还原xianshi(0x46,fen); //显示分write_com(0x80+0x47); //写完数据指针指向分原来位置}if(keynum==7)//调秒{miao++; //2每按下一次秒加1if(miao==60)miao=0;//加满还原xianshi(0x49,miao);//显示秒write_com(0x80+0x4a); //写完数据指针指向秒原来位置}while(!key2); //松手检测}}if(key3==0){delay(5);//消抖if(key3==0)//3按下时减1{if(keynum==1)//月减一{nian--;if(nian==-1)nian=2000;year(nian);write_com(0x83);}if(keynum==2)//月减一{yue--;if(yue==-1)yue=12;xianshi(5,yue);write_com(0x86);}if(keynum==3)//日减一{ri--;if(ri==0){if(yue==1||yue==3||yue==5||yue==7||yue==8||yue==10||yue==12)//1,3,5,7,8,10,12ri=31;if(yue==4||yue==6||yue==9||yue==11)//4,6,9,11ri=30;if(yue==2&&((nian%4==0&&nian%100!=0)||nian%400==0))//闰年ri=29;if(yue==2&&(nian%4!=0)||(nian%100==0&&nian%400!=0))//非闰年ri=28;}xianshi(8,ri);write_com(0x89);}if(keynum==4)//星期减一{week--;if(week==-1)week=6;xingqi();write_com(0x8b);}if(keynum==5)//时减一{shi--;if(shi==-1)shi=23;xianshi(0x43,shi);write_com(0xc4);}if(keynum==6)//分减一{fen--;if(fen==-1)fen=59;xianshi(0x46,fen);write_com(0xc7);}if(keynum==7)//秒减一{miao--;if(miao==-1)miao=59;xianshi(0x49,miao);write_com(0xca);}while(!key3); //3松手检测}}}if(key4==0)//4被按下进入调闹钟模式{ delay(5);//消抖if(key4==0){keynum1++;while(!key4);//松手}if(keynum1==1){ write_com(0x01);//清屏,指针清0write_com(0x80+0x45);//在时分之间显示":"write_date(':');write_com(0x80+0x48);//在分秒之间显示":"write_date(':');write_com(0x0f);//开启光标write_com(0xc4);//光标指向时}if(keynum1==2){write_com(0xc7);//光标指向分}if(keynum1==3){write_com(0xca);//光标指向秒}if(keynum1==4){ xianshi(0x43,shi1);xianshi(0x46,fen1);xianshi(0x49,miao1);}if(keynum1==5){ keynum1=0;write_com(0x0c);//关闭光标}}if(keynum1)//进入了调闹钟模式{if(key2==0)//2按下加1{delay(5);if(key2==0)//确实按下{if(keynum1==1)//调闹钟的时{shi1++;if(shi1==24)shi1=0;xianshi(0x43,shi1);write_com(0xc4);}if(keynum1==2)//调闹钟de分{fen1++;if(fen1==60)fen1=0;xianshi(0x46,fen1);write_com(0xc7);}if(keynum1==3){miao1++;if(miao1==60)miao1=0;xianshi(0x49,miao1);write_com(0xca);}while(!key2);//松手检测}}if(key3==0)//3每按一次减1{delay(5);if(key3==0){if(keynum1==1){shi1--;if(shi1==-1)shi1=23;xianshi(0x43,shi1);write_com(0xc4);}if(keynum1==2){fen1--;if(fen1==-1)fen1=59;xianshi(0x46,fen1);write_com(0xc7);}if(keynum1==3){miao1--;if(miao1==-1)miao1=59;xianshi(0x49,miao1);write_com(0xca);}while(!key3);//松手检测}}}}void daole(){if(aa==19)//一秒到了{ aa=0; //清0miao++;}if(miao==60) //一分了{ miao=0;fen++; }if(!keynum1) xianshi(0x49,miao); //当调闹钟模式按下时不显示当前时间if(fen==60){ fen=0;shi++;}if(!keynum1){xianshi(0x46,fen);write_com(0x80+0x48);//在分秒之间显示":"write_date(':') ;} //当调闹钟模式按下时不显示当前时间if(shi==24){shi=0;ri++;week++;}if(!keynum1){xianshi(0x43,shi);write_com(0x80+0x45);//在时分之间显示":"write_date(':') ;} //当调闹钟模式按下时不显示当前时间if(yue==1||yue==3||yue==5||yue==7||yue==8||yue==10||yue==12)if(ri==32){ri=1;yue++;}if(yue==4||yue==6||yue==9||yue==11)if(ri==31){ri=1;yue++;}if(yue==2&&((nian%4==0&&nian%100!=0)||nian%400==0))if(ri==30){ri=1;yue++;}if(yue==2&&(nian%4!=0)||(nian%100==0&&nian%400!=0))if(ri==29){ri=1;yue++;}if(!keynum1) xianshi(8,ri); //当调闹钟模式按下时不显示当前时间if(week==7)week=0;if(!keynum1) //当调闹钟模式按下时不显示当前时间{xingqi();write_com(0x8a);write_date('-');}if(yue==13){yue=0;nian++;}if(!keynum1) //当调闹钟模式按下时不显示当前时间{xianshi(5,yue);write_com(0x87);write_date('-');write_com(0x84);write_date('-');}if(!keynum1) //当调闹钟模式按下时不显示当前时间year(nian);}}void main(){init();for(num=0;num<12;num++){ write_date(table[num]);delay(5);} //显示初始时间write_com(0x80+0x40);for(num=0;num<11;num++){ write_date(table1[num]);delay(5);}TR0=1;while(1){if(shi==shi1&&fen==fen1&&miao==miao1) //闹钟到了蜂鸣器响{di();if(key4==0)//4被按下{ delay(5);//消抖if(key4==0)Beep=0;TR0=1;while(!key4);//松手}}daole();key();}}void time() interrupt 1 //中断函数{TH0=(65536-45872)/256;TL0=(65536-45872)%256;//进入中断装初值aa++;}。

基于stc51单片机的LCD1602显示时间的电子万年历(显示

基于stc51单片机的LCD1602显示时间的电子万年历(显示

基于stc51单片机的LCD1602显示时间的电子万年历(显示1.1 Keil uVision4的简要介绍2020年2月公布Keil μVision4,Keil μVision4引入灵活的窗口治理系统,使开发人员能够使用多台监视器,并提供了视觉上的表面对窗口位置的完全操纵的任何地点。

新的用户界面能够更好地利用屏幕空间和更有效地组织多个窗口,提供一个整洁,高效的环境来开发应用程序。

新版本支持更多最新的ARM芯片,还添加了一些其他新功能。

2020年3月ARM公司公布最新集成开发环境RealView MDK开发工具中集成了最新版本的Keil uVision4,其编译器、调试工具实现与ARM器件的最完美匹配。

Keil C51开发系统差不多知识Keil C51开发系统差不多知识1. 系统概述Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。

另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率专门之高,多数语句生成的汇编代码专门紧凑,容易明白得。

在开发大型软件时更能表达高级语言的优势。

下面详细介绍Keil C51开发系统各部分功能和使用。

2. Keil C51单片机软件开发系统的整体结构C51工具包的整体结构,uVision与Ishell分别是C51 for Windows和for Dos的集成开发环境(IDE),能够完成编辑、编译、连接、调试、仿真等整个开发流程。

开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。

然后分别由C51及C51编译器编译生成目标文件(.OBJ)。

目标文件可由LIB51创建生成库文件,也能够与库文件一起经L51连接定位生成绝对目标文件(.ABS)。

ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直截了当对目标板进行调试,也能够直截了当写入程序存贮器如EPROM中。

用51单片机和1602液晶做的数字钟

用51单片机和1602液晶做的数字钟

用51单片机和1602液晶做的数字钟数字钟是人们日常生活中常见的时间显示设备,它能够精确显示当前的时间,并且兼具简约和实用性。

本文将介绍使用51单片机和1602液晶屏幕制作自己的数字钟的方法。

所需材料在开始制作之前,我们需要准备以下材料: - 51单片机开发板 - 1602液晶屏幕 - 数字时钟芯片RTC(Real-Time Clock) - 面包板和导线 - 电阻和电容 - 编程器和烧录器硬件连接首先,我们需要将51单片机、1602液晶屏幕和RTC芯片连接起来。

根据硬件接口的定义和引脚功能的规定,我们可以进行以下连接: - 将51单片机的VCC 引脚连接到1602液晶屏幕的VCC引脚,用于提供电源。

- 将51单片机的GND引脚连接到1602液晶屏幕的GND引脚,用于地线连接。

- 将51单片机的P0口连接到1602液晶屏幕的数据线D0-D7,用于数据传输。

- 将51单片机的P2口连接到1602液晶屏幕的RS引脚,用于选择数据和命令传输。

- 将51单片机的P3口连接到1602液晶屏幕的EN引脚,用于启用LCD。

此外,还需要将RTC芯片连接到51单片机上,以实现时间的准确显示。

具体的连接方式可以参考RTC芯片的规格说明书。

软件编程完成硬件连接后,我们需要进行软件编程,以便控制51单片机、1602液晶屏幕和RTC芯片的功能。

初始化首先,我们需要对51单片机和1602液晶屏幕进行初始化设置。

这包括设置引脚的功能模式、初始化1602液晶屏幕的显示模式和清空显示区域。

读取时间接下来,我们需要通过RTC芯片来读取当前的时间。

这通常包括读取RTC芯片存储的年、月、日、时、分和秒的数据。

显示时间读取时间后,我们可以将其显示在1602液晶屏幕上。

这可以通过更新特定的LCD显示区域来实现。

我们可以在指定的位置、特定的行和列上显示时间。

更新时间为了实现实时的时间显示,我们需要定期更新显示的时间。

可以使用定时器中断来定期更新时间,并根据需要刷新液晶屏幕上的显示。

lcd1602液晶显示数字钟


{
time[1]=0;//超过,分清零
time[0]++;//小时加1
if(time[0]>23)//是否超过23
{
time[0]=0; //小时清零
•}

}
时间计算
• void main(void)
•{

uchar i;


while(1)

{
• 计时
for(i=0;i<250;i++)//循环调用显示程序250次,实现1秒
display_code[]={0x3f,0x60,0x5b,0x4 f,0x66,0x5d,0x7d,0x07,0x7f,0x6f,0x 40}; • uchar time[4]={0,0,0,0}; //时间初 值全为0
• void delay(void);//延时0.5毫秒 •{
定时1秒
• uchar i;
• for(i=250;i>0;i--);
•}
• void display()
/*程序用于P0口接数码管的断码,P2接数码管的位码*/
•{

uchar i,k;

k=0x80;
//k初始化,指向第一位数码管

for(i=0;i<8;i++) //循环8次,i值为0~7

{

P2=0;
//关闭显示

P0=display_code[time[i]/10]; //输出十位数的断码


{

display();//调用动态显示,动态显示一次约4毫秒

}

51单片机控制基于1602液晶显示 电子时钟【带闹铃和整点报时】

void buzz_pro(uchar be)//蜂鸣器发声函数
{
switch(be)
{//uint i;
/*用于整点响铃*/case 0:{
buzz=~buzz;
//delay1();
}break;
/*用于闹铃报时*/case 1:{
buzz=~buzz;
//delay(10);
}break;
}
}
void write_com(uchar com)//命令写入函数
{
rs=0;
delay(3);
P0=com;
delay(3);
lcden=1;
delay(3);
lcden=0;
}
void write_date(uchar date)//数据写入函数
{
rs=1;
delay(3);
P0=date;
delay(3);
write_date(0x30+ge);
}
void write_ymd(uchar add,uchar date)//年月日写入子程序
{
uchar sh,ge;
sh=date/10;
ge=date%10;
write_com(0x80+add);
write_date(0x30+sh);
write_date(0x30+ge);
sbit buzz=P1^5; //蜂鸣器控制端
uchar code week0[]="Sun";
uchar code week1[]="Mon";
uchar code week2[]="Tue";

51单片机电子表LCD1602显示_时间可调

/*功能:52单片机定时器0电子表LCD1602显示可对时间进行调节作者:燕山大学里仁学院09应电四班杨立业欢迎您的建议、指点和更多交流QQ:1024549573晶振:12M*/#include<reg52.h>#define uint unsigned intsbit lcden=P3^4; //液晶的使能端sbit rs=P3^5; //液晶的数据指令控制端sbit wr=P3^6; //液晶的读写端sbit rd=P3^7; //按键的一个线选使按键共阴极sbit fc=P3^0; //功能键确定时间调整的位置sbit jia=P3^1; //加1sbit jian=P3^2;//减1unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f};unsigned char code table1[]=" 00:00:00 ";uint num,num1,i,shi,ge,shu;long int hour,fen,miao;void write_com(uint com);void write_date(uint date);void init1602();void init() ;void write_sf(uint add,uint sf);void delay(uint x);void keyscan();void main(){ init();init1602();write_com(0x80+0x40+3);for(num1=1;num1<8;num1++){ write_date(table1[num1]);delay(5);}while(1){ keyscan();}}void write_com(uint com)//1602 写指令{ rs=0;P0=com;lcden=0;delay(10);lcden=1;delay(10);lcden=0;}void write_date(uint date)//1602写数据{ rs=1;P0=date;lcden=0;delay(10);lcden=1;delay(10);lcden=0;}void init() //定时器初始化{ rd=0;TMOD=0X01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;}void init1602()//1602初始化{ dula=0;wela=0;wr=0;lcden=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);}void write_sf(uint add,uint sf)//显示时间{ uint shi,ge;shi=sf/10;ge=sf%10;write_com(0x80+0x40+add);write_date(0x30+shi);write_date(0x30+ge);}void time0() interrupt 1 //定时器0中断{ TH0=(65536-50000)/256;TL0=(65536-50000)%256;num++;if(num==20){num=0;miao++;if(miao==60){ miao=0;fen++;if(fen==60){ fen=0;hour++;if(hour==24)hour=0;write_sf(4,hour);}write_sf(7,fen);}write_sf(10,miao);}}void delay(uint x)//ms级延时{ uint i,j;for(i=x;i>0;i--)for(j=110;j>0;j--);}void keyscan()//按键扫描{ if(fc==0) //功能键选择时间调节加减的位置{ delay(5);if(fc==0){ while(!fc);shu++;if(shu==4)shu=0;switch(shu){ case 0:TR0=1;write_com(0x0c);break;case 1:TR0=0;write_com(0x80+0x40+11);write_com(0x0f);break;case 2:write_com(0x80+0x40+8);write_com(0x0f);break;case 3:write_com(0x80+0x40+5);write_com(0x0f);break;}}}if(jia==0) //时或分或秒的加一{ delay(5);if(jia==0){ while(!jia);switch(shu){ case 1: miao++;if(miao==60)miao=0;write_sf(10,miao);write_com(0x80+0x40+11);break;case 2: fen++;if(fen==60)fen=0;write_sf(7,fen);write_com(0x80+0x40+8);break;case 3: hour++;if(hour==24)hour=0;write_sf(4,hour);write_com(0x80+0x40+5);break;}}}if(jian==0) //时或分或秒的减一{ delay(8);if(jian==0){ while(!jian);switch(shu){ case 1: --miao;if(miao==-1)miao=59;write_sf(10,miao);write_com(0x80+0x40+11);break;case 2: fen--;if(fen==-1)fen=59;write_sf(7,fen);write_com(0x80+0x40+8);break;case 3: hour--;if(hour==-1)hour=23;write_sf(4,hour);write_com(0x80+0x40+5);break;}}}}。

跟我学51单片机LCD1602液晶显示模块


1、LCD1602的P1.0-P1.4分别连接到51单片机的P0.0-P0.4; 2、LCD1602的P2.0-P2.7分别连接到51单片机的P2.0-P2.7;
3、LCD1602的VSS和VDD分别连接到51单片机的地线和电源; 4、LCD1602的VEE连接到51单片机的+5V;
5、LCD1602的PSB和REST分别直接接地和+5V。
二、LCD1602的应用
1、智能家居系统
智能家居系统是LCD1602的重要应用领域之一。在智能家居系统中,LCD1602 可以作为人机界面,显示各种信息,如温度、湿度、空气质量、电量等。同时, LCD1602还可以显示各种设备的状态,如灯光、空调、电视等,使用户能够更加 方便地控制各种设备。
2、工业控制系统
1、写入指令:通过单片机的I/O 口发送相应的指令码
2、写入数据:通过单片机的I/O 口发送相应的字符编码
显示控制在基础操作的基础上,我们可以进一步实现LCD1602液晶显示模块 的显示控制。下面通过几个实例来介绍如何利用LCD1602液晶显示模块实现文字 显示的控制。
1、静态显示:将一段文本的字符编码逐个写入LCD1602的控制器中,即可实 现文字的静态显示。例如,我们可以使用循环结构,依次将每个字符编码写入 LCD1602的控制器中。
参考内容二
基本内容
液晶显示模块LCD1602是一种常见的显示设备,广泛应用于各种嵌入式系统 和电子产品中。它具有低功耗、体积小、重量轻、高分辨率和长寿命等优点,因 此在许多领域中得到了广泛的应用。
一、LCD1602的概述
LCD1602是一种字符型液晶显示器,它由160个字符显示区域和8个字符显示 位组成。它支持多种字符集,包括英文字符集和数字字符集等。此外,LCD1602 还具有背光功能,可以在暗环境下清晰地显示字符。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

液晶屏LCD1602和单片机的接口
要使液晶屏正常工作,首先要让它接上外部的供电电 源,我们把VSS接地,VDD和VEE接5V的正电源。 让RS、RW、E分别接上单片机的P2.0、P2.1和P2.2 ,让单片机控制数据写入液晶屏中。单片机的P0.0— P0.7分别接上液晶屏的D0—D7引脚,进行数据的传输 ,液晶屏就可以显示单片机所发送过来的数据了。
本设计采取的模块
本设计采取的字符型液晶模块是一种常用5*7 点阵图形、2行16个字来显示字符的液晶显示 器LCD1602,如图所示。 每位之间有一个点 距的间隔,每行之间也有间隔起到了字符间距 和行间距的作用,该模块还配有3个按键,可 设置温度控制值。
Байду номын сангаас
引脚接口说明: 第1脚:VSS为地电源。 第2脚:VDD接5V正电源。 第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对 比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器 调整对比度。 第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令 寄存器。 第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。 当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平 R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数 据。 第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命 令。 第7~14脚:D0~D7为8位双向数据线。 第15脚:背光源正极。 第16脚:背光源负极。
液晶显示器的分类
液晶显示的分类方法有很多种,通常可 按其显示方式分为段式、字符式、点阵式 等。除了黑白显示外,液晶显示器还有多 灰度有彩色显示等。如果根据驱动方式来 分,可以分为静态驱动(Static)、单纯矩 阵驱动(Simple Matrix)和主动矩阵驱动 (Active Matrix)三种。据显示内容可分为 1行16个字、2行16个字、2行20个字等。 巧的诸多优点在袖珍式仪表和低功耗应用 系统中得到越来越来广泛的应用。
THE END
液晶显示屏功能介绍
液晶显示屏以其微功耗、体积小、 显示内容丰富、显示质量高、超薄轻 晶显示等优点。液晶显示的原理是利 用液晶的物理特性,通过电压对其显 示区域进行控制,有电就有显示,这 样即可以显示出图形。液晶显示器具 有厚度薄、适用于大规模集成电路直 接驱动、易于实现全彩色显示的特点 ,目前已经被广泛应用在便携式电脑 、数字摄像机、PDA移动通信工具等 众多领域。
相关文档
最新文档