LCD1602液晶电子时钟

合集下载

基于LCD1602电子时钟

基于LCD1602电子时钟

信息与电子工程学院课程设计报告录目一、课程设计概述 (3)1.1 课程设计背景 (3)1.2 课程设计内容 (3)1.3 课程设计技术指标 (3)二、方案的选择及确定 (3)2.1 单片机芯片的选择 (3)2.2 显示模块的选择 (4)2.3 实时时间计算模块的选择.42.4 实时环境温度采集模块选择 (4)2.5 电路设计最终方案决定 (5)三、系统硬件设计 (5)3.1 主控模块 (5)3.2LCD显示模块设计 (6)3.3 时间计算模块设计 (6)3.4 实时环境温度检测模块 (7)3.5 报警模块 (7)3.6 设置模块 (8)3.7 电源接口部分 (8)四、系统软件设计 (8)4.1 主函数 (8)4.2 设置模块 (9)4.31602 液晶屏 (10)4.4 软件原理图 (11)五、系统调试过程 (11)5.1 软件调试 (11)5.2 硬件调试 (12)六、结论 ..................................12七、遇到的问题及解决方法和总结 (12)7.1 硬件方面 (12)7.2 软件方面 (13)7.3 总结 (13)1八、参考文献 (13)九、附录 (14)课程设计概述1.1 课程设计背景随着微电子技术的高速发展,单片机在国民经济的个人领域得到了广泛的运用。

单片机以体积小、功能全、性价比高等诸多优点,在工业控制、家用电器、通信设备、信息处理、尖端武器等各种测控领域的应用中独占鳌头,单片机开发技术已成为电子信息、电气、通信、自动化、机电一体化等专业技术人员必须掌握的技术。

而电子万年历作为电子类小设计不仅是市场上的宠儿,也是是单片机实验中一个很常用的题目。

因为它有很好的开放性和可发挥性,因此对作者的要求比较高,不仅考察了对单片机的掌握能力更加强调了对单片机扩展的应用。

而且在操作的设计上要力求简洁,功能上尽量齐全,显示界面也要出色。

1.2 课程设计内容利用单片机、时钟芯片DS1302温度传感器DS18B20 16O2液晶屏等实现日期、时间、温度的显示,即是一个电子时钟。

用1602LCD设计的可调式电子钟

用1602LCD设计的可调式电子钟

单片机应用课程设计说明书用1602LCD设计的可调式电子钟专业自动化学生姓名班级自动化142学号 14100指导教师蒋完成日期 20年1 月23 日目录1 概述 (3)2 课题研究背景与意义 (3)2.1 课题研究背景 (3)2.2 课题研究意义 (3)3 系统方案设计与主要设计工作 (3)3.1 设计任务 (3)3.2 功能要求说明 (4)4设计课题总体方案 (4)4.1硬件设计方案 (5)4.2系统软件设计 (7)5. 软件仿真及实物设计调试 (9)5.1PROTUES仿真软件介绍 (9)5.2仿真运行结果说明 (10)5.3实物设计结果与调试 (11)6课程设计实验总结 (11)参考文献 (13)附录 (14)附录1:程序清单 (14)附录2:系统电路原理图 (21)附录3:元器件清单 (22)用1602LCD设计电子钟1 概述数字钟是采用数字电路实现对“时”、“分”、“秒”数字显示的计时装置。

数字钟的精度、稳定度远远超过老式机械钟。

在这次设计中,我们采用LED数码管显示时、分、秒,以24小时计时方式,根据数码管动态显示原理来进行显示,用12MHz的晶振产生振荡脉冲,定时器计数。

在此次设计中,电路具有显示时间的其本功能,还可以实现对时间的调整。

数字钟是其小巧,价格低廉,走时精度高,使用方便,功能多,便于集成化而受广大消费的喜爱,因此得到了广泛的使用。

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

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

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

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

LCD1602+液晶显示数字电子钟+报告书

LCD1602+液晶显示数字电子钟+报告书

LCD1602中文资料介绍用LCD1602 液晶显示数字电子钟,整点蜂鸣器提醒,时间可自行调整。

同时用一个功能键切换显示日期(也可更改调整)和秒表。

本设计有五个按键,第一个是功能键,切换三个功能,分别是日期、时间和秒表;第二个是调整键,按一下屏幕不会变化,只有当按调整加减键时,屏幕就会变化。

例如:一上电显示的是年月日,然后想调整,按一下调整键,屏幕无变化,按调整加减键,屏幕就会变化,date变成tzy,表示正在调整年。

年调整好后,再按一下第二个调整键,屏幕无变化,按调整加减键,屏幕就会变化,tzy变成tzm,表示正在调整月。

