




已阅读5页,还剩37页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
武汉理工大学能力拓展训练课程设计说明书数字定时器设计摘 要单片机在电子产品中的应用越来越广泛,特别是51系列的单片机,由于其使用方便、价格低廉等优势,在市场上占有很大的份额。at89s52就是51系列中的一个比较成熟的型号,它完全兼容51单片机的指令。本文详细介绍了基于at89s52单片机的数字电子钟的设计,本电子钟可以实现日期、时间的显示和调整,带有整点提示和一个闹钟,并且可以显示当前气温。本设计包括硬件设计和软件设计两部分。主要硬件有:三端稳压器lm7805、at89s52单片机、字符型液晶显示模块hy1602a和若干按键等。软件大致思路为:使用12mhz的晶振,单片机内部的定时器0工作在方式1,每计数50000个机器周期(即50ms)产生一次中断,中断20次就是一秒,这样就可以实现精确计时的目的,不断扫描按键,如果有按键按下,则对按键做出相应的响应。关键字:单片机; 电子钟; lcd1602;abstractmcu in the application of electronic products becomes more widely, particularly the 51 series of mcu, because of its ease of use, low prices and other advantages,its in a large market share. at89s52 is a more mature models in the 51series, it is fully compatible with the directive mcu 51. this paper describes the mcu based on the at89s52 the design of digital electronic clock, the electronic clock can be achieved date, time and adjust the show, it also has the exact point timekeeping and a clock,for the better it can display the current temperature. the design includes hardware and software design in two parts. main hardware: at89s52 mcu, character lcd module hy1602a, a number of buttons. the general idea for software: by use of 12 mhz crystal, the mcus internal timer 0 works in the methods 1, each count 50,000 machine cycle (50 ms) resulted in an interruption, composition a second by interruptting 20 times, so that you can achieve precise the purpose of time. it will be displayed the real-time data on the lcd1602 at the same time, and constantly scan button, if a button is depressed, it will be produce the corresponding response with the button. keywords: mcu; electronic clock; lcd1602;目 录1 设计方案11.1 设计要求11.2 设计方案论证12 硬件设计22.1 器件选型22.2 器件介绍32.2.1单片机at89s5232.2.2 lcd1602显示模块43 软件设计53.1 软件设计思路53.1.1 实现功能53.1.2编程思路63.1.3操作及功能介绍63.2 主程序流程图74 仿真图85 设计体会及小结9参考文献10附录1 硬件电路设计图11附录2 主程序12武汉理工大学能力拓展训练课程设计说明书1 设计方案1.1 设计要求用at89s52单片机,在1602lcd上显示年月日、星期、时分秒设计数字钟,内有4组可设置的定时开/关,控制一路开关量输出。定时开关的设置分为单次操作(2011年6月25日8:00开2011年6月26日18:00关),周期操作(如周三8:00 开,周四16:00关)。数码管显示时间(单位秒)与设置值(单位分钟),用发光二极管表示周期与单次操作。具备整点提示功能,提示音为蜂鸣器发出“滴滴”声。具备闹钟功能,闹铃方式为蜂鸣器持续响10秒钟,或者用按键手动关闭响铃和输出量。可以用键盘调整时间、设定开关时间。1.2 设计方案论证本设计是纯粹的应用性设计,主要以实现计时、定时、温度显示等功能为最终目的。设计以atmel公司的at89s52为核心,在最小系统的基础上扩展键盘,数字温度计,以及lcd显示模块,硬件设计简单节约,其功能的实现主要靠软件设计,所以软件在本设计中是最为重要的,在计时设计思路上有两种方案可以选取。方案一:选用外部时钟芯片,单片机只负责其数据的存取读写以及外部辅助电路的扩展,这种方案的优点是计时准确,软件编写相对简单,但其要求对其芯片必须要有比较深的了解方案二:利用单片机的内部时钟和定时器进行计数,这种方案电路简单,容易实现,但时间容易丢失,且长时间计数会有误差,而且软件编写也相对复杂。考虑到本次设计的目的,采用方案二,并加入了年月日的扩展,由于时间和精力有限年月日只是进行简单的模拟,没有精确的进行计算。只是进行适当的扩展。本设计包括硬件设计和软件设计两部分。主要硬件有at89s52单片机、字符型液晶显示模块hy1602a和若干按键等。软件大致思路为:使用12mhz的晶振,单片机内部的定时器0工作在方式1,每计数50000个机器周期(即50ms)产生一次中断,中断20次就是一秒,这样就可以实现精确计时的目的。在把实时数据显示在lcd1602上的同时,不断扫描按键,如果有按键按下,则对按键做出相应的响应。2 硬件设计2.1 器件选型本设计选取主控mcu为atmel公司的at89s52,显示器件选择市面上常见的字符型液晶显示模块hy1602a。图2-1 硬件连接总图2.2 器件介绍2.2.1单片机at89s52一、功能特性描述at89s52是一种低功耗、高性能cmos 8位微控制器,具有8k 在系统可编程flash存储器。使用atmel公司高密度非易失性存储器技术制造,与工业80c51产品指令和引脚完全兼容。片上flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位cpu和在系统可编程flash,使得at89s52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。二、外部引脚图如图2-2为单片机at89s52的引脚图。 图2-2at89s52引脚图2.2.2 lcd1602显示模块一、lcd1602概述字符型型液晶是一种用57点阵图形来显示字符的液晶显示器,根据显示的容量可以分为1行16个字、2行16个字、2行20个字等,最常用的为2行16个字。本设计所采用的lcd1602即为最常用的2行16个字。下面是hy1602a液晶模块的一些主要技术参数:1、逻辑工作电压(vdd):+4.5+5.5v2、lcd驱动电压(vdd-vl):+4.5+13.0v3、工作温度(ta):060(常温)/-2075(宽温)4、工作电流:2.0ma二、引脚图及功能介绍本设计使用带背光的液晶模块1602采用标准的16脚接口,如图2-3,其引脚功能如下:图2-3 lcd1602引脚图第1脚:vss为电源地,接gnd。第2脚:vdd接5v正电源。第3脚:vee为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高会产生“鬼影”,使用时可以通过一个10k的电位器调整对比度。第4脚:rs为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:rw为读写信号线,高电平时进行读操作,低电平时进行写操作。当rs和rw共同为低电平时可以写入指令或者显示地址,当rs为低电平rw为高电平时可以读忙信号,当rs为高电平rw为低电平时可以写入数据。第6脚:e端为使能端,当e端由高电平跳变成低电平时,液晶模块执行命令。第714脚:d0d7为8位双向数据线。第15脚:bla背光电源正极(+5v)输入引脚(本图未显示)。第16脚:blk背光电源负极,接gnd(本图未显示)。注意:液晶模块背光须消耗电流约为50ma左右。3 软件设计3.1 软件设计思路3.1.1 实现功能用at89s52单片机,在1602lcd上显示年月日、星期、时分秒。内有4组可设置的定时开/关,控制一路开关量输出。定时开关的设置分为单次操作(2011年6月25日8:00开2011年6月26日18:00关),周期操作(如周三8:00 开,周四16:00关)。具备闹钟和时间段的设定功能,闹铃方式为蜂鸣器持续响10秒钟,或者用按键手动关闭响铃。可以用键盘调整时间、设定开关时间和方式。复位时间是2011年1月1日00:00:00。3.1.2编程思路1. 给以下变量赋初值:年(year)、月(month)、日(day)、时(hour)、分(min)、秒(sec)。2. 因为晶振频率为12mhz,所以计数频率为12mhz/12=1mhz,这就需要计数器0计数1000000次才可以达到一秒钟。我们用定时器0工作在方式1状态,每次计数50000次,如此进行20次,即可凑够一秒钟。这样可以得到初始化定时器的控制字:tmod=0x01,计数初值65536-50000=15536即 0x3cb0,这样就可以设计一个计数一秒的函数。3. 读相应变量的值,送入lcd显示时间等信息。4. 不断的扫描按键,并且响应按键输入。在进入设定模式后,所有时间变量被过渡变量代替,如果确认设置,则过渡变量赋给时间变量,如果取消设置,则还使用原时间变量。3.1.3操作及功能介绍定时器能显示年月日、星期、时分秒。内有4组可设置的定时开/关,控制一路开关量输出。定时开关的设置分为单次操作(2011年6月25日8:00开2011年6月26日18:00关),周期操作(如周三8:00 开,周四16:00关)。下面具体具体介绍按键和led的功能:1、k1为时间的小时设定键,按下后将进入时间的设定,按k1是对时间小时的设定。2、k2为时间的分钟设定键,当处于时间的调整时,按它可以对时间的分钟进行调整,当未处于时间调整时,按下第一次为开关量的开启时间,按下第二次为开关量的关闭时间。3、k3为设定时间完成的退出键和进入开关量时间的设定键,但时间设置完成以后,按下k3键将进入正常的计时状态;当要进入定时任务时间设定时,按下此键将进入定时任务开始时间的设定,设定完成后退出进入正常计时,然后再按下此键进入定时任务关闭时间的设定。4、k4为定时任务是否开启的设定键,若led的黄灯是亮的说明任务是开启的,若没有亮则是关闭的。5、k5为定时任务运行的方式:周期与单次的切换,若绿灯亮则为周期,没亮则为单次。6、k6、k7、k8依次为年月日的设定键。3.2 主程序流程图开始定时器0初始化液晶显示器lcd1602初始化判断定时扫描键盘闹钟响开关量开/关 n y判断是否有键按下 y n 图3-1 主程序流程图4 仿真图5 设计体会及小结本设计在proteus仿真软件测试成功,但是,此电子钟有自身的先天缺陷。首先,由于采用单片机内部定时器产生时间信号,所以如果时钟意外掉电,则会丢失当前的时间和闹钟等数据,需要重新设定。由于本人能力和时间有限,只能暂时实现本既定方案。课设也大大锻炼了我们的自学能力。比如我们要用到的很多芯片,不可能样样都在课本上学习过的,学过的毕竟是少数,在以后的学习实践和工作中,要用的东西五花八门,怎么可能四年都学遍呢?而且像我们学的这门迅速发展中的学科,知识更新一日千里,要准备好学习一辈子的,在大学里课堂上所学的只是方法,至于其中的内容,还要靠自己去挖掘,所谓“师傅领进门,修行在个人”就是这个道理,这才是成年人的学习生活,因此,通过课设,我们掌握了一项很基本但对于我们来讲很重要且具有十分深刻意义的技能,就是学会自学,这是前所未有的。参考文献1余发山.单片机原理及应用技术.江苏:中国矿业大学出版社,2003.2王建校.51系列单片机及c51程序设计.北京:科学出版社,2002.3谭浩强.c程序设计.北京:清华大学出版社,2005.4何立民.单片机高级教程.北京:北京航空航天大学出版社,2001.5王福瑞.单片微机测控系统设计大全.北京:北京航空航天大学出版社,2003.6胡力刚,王养森,陈宁.单片机在液晶显示器系统中的应用.电子工程师,2005.附录1 硬件电路设计图附录2 主程序#include#define uint unsigned int #define uchar unsigned char uint miao,fen,fen1,shi,shi1,flag1,flag2,flag3,aa,k1num,k2num,k3num,k4num,n,i,dan1,k,fen2,shi2,a,m,month=1,year=2011,day=1,k6num,num,year1,year2,day1,day2,month1,month2;/k1num-k1按键被按下的标记变量,k2num-k2按键被按下的标记变量,k3num=0-k3按键被按下的标记变量sbit k1=p10;/四个按键sbit k2=p11;sbit k3=p12;sbit k4=p13;sbit k5=p14;sbit k6=p15;sbit k7=p16;sbit k8=p17;sbit dan=p26;sbit dan2=p27;sbit rs=p20;sbit lcden=p22;sbit led=p23;/发光二极管控制端sbit beep=p24; /蜂鸣器控制端sbit relay=p25;/继电器控制端void delay(uint z)/延时函数uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void write_com(uchar com)/液晶写命令函数rs=0;lcden=0;p0=com;delay(5);lcden=1;delay(5);lcden=0;void write_date(uchar date)/液晶写数据函数rs=1;lcden=0;p0=date;delay(5);lcden=1;delay(5);lcden=0;void write_sfm(uchar add,uchar date)/液晶写时分秒函数uchar shi,ge;shi=date%100/10;ge=date%10;write_com(0x80+0x40+add);write_date(0x30+shi);write_date(0x30+ge); void write_sfm1(uchar add,uchar date)/液晶写时分秒函数uchar shi,ge;shi=date%100/10;ge=date%10;write_com(0x80+add);write_date(0x30+shi);write_date(0x30+ge); void write_sfm2(uchar add,uchar date)/液晶写时分秒函数uchar qian,bai,ge,shi; 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 init()/初始化函数aa=0;/中断次数标志k1num=0;/k1按键被按下的标记变量k2num=0;/k2按键被按下的标记变量k3num=0;/k3按键被按下的标记变量k4num=0;flag1=1;/控制lcd屏刷新的变量flag2=1;/控制闹钟响闹和继电器开启关闭的标记flag3=1;/控制闹钟响起时,按下k4停止闹钟响闹的标记led=1; /发光二极管初始化relay=0;/继电器初始化n=100;/系统启动时,闹钟时间到发出的声音为连续三次发出“哗”的一声miao=0;/系统初始化时间fen=0;shi=0;fen1=1;/初始化闹钟的时间shi1=0;beep=0;/蜂鸣器初始化lcden=0;/液晶使能端初始化write_com(0x38);/1602液晶初始化,设置16*2显示。5*7点阵,8位数据接口write_com(0x0c);/设置开显示,不显示光标write_com(0x06);/写一个字符后地址指针自动加1write_com(0x01);/显示清0,数据指针清0write_com(0x80);/将数据指针定位到第一行,第一个字处/for(num=0;num12)month=0;/若满60后将清零write_sfm1(9,month);/每调节一次送液晶显示一下write_com(0x80+10);/显示位置重新回到调节处if(k8=0&k6num=1)/判k2按下,修改系统时间的分钟delay(5);if(k8=0)write_com(0x80+13);/光标定位到分钟位置k6num=1;while(!k8);day+; /则调整分加1if(day30)day=0;/若满60后将清零write_sfm1(12,day);/每调节一次送液晶显示一下write_com(0x80+13);/显示位置重新回到调节处if(k1num=1|k3num=2)/当设置时间或闹钟时,k3被按下设置完成。if(k3=0)/判断k3按下delay(5);if(k3=0)k1num=0;k3num=0;k6num=0;while(!k3);write_com(0x0c);/取消光标闪tr0=1;/启动定时器使时钟开始走flag1=1;/flag=1.则修改系统时间时液晶显示的系统时间值,flag=0,则为修改闹钟时间时,屏幕显示的是修改闹钟时间的值write_sfm(8,fen);/送去液晶显示分,时write_sfm(5,shi);if(k2=0&k1num=0&k3num=0&m=0)/k2被按下时显示定时时间delay(5);m+;if(k2=0&m=1)while(k2=0)write_sfm(8,fen1);/送去液晶显示定时的分,时write_sfm(5,shi1);while(!k2);write_sfm(8,fen);/k2松开显示当前时间write_sfm(5,shi); if(k2=0&k1num=0&k3num=0&m=1)/k2被按下时显示定时时间delay(5);m+;if(k2=0&m=2)while(k2=0)write_sfm(8,fen2);/送去液晶显示定时的分,时write_sfm(5,shi2); while(!k2);write_sfm(8,fen);/k2松开显示当前时间write_sfm(5,shi);m=0; if(k1=0&k3num=1)/修改小时,判断k1键按下,k3num=1,表示k3按键按下,则此时修改的是闹钟时间的小时delay(5);if(k1=0)write_com(0x80+0x40+6);/光标定位到小时位置k3num=2;while(!k1);shi1+; /则调整定时的时加1if(shi1=24)/若满24后将清零shi1=0;write_sfm(5,shi1);/每调节一次送液晶显示一下write_com(0x80+0x40+6);/显示位置重新回到调节处if(k2=0&k3num=2)/卸螷2按下,修改闹钟时间的分钟delay(5);if(k2=0)write_com(0x80+0x40+9);/光标定位到分钟位置k3num=3;while(!k2);fen1+; /则调整分加1if(fen1=60)/若满60后将清零fen1=0;write_sfm(8,fen1);/每调节一次送液晶显示一下write_com(0x80+0x40+9);/显示位置重新回到调节处if(k6=0&k3num=3)/修改小时,判断k1键按下,k3num=1,表示k3按键按下,则此时修改的是闹钟时间的小时delay(5);if(k6=0)write_com(0x80+7);/光标定位到小时位置k3num=4;while(!k6);year1+; /则调整定时的时加1if(year1=24)/若满24后将清零year1=0;write_sfm2(5,year1);/每调节一次送液晶显示一下write_com(0x80+7);/显示位置重新回到调节处if(k7=0&k3num=4)/卸螷2按下,修改闹钟时间的分钟delay(5);if(k7=0)write_com(0x80+10);/光标定位到分钟位置k3num=5;while(!k7);month1+; /则调整分加1if(month1=12)/若满60后将清零month1=0;write_sfm1(9,month1);/每调节一次送液晶显示一下write_com(0x80+9);/显示位置重新回到调节处 if(k8=0&k3num=5)/卸螷2按下,修改闹钟时间的分钟delay(5);if(k8=0)write_com(0x80+13);/光标定位到分钟位置k3num=6;while(!k8);day1+; /则调整分加1if(day130)/若满60后将清零day1=1;write_sfm1(12,day1);/每调节一次送液晶显示一下write_com(0x80+12);/显示位置重新回到调节处if(k1=0&k3num=6)/修改小时,判断k1键按下,k3num=1,表示k3按键按下,则此时修改的是闹钟时间的小时delay(5);if(k1=0)write_com(0x80+0x40+6);/光标定位到小时位置k3num=7;while(!k1);shi2+; /则调整定时的时加1if(shi2=24)/若满24后将清零shi2=0;write_sfm(5,shi2);/每调节一次送液晶显示一下write_com(0x80+0x40+6);/显示位置重新回到调节处if(k2=0&k3num=7)/卸螷2按下,修改闹钟时间的分钟delay(5);if(k2=0)write_com(0x80+0x40+9);/光标定位到分钟位置k3num=8;while(!k2);fen2+; /则调整分加1if(fen2=60)/若满60后将清零fen2=0;write_sfm(8,fen2);/每调节一次送液晶显示一下write_com(0x80+0x40+9);/显示位置重新回到调节处 if(k1=0&k3num=9)/修改小时,判断k1键按下,k3num=1,表示k3按键按下,则此时修改的是闹钟时间的小时delay(5);if(k6=0)write_com(0x80+7);/光标定位到小时位置k3num=10;while(!k6);year2+; /则调整定时的时加1if(year25000)/若满24后将清零shi2=0;write_sfm2(4,year2);/每调节一次送液晶显示一下write_com(0x80+4);/显示位置重新回到调节处if(k7=0&k3num=11)/卸螷2按下,修改闹钟时间的分钟delay(5);if(k7=0)write_com(0x80+10);/光标定位到分钟位置k3num=12;while(!k7);month2+; /则调整分加1if(month212)/若满60后将清零month2=1;write_sfm1(8,month2);/每调节一次送液晶显示一下write_com(0x80+10);/显示位置重新回到调节处 if(k8=0&k3num=12)/卸螷2按下,修改闹钟时间的分钟delay(5);if(k8=0)write_com(0x80+13);/光标定位到分钟位置k3num=8;while(!k8);day2+; /则调整分加1if(day230)/若满60后将清零day2=1;write_sfm1(12,day2);/每调节一次送液晶显示一下write_com(0x80+13);/显示位置重新回到调节处k3num=0;if(k4=0&flag3=1)/当闹钟响起时,按下k4停止响闹,当闹钟响起时候flag3置为1delay(5);if(k4=0)flag2=0;flag3=0;/此处需置flag3为1,否则闹钟没有响起的时候按下k4键,程序会执行此句if(k4=0&flag3)/k4按下设置闹钟的状态为on或off,flag3=1,表示闹钟此时没响起。k4num=0,表示此时为on状态。 delay(10);if(k4=0) k+;if(k=1) k4num=1;dan=1; delay(10);if(k=2) k4num=0;dan=0;k=0;if(k5=0)delay(10);if(k5=0) i+; delay(10);if(i=1) dan1=1;dan2=1;if(i=2) dan1=0;dan2=0;i=0;void clock()/闹钟函数 k4闹铃on/off的状态设置,设置为on时连续三次发出“哗”的一声,设置为off发出“哗”的一?if(fen=fen1)&(shi=shi1)&(flag2=1)&(k4num=1)&dan1=1&year1=year&month1=month&day1=day)/闹钟的响闹控制beep=1;/此时闹钟响起,连续三次发出哗的一声relay=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 浙江长征职业技术学院《事故调查处理与事故分析》2023-2024学年第二学期期末试卷
- 黄山职业技术学院《动画表演与运动规律》2023-2024学年第二学期期末试卷
- 阜阳幼儿师范高等专科学校《工程经济与可行性分析》2023-2024学年第二学期期末试卷
- 漳州科技职业学院《高级会计》2023-2024学年第二学期期末试卷
- XX横向课题研究与成果转化
- 新疆司法警官职业学院《智能时代下的创新创业实践》2023-2024学年第二学期期末试卷
- 邯郸应用技术职业学院《儿童文学选》2023-2024学年第二学期期末试卷
- 广东工商职业技术大学《地理学与生活》2023-2024学年第二学期期末试卷
- 自我介绍大班课件
- 西宁城市职业技术学院《中医经典金匮要略》2023-2024学年第二学期期末试卷
- SJG 39-2017 深圳市电动自行车充电库(棚)工程技术规程
- 中国糖尿病防治指南(2024版)解读
- 协力安全管理
- 《路基养护》课件
- 2025年上海二手房买卖合同参考范文(2篇)
- 食堂食材配送采购投标方案(技术标)
- 2025年全球及中国智能无人叉车行业头部企业市场占有率及排名调研报告
- 2025苏州中考数学二轮专题复习-圆的综合应用-专项训练【含答案】
- 月嫂合同中的保密协议
- 糖尿病足疼痛
- 《电力系统仿真概述》课件
评论
0/150
提交评论