基于51单片机的LCD简单电子钟的设计

上传人:txadgkn****dgknqu... 文档编号:68688568 上传时间:2022-04-03 格式:DOCX 页数:18 大小:198.32KB
返回 下载 相关 举报
基于51单片机的LCD简单电子钟的设计_第1页
第1页 / 共18页
基于51单片机的LCD简单电子钟的设计_第2页
第2页 / 共18页
基于51单片机的LCD简单电子钟的设计_第3页
第3页 / 共18页
点击查看更多>>
资源描述
精选优质文档-倾情为你奉上编号: XXX科技大学单片机原理及应用设计实验报告课 题: 电子钟 专 业: 自动化 学生姓名: XXX 学 号: XXXXX 2016 年 5 月 16 日目 录0前言11总体方案设计12 硬件电路设计23 软件设计44 调试分析及说明55 结论7参考文献7课设体会8附录1 电路原理9附录2 程序清单10 摘要:传统的数字电子时钟采用了较多的分立元器件,不仅占用了很大的空间而且利用率也比很低,随着系统设计复杂度的不断提高,用传统时钟系统设计方法很难满足设计需求。单片机是集CPU、RAM、ROM、定时器/计数器和多种接口于一体的微控制器。它体积小、成本低、功能强,广泛应用于智能产品和工业自动化上。而51系列的单片机是各单片机中最为典型和最有代表性的一种。,本次设计提出了系统总体设计方案,并设计了各部分硬件模块和软件流程,在用C语言设计了具体软件程序后,将各个模块完全编译通过过后,结果证明了该设计系统的可行性。该设计给出了以AT89C2051为核心,利用单片机的运算和控制功能,并采用系统化LED显示模块实时显示数字的设计方案,适当地解决了实际生产和日常生活中对计时高精确度的要求,因此该设计在现代社会中具有广泛的应用性。关键字:AT89C2051,C语言程序,电子钟。0 前言利用51单片机开发电子时钟,实现时间显示、调整功能。具体要求如下:(1) 根据给定题目设计的Proteus仿真原理图,并简单阐述设计原理;(2) 根据给定题目设计有关的51汇编语言(或C语言)源程序,及主要的流程框图;(3) 在Proteus仿真界面下运行程序实现给定的功能;(4) 下载到ZKSYS单片机实验板上验证有关程序实现给定的功能。1 总体方案设计 该电子时钟由89C51,按键,1602 LCD液晶屏等构成,采用晶振电路作为驱动电路,利用单片机内部定时计数器0通过软件扩展产生的一秒定时,达到时分秒的计时,六十秒为一分钟,六十分钟为一小时,满二十四小时为一天。时钟的年月日时分秒的切换是由一个按键控制,而另外两个个按键控制加减调节。 图1 系统结构框图该电子时钟由STC89C51,按键,1602 LCD液晶屏等构成,采用晶振电路作为驱动电路,晶振电路的晶振频率为12MHZ,使用的定时器/计数器工作方式1,通过软件扩展产生的一秒定时,达到时分秒的计时,60秒为一分钟,60分钟为一小时,24小时为一天,又重00:00:00开始计时2硬件电路设计(1) 时钟电路设计单片机利用外部12MHZ晶振构成振荡电路作为时钟源,时钟电路的原理如下图。图2 时钟电路图(2) 独立按键输入电路 按键处理设置为:当有没键按下时,时钟正常运行;当按K1时分别切换到年月日时分秒;按K2为加。按K3为减。电路图如下图 图3 独立按键电路(3) 单片机系统AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROMFalsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。外形及引脚排列如下图图4 单片机系统图(4) 液晶显示LCD1602采用标准的16脚接口,第1脚:VSS为电源地;第2脚:VDD接5V电源正极;第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高;第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器;第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作;第6脚:E(或EN)端为使能(enable)端。第714脚:D0D7为8位双向数据端;第1516脚:空脚或背灯电源。电路如下图图5 LCD液晶显示图3软件设计本系统的软件系统主要可分为主程序、定时计数中断程序、时间调整程序、延时程序四大模块。系统的流程图如下图开始液晶初始化时间初始化按键是否按下?调整时间是 否读取时间显示时间结束设计思路:本系统主要可分为主程序、定时计数中断程序、时间调整程序、延时程序和LCD液晶驱动程序。定时中断程序是利用单片机内部定时器0实现1秒的定时,然后利用软件延时实现分小时,时间调整程序是利用单片机的内部存贮器,把调整好的时间写到显示时间的存贮单元,然后启动定时器开始计时并显示,延时程序是利用软件实现延时达到去抖的目的。液晶启动程序是为了把单片机的数据送到显示器的同时让显示器的第6脚使能断的电平实现由1到0的跳变,使显示器执行显示的命令。主程序就是利用这些子程序中断程序实现显示、定时等功能。 4调试分析及说明(1) 时钟正常运行调试仿真图图6 正常运行仿真图 (2) 时间调整仿真图10 对时分秒的调整5 结论本次电子时钟的设计基本完成:当没有键按下时,时钟正常运行;时钟的年月日时分秒的切换是由一个按键控制,而另外两个个按键控制加减调节附录1 电路原理附录2 程序清单 #include#define uchar unsigned char#define uint unsigned intuchar code table= 2015-05-27 WED ;uchar code table1= 12:30:55;uchar code table2= ;uchar code table3=Made by HUANG;uchar code table4=MONTUEWEDTHUFRISATSUN;uchar count,s1num;char miao,fen,shi,ri,yue;uint nian;sbit lcd_rs = P20;sbit lcd_rw = P21;sbit lcd_en = P22;sbit s1=P10;sbit s2=P11;sbit s3=P12;sbit Output_squ=P36;void delay(uint z)/延时子函数uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void write_com(uchar com)/写命令函数lcd_rs = 0;P0= com;delay(5);lcd_en=1;delay(5);lcd_en=0;void write_date(uchar date)/写数据函数lcd_rs = 1;P0= date;delay(5);lcd_en=1;delay(5);lcd_en=0;void init()/初始化函数int num;shi=12;fen=30;miao=55;ri=27;yue=5;nian=2015;lcd_en=0;lcd_rw=0;write_com(0x38);/显示设置模式write_com(0x0c);/开显示,不显示光标,光标不闪烁 write_com(0x06);/地址指针加一,整屏不移动write_com(0x01);/清屏write_com(0x80);for(num=0;num16;num+)/显示数字write_date(table2num);delay(300);write_com(0x80+0x40);for(num=0;num16;num+)/显示made by HUANGwrite_date(table3num);delay(300);delay(5000);write_com(0x01);write_com(0x80);for(num=0;num16;num+)/显示日期write_date(tablenum);delay(5);write_com(0x80+0x40);for(num=0;num12;num+)/显示时间write_date(table1num);delay(5);TMOD=0x51;/启动定时器中断TH0=0X3C; /50msTL0=0XB0;TH1=0X00;TL1=0X00;EA=1;ET0=1;TR0=1;/打开定时器0TR1=1; /打开定时器0void write_sfm(uchar add,uchar date)/写时分秒函数uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+0x40+add);write_date(0x30+shi);write_date(0x30+ge);void write_nyr(uint add,uint date)/写年月日函数,此处若用uchar范围只有0-255 /不够,改用uint(0-65535)uint qian,bai,shi,ge;qian=date/1000;bai=date%1000/100;shi=date%100/10;ge=date%10;write_com(0x80+add);write_date(0x30+qian);write_date(0x30+bai);write_date(0x30+shi);write_date(0x30+ge);void write_yr(uchar add,uchar date)/写月日函数uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+add);write_date(0x30+shi);write_date(0x30+ge);void keyscan()/按键扫描函数int m,n;if(s1=0)delay(5);if(s1=0)/按键1光标移位扫描s1num+;if(s1num=1)while(!s1);/等待按键松手write_com(0x80+0x40+10);TR0=0;/关闭定时器write_com(0x0f); /开显示,显示光标,光标闪烁if(s1num=2)while(!s1);write_com(0x80+0x40+7);if(s1num=3)while(!s1);write_com(0x80+0x40+4);if(s1num=4)while(!s1);write_com(0x80+3);if(s1num=5)while(!s1);write_com(0x80+6);if(s1num=6)while(!s1);write_com(0x80+9);if(s1num=7)while(!s1)write_com(0x80+13);if(s1num=8)while(!s1);s1num=0;write_com(0x0c);TR0=1;/开定时器if(s1num!=0)if(s2=0)/按键2加功能delay(5);if(s2=0)while(!s2);if(s1num=1)/秒加miao+;if(miao=60)miao=0;write_sfm(10,miao);write_com(0x80+0x40+10);if(s1num=2)/分加fen+;if(fen=60)fen=0;write_sfm(7,fen);write_com(0x80+0x40+7);if(s1num=3)/时加shi+;if(shi=24)shi=0;write_sfm(4,shi);write_com(0x80+0x40+4);if(s1num=4)/年加nian+;if(nian=10000)nian=2000;write_nyr(1,nian);write_com(0x80+3);if(s1num=5)/月份加yue+;if(yue=13)yue=1;write_yr(6,yue);write_com(0x80+6);if(s1num=6)/日期加ri+;if(ri=29&yue=2&!(nian%4=0&nian%100!=0)|nian%400=0)ri=1;/平年if(ri=30&yue=2&(nian%4=0&nian%100!=0|nian%400=0)ri=1;/闰年if(ri=31&(yue=4|yue=6|yue=9|yue=11)ri=1;if(ri=32)ri=1;write_yr(9,ri);write_com(0x80+9);if(s1num=7)/星期加m=m+3;if(m=21)m=0;write_com(0x80+12);for(n=m;nm+3;n+)write_date(table4n);delay(5);write_com(0x80+13);if(s3=0)/按键3减功能delay(5);if(s3=0)while(!s3);if(s1num=1)/秒减miao-;if(miao=-1)miao=59;write_sfm(10,miao);write_com(0x80+0x40+10);if(s1num=2)/分减fen-;if(fen=-1)fen=59;write_sfm(7,fen);write_com(0x80+0x40+7);if(s1num=3)/时减shi-;if(shi=-1)shi=23;write_sfm(4,shi);write_com(0x80+0x40+4);if(s1num=4)/年减nian-;if(nian=1999)nian=2000;write_nyr(1,nian);write_com(0x80+3);if(s1num=5)/月份减yue-;if(yue=0)yue=12;write_yr(6,yue);write_com(0x80+6);if(s1num=6)/日减ri-;if(ri=0)if(yue=2&!(nian%4=0&nian%100!=0)|nian%400=0)ri=28;/平年if(yue=2&(nian%4=0&nian%100!=0|nian%400=0)ri=29;/闰年if(yue=4|yue=6|yue=9|yue=11)ri=30;if(yue=1|yue=3|yue=5|yue=7|yue=9|yue=11)ri=31;write_yr(9,ri);write_com(0x80+9);if(s1num=7)/星期减m=m-3;if(m=0)m=21;write_com(0x80+12);for(n=m;n-3m;n+)write_date(table4n-3);delay(5);write_com(0x80+13);void main()int i,j;init();while(1) keyscan();if(TL1=8)TH1=0X00;TL1=0X00;miao+;if(miao=60)miao=0;fen+;if(fen=60)fen=0;shi+;if(shi=24)shi=0;ri+;j=j+3;if(j=21)j=0;write_com(0x80+12);for(i=j;ij+3;i+)write_date(table4i);delay(5);if(ri=29&yue=2&!(nian%4=0&nian%100!=0)|nian%400=0)ri=1;yue+;/平年if(ri=30&yue=2&(nian%4=0&nian%100!=0|nian%400=0)ri=1;yue+;/闰年if(ri=31&(yue=4|yue=6|yue=9|yue=11)ri=1;yue+;if(ri=32)ri=1;yue+;if(yue=13)yue=1;nian+;if(nian=10000)nian=2000;write_nyr(1,nian);write_yr(6,yue);write_yr(9,ri);write_sfm(4,shi);write_sfm(7,fen);write_sfm(10,miao); void timer() interrupt 1TH0=0X3C;TL0=0XB0;Output_squ=Output_squ;专心-专注-专业
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!