其他类似。

第三四个键是加减键;第五个是调整好后的确认键和秒表的确认键。

操作说明:比如要调整日期,先按一下调整p2.1键(左边数第二个键),然后按加1键p2.2或减1键p2.3,第一次是让调整年,年调整后再按调整p2.1键,这次是调整月。

调整后再按调整p2.1键,最后是调整日。

调整好后按确认键p2.4,这样年月日就设置好了。

年月日设置好后按功能切换键p2.0它会回到时间设置上,调整方法和调整年月日类似。

电路原理图:目录扉页答辩许可证毕业设计(论文)任务书中文摘要英文摘要目录文献综述一.选题的目的及意义二.研究领域概况三.文献分析四.研究思路及方案五.进度计划六.参考文献专题论文正文1.引言2.核心芯片简介2.1AT89S51的结构和特点2.1.1芯片引脚及结构特点2.1.2主要功能特性2.1.3AT89S51的新功能2.1.4单片机内部结构及说明2.2 1602液晶显示器的结构及工作原理2.2.1液晶显示器的引脚功能及内部结构图2.2.2CGROM和CGRAM中字符代码与图形对应关系2.2.3液晶模块内部控制器指令说明3.方案设计及论证4.硬件设计4.1.1芯片接口与显示设计4.2.1单片机复位电路设计4.2.2单片机晶振电路设计4.2.3单片机报时电路设计4.2.4单片机下载程序电路设计4.2.5按键功能描述及调试过程5.结论致谢参考文献实习报告外文中文论文缩写电路图§§§基于LCD1602的数字电子钟§§§购物从这里开始:/CD.asp此设计费用为:基本费用155+20(LCD1602)+1(蜂鸣器)+1(电位器)+3(6个12*12*6按键)=180元. 用LCD1602 液晶显示数字电子钟,整点蜂鸣器提醒,时间可自行调整。

LCD1602液晶电子时钟

LCD1602液晶电子时钟

物理与电子信息学院课程设计报告书姓名:班级:学号:时间:2010年11月电路简单且省去了很多复杂的线路,使得电路简明易懂,使用键盘键上的按键来调整时钟的时、分、秒,同时使用C语言程序来控制整个时钟显示,使得编程变得更容易,这样通过三个模块:键盘、芯片、显示屏即可满足设计要求。

原理如图一所示。

3.2.各部分功能实现3.2.1.控制部分(AT89C52)单片机采用52系列单片机。

由ATMEL公司生产的AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。

使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。

在单芯片上,拥有灵巧的8 位CPU 和在线系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、有效的解决方案。

AT89S52具有以下标准功能: 8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。

空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。

掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

而且,它还具有一个看门狗(WDT)定时/计数器,如果程序没有正常工作,就会强制整个系统复位,还可以在程序陷入死循环的时候,让单片机复位而不用整个系统断电,从而保护你的硬件电路。

单片机最小系统单片机最小系统主要由复位电路,晶振电路,电源等几部分组成。

1)复位电路复位电路有两种方式:上电复位和按钮复位,我们主要用按钮复位方式。

如图二所示:图二复位电路2)晶振电路晶振电路原理图三:图三晶振模块原理图选取原则:电容选取30pF,晶振为12MHz。

3)电源AT89S52单片机的供电电源是5V的直流电。

4)EA非/Vpp 脚我们没有用外部扩展ROM,因此EA非/Vpp为高电平,即接+5V电源。

lcd1602液晶显示数字钟

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毫秒

}

制作一个采用LCD1602显示的电子钟

制作一个采用LCD1602显示的电子钟

计算机科学与工程系实验报告实验题目:制作一个采用LCD1602显示的电子钟班级:姓名:学号:日期:一、实验目的掌握单片机使用定时器/计数器控制字符型液晶显示器LCD1602的设计与软件编程二、实验要求在LCD上显示当前的时间。

显示格式为“时时:分分:秒秒”。

设有4个功能键k1~k4,功能如下:(1)k1——进入时间修改。

(2)k2——修改小时,按一下k2,当前小时增1。

(3)k3——修改分钟,按一下k3,当前分钟增1。

(4)k4——确认修改完成,电子钟按修改后的时间运行显示。

三、实验要求提交的实验报告中应包括:电路原理图、实验设计思路、C51源程序(含注释语句)、运行效果(含运行截图与说明)、实验小结三、硬件电路原理图的设计四、编程思路及C51源程序编程思路:1、实现当按下K1之后,使中断T0停止计数2、实现当按下K2之后,使小时加一3、实现当按下K3之后,使分钟加一4、实现当按下K4之后,使中断T0恢复计数源程序:#include<reg51.h>#ifndef LCD_CHAR_1602_2005_4_9#define LCD_CHAR_1602_2005_4_9#define uchar unsigned char#define uint unsigned intsbit lcdrs = P2^0;sbit lcdrw = P2^1;sbit lcden = P2^2;void delay(uint z)//延时函数,此处使用晶振为11.0592MHz {uint x,y;for(x=z;x>0;x--){for(y=110;y>0;y--){;}}}void write_com(uchar com) //写入指令数据到lcd{lcdrw=0;lcdrs=0;P3=com;delay(5);lcden=1;delay(5);lcden=0;}void write_data(uchar date) //写入字符显示数据到lcd{lcdrw=0;lcdrs=1;P3=date;delay(5);lcden=1;delay(5);lcden=0;}void init1602()//1602液晶初始化设定{lcdrw=0;lcden=0;write_com(0x3C);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);}/*void write_string(uchar *pp,uint n)//采用指针的方法输入字符,n为字符数目{int i;for(i=0;i<n;i++)write_data(pp[i]);}*/void write_sfm(uchar add,uchar date)//向指定地址写入数据{uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+add);write_data(0x30+shi);write_data(0x30+ge);}#endif#define uchar unsigned char#define uint unsigned intsbit Key1 = P1^0;sbit Key2 = P1^1;sbit Key3 = P1^2;sbit Key4 = P1^3;uchar int_time;//定义中断次数计数变量uchar second;//秒计数变量uchar minute;//分钟计数变量uchar hour;//小时计数变量uchar code date[]=" H.I.T. CHINA ";//LCD第1行显示的内容uchar code time[]=" TIME 23:59:55 ";//LCD第2行显示的内容uchar second=55,minute=59,hour=23;void clock_init(){uchar i,j;for(i=0;i<16;i++){write_data(date[i]);}write_com(0x80+0x40);for(j=0;j<16;j++){write_data(time[j]);}}void clock_write( uint s, uint m, uint h){write_sfm(0x47,h);write_sfm(0x4a,m);write_sfm(0x4d,s);}void Keyscan1(){if(Key1==0) {delay(10);if(Key1==0) while(!Key1); TR0=0;}if(Key4==0) {delay(10);if(Key4==0) while(!Key4); TR0=1;}if(Key3==0){delay(10);if(Key3==0)while(!Key3);minute++;if(minute==60)minute=0;} if(Key2==0){delay(10);if(Key2==0)while(!Key2);hour++;if(hour==24)hour=0;}}void main(){init1602();//LCD初始化clock_init();//时钟初始化TMOD=0x01;//设置定时器T0为方式1定时EA=1; // 总中断开ET0=1; // 允许T0中断TH0=(65536-46483)/256;//给T0装初值TL0=(65536-46483)%256;TR0=1;int_time=0;//中断次数、秒、分、时单元清0second=55;minute=59;hour=23;while(1){clock_write(second ,minute, hour);Keyscan1();}}void T0_interserve(void) interrupt 1 using 1 //T0中断服务子程序{int_time++;//中断次数加1if(int_time==20) //若中断次数计满20次{int_time=0; //中断次数变量清0second++;//秒计数变量加1}if(second==60)//若计满60s{second=0; //秒计数变量清0minute ++;//分计数变量加1}if(minute==60)//若计满60分{minute=0;//分计数变量清0hour ++;//小时计数变量加1}if(hour==24){hour=0;//小时计数计满24,将小时计数变量清0 }TH0=(65536-46083)/256;//定时器T0重新赋值TL0=(65536-46083)%256;}五、仿真运行效果展示仿真初始状态按下k1键,进入修改模式六、实验小结通过本次实验,我掌握了LCD1602编程的方法,将所学知识运用到实践中,这是一件慢慢的过程,首先要把理论知识理解透彻,然后就是例题看懂,弄懂举一反三。

LCD1602电子时钟设计

LCD1602电子时钟设计

电子时钟设计班级:电子1001姓名:***学号:**********指导老师:***一、实验目的学习利用AT89C52进行任务设计,练习使用52单片机内部的定时器进行计时。

学习ds1302时钟芯片和ds18b20温度传感器的使用。

学习用模块化编程进行较长程序的编写。

二、设计要求:(1)利用lcd1602液晶显示屏作为显示模块,用AT89C52进行控制,要求用ds18b02测量显示即时温度,温度报警,用ds1302时钟芯片为单片机提供时间数据。

具有定时功能。

(2)要求时间和定时时间可调,并且在闹铃报时的时候可以用按键进行关闭。

并且可以用按键关闭打开定时功能。

(3)利用keil uVision4编译软件进行编译。

(4)完成实验要求,写出实验报告。

三、电子元件列表四、工作现象本时钟具有显示年月日时分秒星期、温度和温度报警的功能。

实验用时钟芯片ds1302来提供秒、分、时、星期、日期、月份和年份的数据,显示部分采用液晶显示模块lcd1602,右上方显示星期,左下角显示温度,右下角显示闹铃的开关状态。

用温度传感器ds18b20来测量温度。

另外,闹铃用pxo888音乐芯片来报时,用蜂鸣器做温度报警发声器。

具体各部分功能及操作下面将做介绍:ds1302给单片机at89c52提供年、月、日、时、分、秒、星期,ds18b20采集温度的数据,经单片机的处理送到液晶显示屏lcd1602上显示,实验设置的报警温度为30*c,由于程序有点长,已达到52单片机内存的极限,所以没加调整报警温度的功能,并且在天正时间的过程中能能加,不能减。

现在开始介绍具体的操作步骤:key1为调整时间和日期的按键,按下key1键,lcd1602上的光标按时分星期日月年的顺序进行移动,光标所到处按key3键可以调整相应的数据信息。

Key2键是闹钟调整键,本实验只提供了设置时间来调整闹钟,不设计年月日和星期,按下key2键,光标在时分之间切换,光标所到处按key3调整相应数据。

基于1602液晶的电子时钟设计

基于1602液晶的电子时钟设计

基于1602液晶的电子时钟设计电子时钟是一种通过电子装置与液晶显示屏显示时间的设备。

它通常由时钟芯片、控制电路和显示屏组成。

本文将设计一个基于1602液晶显示屏的电子时钟。

电子时钟的设计首先需要选择合适的时钟芯片。

一个常用的时钟芯片是DS1302,它具有低功耗、精准度高等优点,并且非常适合于低成本的时钟设计。

同时,我们也需要一个运行时钟,我们可以使用DS1302芯片内部的时钟信号来驱动1602液晶显示屏。

接下来,我们需要一个控制电路,用于读取DS1302芯片的时间数据,并将其显示在1602液晶显示屏上。

控制电路可以使用单片机,如ATmega16或Arduino开发板。

在编程控制电路之前,我们需要先连接DS1302和1602液晶显示屏。

首先,连接DS1302的VCC引脚至+5V电源,将GND引脚连接到地线,将DS和RST引脚分别连接到单片机的SCL(时钟线)和SDA(数据线)引脚。

然后,将1602液晶显示屏的VCC引脚连接至+5V电源,将GND引脚连接至地线,将RS、RW和E引脚依次连接至单片机的I/O口引脚,将D4至D7引脚依次连接至单片机的I/O口引脚。

接下来,我们编写单片机的程序代码。

首先,我们需要初始化1602液晶显示屏,包括清屏、设置显示模式等。

然后,我们需要初始化DS1302芯片,包括设置时钟、日期等。

接着,我们开始读取DS1302芯片的时间数据,并将其显示在1602液晶显示屏上。

我们可以使用单片机的定时器来控制时间的更新,例如每秒钟更新一次。

最后,我们可以添加其他功能,如闹钟、日期显示等。

在设计电子时钟的过程中,我们需要注意以下几点:1.为了节省能源并延长DS1302芯片的使用寿命,我们可以采用休眠模式,只有在需要更新时间时才唤醒DS1302芯片。

2.我们可以添加按键与单片机的输入输出口进行连接,从而实现时间的调节和设置功能,如设置闹钟、日期等。

3.为了提高显示效果,我们可以调整1602液晶显示屏的对比度和背光亮度,只需调整相关电路元件的参数即可。

基于单片机的lcd1602电子时钟设计

基于单片机的lcd1602电子时钟设计

基于单片机的LCD1602电子时钟设计一、设计任务和目的1.1、设计任务(1):用单片机设计基于LCD1602的电子时钟,显示时间和日期;(2):误差精度控制在1s/天;(3):具有时间和日期的校准功能;(4):能区分某年是闰年或平年,并对应显示2月份的天数;(5):根据月份的不同显示不同的最大日数;(6):搭建仿真电路图,模拟单片机要实现的功能;(7):焊接单片机开发板;(8):编写程序,下载并调试,实现要求的功能。

1.2、设计目的(1):熟练掌握KEIL软件的使用方法;(2):熟练掌握PROTEUS软件的使用方法;(3):掌握单片机I/O接口的工作原理;(4):掌握LCD显示器的工作原理及编程方法;(5):掌握独立式键盘的工作原理及编程使用方法;(6):掌握单片机的下载使用方法。

二、设计思路和方案论证2.1、设计思路电路总体上分为控制和显示部分。

以单片机最小系统作为核心控制电路,控制LCD显示,具体显示内容及方式由软件来完成;由于有时钟和日期的调节功能需要校准电路和基本的复位电路,复位电路采用按键复位,调节键、加1键、减1键三个按键完成,共需四个按键;计时功能由固定频率的晶振完成(采用11.0592MHz);显示部分主要采用LCD1602作为显示。

2.2、方案论证(1):时钟芯片的选择和论证方案一:采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、月、年以及闰年补偿的年进行计数,精度也较高,工作电压2.5V~5.5V范围内,功耗也较低,但价格比较贵。

方案二:直接采用单片机定时计数器提供秒信号,使用程序实现秒、分、时、日、月、年计数。

采用此方案实现虽然有一定的时间误差,但可减少芯片的使用,节约成本,易于实现,符合现实选用,所以采用此种作为时钟信号发生器。

(2):显示模块选择方案和论证:方案一:采用点阵式图形LCD12864液晶显示屏,液晶显示屏的显示功能强大,可显示文字,图形,显示多样,清晰可见,但是价格昂贵,需要的接口线多,所以在此设计中不采用点阵式图形LCD12864液晶显示屏。

基于1602液晶的电子时钟设计

基于1602液晶的电子时钟设计

2012 ~ 2013 学年第2 学期《单片机原理及应用》课程设计报告题目:基于1602液晶的电子时钟设计专业:自动化班级:电气工程系2011年5月12日1、任务书课题名称基于1602液晶的电子时钟设计指导教师(职称)执行时间2012~2013 学年第2学期第10 周学生姓名学号承担任务摘要电子时钟在日常生活和工农业生产中是必不可少的。

所以本文利于89C51单片机作为核心控制芯片,设计了一款基于1602LCD液晶显示的电子时钟。

该时钟具有键盘控制的暂停和启动,时钟、分钟和秒钟的手动调节功能;同时具备到整时(如1点整,2点整)时蜂鸣器发出“滴答”声,并且一个发光二极管发出闪烁。

所以设计最后在Protues仿真软件上仿真,验证该设计的正确性,关键词:电子时钟,LCD1602液晶,仿真。

基于1602液晶的电子时钟设计目录摘要 (2)绪论 (4)第一章设计要求与方案论证 (5)1.1 设计要求 (5)1.2 系统基本方案选择 (5)1.2.1 单片机芯片的选择方案 (5)1.2.2 显示模块选择方案 (5)1.2.3 时钟的控制方案 (5)1.3 电路设计最终方案决定 (5)第二章主要元件介绍 (7)2.1 单片机STC89C52介绍 (7)2.1.1 STC89C52主要功能 (7)2.1.2 STC89C52引脚介绍 (7)2.1.3 STC89C52最小系统 (9)2. 2 1602字符液晶介绍 (10)2.2.1 1602液晶概述 (10)2.2.2 1602引脚介绍 (10)2.2.3 1602字符液晶使用方法 (11)第三章系统硬件设计 (13)3.1 单片机控制系统 (13)3.2.各部分功能实现 (13)3.2.1.控制部分(STC89C52) (13)3.2.2键盘控制系统设计 (14)3.2.3.显示电路 (14)3.2.4.整点提醒电路 (15)3.3. 总电路原理图 (16)第四章软件设计及仿真 (17)4.1 软件主要要完成的功能 (17)4.2软件设计的主要流程 (17)4.3 仿真显示效果 (18)总结 (19)参考文献 (20)附录 (21)绪论20世纪末,电子技术获得了飞速发展,在其推动下,现代电子产品几乎深入到社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也是现代产品性能进一步提高,产品更新换代的节奏也越来越快。

基于单片机的LCD1602电子时钟设计

基于单片机的LCD1602电子时钟设计

基于单片机的LCD1602电子时钟设计近年来,随着物联网和智能设备的快速发展,电子时钟作为一种常见的智能设备,广泛应用于家庭、办公室等各种场合。

本文将基于单片机设计一款LCD1602电子时钟,实现时间显示、闹钟设置等功能。

一、硬件设计1.单片机选择在本设计中,选择常用的51系列单片机AT89C51,具有丰富的外设资源和强大的处理能力。

该单片机具有8位数据总线、16位地址总线,并且集成了定时/计数器、中断控制器和串行通信接口等外设。

2.显示模块选择3.时钟模块选择通过接入DS1302时钟模块,可以实现实时时钟的功能。

DS1302模块具有时钟计数器、电压检测电路、串行通信接口等,并且具有低功耗特点。

4.控制板设计根据LCD1602的引脚连接方式,设计一个控制板,用于将单片机、显示模块和时钟模块等连接在一起。

同时,需注意设计供电电路、外设输入输出电平等电路。

二、软件设计1.初始化设置通过单片机的GPIO口配置,将LCD1602和DS1302对应的引脚设置为输出模式,同时初始化LCD显示屏并进行清屏操作。

此外,需设置DS1302时钟模块的时钟、日期、闹钟等参数。

2.时间显示通过读取DS1302时钟模块的计数器,获得当前的小时、分钟和秒数,然后将其格式化为HH:MM:SS的形式,并通过LCD显示出来。

3.时间设置通过单片机的外部中断,当用户按下设置按钮后,进入时间设置模式。

在时间设置模式下,用户可以通过按下不同的按键来调整小时、分钟和秒数。

调整完成后,再次按下设置按钮即可保存设置。

4.闹钟设置通过单片机的定时器中断,设定一个闹钟定时器。

当闹钟定时器触发时,触发相应的中断,然后通过LCD显示闹钟提示。

此外,用户也可以通过按下按钮来设置闹钟时间,并通过单片机的外部中断进行处理。

5.闹钟响铃当闹钟时间到达时,触发相应的中断,通过LCD显示闹钟提示,并通过蜂鸣器发出响铃声。

总结通过本设计,可以实现一款功能齐全的LCD1602电子时钟。

LCD1602液晶简易电子钟

LCD1602液晶简易电子钟

一、仿真图(1)总体电路(2)按键电路(3)显示电路二、主程序/*LCD1602液晶简易电子钟陶鹏鹏 2015年8月10日*/ #include <reg52.h> //头文件#define uint unsigned int //宏定义#define uchar unsigned charuchar code table1[]=" LOVE STORY"; //显示数据表格uchar code table2[]=" 00:00:00 ";sbit lcdrs=P2^4; //端口定义sbit lcden=P2^6;sbit keys=P3^0;sbit keyup=P3^2;sbit keydown=P3^4;void delay(); //子函数声明void init();void keyscan();void write_com(uchar com);void write_date(uchar date); void write_sfm(uchar add,uchar temp);uchar num,count,keynum; //变量定义char shi,fen,miao;void main() //主函数{init();while(1){keyscan();}}void delay() //延时子函数{uint t;for(t=0;t<1000;t++);}void init() //初始化子函数{lcden=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);for(num=0;num<13;num++) {write_date(table1[num]); delay();}write_com(0x80+0x40); for(num=0;num<12;num++) {write_date(table2[num]); delay();}TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;}void timer_0() interrupt 1 //定时器子函数{TH0=(65536-50000)/256;TL0=(65536-50000)%256;count++;if(count==18){count=0;miao++;if(miao==60){miao=0;fen++;if(fen==60){fen=0;shi++;if(shi==24){shi=0;}write_sfm(4,shi);}write_sfm(7,fen);}write_sfm(10,miao);}}void write_com(uchar com) //指令子函数{lcdrs=0;P0=com;delay();lcden=1;delay();lcden=0;}void write_date(uchar date) //数据子函数{lcdrs=1;P0=date;delay();lcden=1;delay();lcden=0;}void write_sfm(uchar add,uchartemp) //刷新数据{uchar shi,ge;shi=temp/10;ge=temp%10;write_com(0x80+0x40+add); write_date(0x30+shi);write_date(0x30+ge);}void keyscan() //加减子函数{if(keys==0){delay();if(keys==0){keynum++;while(!keys);if(keynum==1){TR0=0;write_com(0x80+0x40+11); write_com(0x0f);}if(keynum==2){write_com(0x80+0x40+8); }if(keynum==3){write_com(0x80+0x40+5); }if(keynum==4){keynum=0;TR0=1;write_com(0x0c);}}}if(keys!=0){if(keyup==0){delay();if(keyup==0){if(keynum==1){while(!keyup);miao++;if(miao==60)miao=0;write_sfm(10,miao);write_com(0x80+0x40+11); }if(keynum==2){while(!keyup);fen++;if(fen==60)fen=0;write_sfm(7,fen);write_com(0x80+0x40+8); }if(keynum==3){while(!keyup);shi++;if(shi==24)shi=0;write_sfm(4,shi);write_com(0x80+0x40+5); }}if(keydown==0){delay();if(keydown==0){if(keynum==1){while(!keydown);miao--;if(miao==-1)miao=59;write_sfm(10,miao);write_com(0x80+0x40+11);if(keynum==2){while(!keydown);fen--;if(fen==-1)fen=59;write_sfm(7,fen);write_com(0x80+0x40+8); }if(keynum==3){while(!keydown);shi--;if(shi==-1)shi=23;write_sfm(4,shi);write_com(0x80+0x40+5); }}}}}。

LCD1602液晶屏数字时钟

LCD1602液晶屏数字时钟
函数功能:设定显示位置子程序
入口参数:pos
出口参数:
*****************************************************************************/
void lcd_pos(unsigned char pos)
{
lcd_wcmd(pos | 0x80);
void delay(unsigned char ms)
{
unsigned char i;
while(ms--)
{
for(i = 0; i< 250; i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
/*****************************************************************************
_nop_();
_nop_();
_nop_();
ep = 0;
}
/*****************************************************************************
函数功能:LCD初始化子程序
入口参数:
出口参数:
*****************************************************************************/
i=0;
s++;
if(s==60)
{
s=0;

LCD1602单片机数字钟设计(含附件)

LCD1602单片机数字钟设计(含附件)

基于单片机89C52的液晶数字钟设计摘要设计采用定时计数器工作方式1进行数值上的累加,经过延时程序,lcd1602驱动程序和时间格式转换程序,实现了数字钟的正常运转以及显示。

添加整点报时,用1个if 语句设置整点条件调用蜂鸣器程序实现功能;添加闹钟功能,通过当前时间与闹钟时间的对比促使蜂鸣器发声。

关键词定时计数器 LCD1602 闹钟单片机89C521.电路设计1.1主体设计1.1.1设计原理端,使用P0端要外接上拉电阻,这里放置10k阻值的排阻。

蜂鸣器需要三极管放大后方可使用。

开关用四脚独立按键,接P1端。

使用12MHz的晶振。

1.2各部分设计1.2.1时钟设计单片机的时钟有两种方式产生,分别是内部方式和外部方式。

设计采用内部方式。

产生时钟的是振荡电路。

由一个12MHz的晶振和两个30pF的串联着的电容并联在一起,形成谐振电路。

晶振和电容大小涉及电路振荡频率的稳定性和大小,以及起振响应速度。

1.2.2复位设计复位有两种,区别在于是否有开关。

按一次开关,电位变化形成一次脉冲,使单片机复位。

采用10k电阻和10uF的电解电容。

1.2.3按键设计有三种模式,分别是工作模式,当前时间设置模式,闹铃时间设置模式。

(1)工作模式。

就是正常数字钟功能,有整点报时功能。

(2)当前时间设置模式。

1键进入该模式,之后,1键调时,2键调分,3键确认。

(3)闹铃时间设置模式。

3键进入该模式,之后,1键调时,2键调分,3键确认,4键打开闹铃。

工作模式2键可以查看闹铃时间。

1.2.4lcd1602设计Lcd1602的DB端接单片机的P0端,2和15脚接5v,其他的接地。

加10k排阻,程序正确,电路无差错,可正常使用。

1.2.5蜂鸣器设计蜂鸣器通过三极管放大后使用,作用有闹铃和整点报时的发声。

三极管采用pnp型规格。

1.3软件仿真Proteus 7.5图1.3仿真图图1.4PCB 设计设计仿真用到的器件在此版本软件上都能找到。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

物理与电子信息学院课程设计报告书姓名:班级:学号:时间:2010年11月电路简单且省去了很多复杂的线路,使得电路简明易懂,使用键盘键上的按键来调整时钟的时、分、秒,同时使用C语言程序来控制整个时钟显示,使得编程变得更容易,这样通过三个模块:键盘、芯片、显示屏即可满足设计要求。

原理如图一所示。

3.2.各部分功能实现3.2.1.控制部分(AT89C52)单片机采用52系列单片机。

由ATMEL公司生产的AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。

使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。

在单芯片上,拥有灵巧的8 位CPU 和在线系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、有效的解决方案。

AT89S52具有以下标准功能: 8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。

空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。

掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

而且,它还具有一个看门狗(WDT)定时/计数器,如果程序没有正常工作,就会强制整个系统复位,还可以在程序陷入死循环的时候,让单片机复位而不用整个系统断电,从而保护你的硬件电路。

单片机最小系统单片机最小系统主要由复位电路,晶振电路,电源等几部分组成。

1)复位电路复位电路有两种方式:上电复位和按钮复位,我们主要用按钮复位方式。

如图二所示:图二复位电路2)晶振电路晶振电路原理图三:图三晶振模块原理图选取原则:电容选取30pF,晶振为12MHz。

3)电源AT89S52单片机的供电电源是5V的直流电。

4)EA非/Vpp 脚我们没有用外部扩展ROM,因此EA非/Vpp为高电平,即接+5V电源。

3.2.2键盘控制系统设计按键需要4个,分别实现为时间调整、时间的加、时间的减、退出四个功能。

用单片机的4个I/O口接收控制信号,其电路如图四下:图四按键调时电路通过控制键来控制所要调节的是时、分、还是秒。

在控制键按下后LCD 中会在相应的位置出现光标,这时在通过加数键或减数键来控制时分秒的加或减。

3.2.3.显示电路。

显示电路如图五所示:图五显示电路4.软件设计4.1 软件主要要完成的功能(1)显示时间程序用软件调节时间,通过程序的调节,最后用LCD现实时钟(2)调节时间程序按键调节时间,能实现时、分、秒的调节4.2软件设计的主要流程(1)系统总的流程图主要功能是负责时间的显示,通过写地址和写数据来实现时间的调节和控制,最后通过调用显示子程序显示出来如图六所示。

(2)时间控制程序时间控制程序,用中断准确的控制时间,采用60进制,60秒为一分钟,60分钟为一个小时,全天设置为24小时。

程序流程图如图七所示。

程序用C语言编写,代码见附录二。

编程时采用KEIL C,而仿真用PROTUES,仿真时仿真图如图八所示图六 总程序流程图 图七 时钟流程图图八 PROTUES 仿真图开始定时器及中断定时器初按键调时是否设执行显示N Y附录二:程序#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit rs=P2^0;sbit rw=P2^1;sbit en=P2^2;sbit s1=P3^0;sbit s2=P3^1;sbit s3=P3^2;uchar shi,fen,miao,ri,yue,nin;ucharcodetable[]={"SUNCONGRONG TIME"};uchar code table1[]={" 23:59:56 "};uchar num,num1,count;uint i,sh,ge,s,g;void delay(uchar time){uint j;for(;time>0;time--)for(j=0;j<125;j++);}void write_com(uchar com){en=0;rs=0;delay(5);P1=com;delay(5);en=1;delay(5);en=0;}void write_data(uchar dat){en=0;rs=1;delay(5);P1=dat;delay(5);en=1;delay(5);en=0; }void init(){en=0;rw=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);for(i=0;i<16;i++){write_com(0x80+i);write_data(table[i]);}for(i=0;i<16;i++){write_com(0x80+0x40+i);write_data(table1[i]);}miao=56;fen=59;shi=23;TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;}void write_sfm(uchar add,uchar num) {sh=num/10;ge=num%10;write_com(0x80+0x40+add);write_data(0x30+sh);write_data(0x30+ge);}void write_nyr(uchar add1,uchar x) {sh=x/10;ge=x%10;write_com(0x80+add1);write_data(0x30+sh);write_data(0x30+ge);}void timer0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;count++;if(count==20){count=0;miao++;if(miao==60){miao=0;fen++;if(fen==60){fen=0;shi++;if(shi==24){shi=0;write_sfm(4,shi);}write_sfm(7,fen);}write_sfm(10,miao);}}void keyscan(){if(s1==0){delay(5);if(s1==0){num1++;while(!s1)if(num1==1){TR0=0;write_com(0x0e);write_com(0x80+0x40+0x0b);write_com(0x0f);}if(num1==2){write_com(0x80+0x40+0x08);}if(num1==3){write_com(0x80+0x40+0x05);}if(num1==4){num1=0;write_com(0x0c);TR0=1;}}}if(num1!=0){if(s2==0){delay(5);if(s2==0){while(!s2)while(!s2)if(num1==1){delay(20);miao++;if(miao==60)miao=0;write_sfm(10,miao);write_com(0x80+0x40+0x0a);}if(num1==2){fen++;if(fen==60)fen=0;write_sfm(7,fen);write_com(0x80+0x40+0x07);}if(num1==3){shi++;if(shi==24)shi=0;write_sfm(4,shi);write_com(0x80+0x40+0x04);}}}}if(num1!=0)if(s3==0){delay(5);if(s3==0){while(!s3)if(num1==1){delay(20);miao--;if(miao==-1)miao=59;write_sfm(10,miao);write_com(0x80+0x40+0x0a);}if(num1==2){fen--;if(fen==-1)fen=59;write_sfm(7,fen);write_com(0x80+0x40+0x07);}if(num1==3){shi--;if(shi==-1)shi=23;write_sfm(4,shi);write_com(0x80+0x40+0x04);}}}}void main(){init();while(1){keyscan();}}。

相关文档
最新文档