电子时钟单片机【完整版】
- 格式:doc
- 大小:118.00 KB
- 文档页数:16
单片机在多功能数字电子钟中的应用已是非常普遍,人们对电子时钟的功能及工作顺序都已非常熟悉了,但是却很少知道它的内部结构以及工作原理。
由单片机作为电子时钟的核心控制器,可以通过它的时钟信号来实现计时功能,将时间数据由单片机输出,利用显示器将时间显示出来。
通过键盘可以进行时间的设定。
输出设备显示器可以用液晶显示技术或数码管来显示技术。
本系统利用单片机实现具有计时、校时等功能的数字电子时钟,是以单片机AT89C51 为核心元件同时采用LED数码管显示器动态显示“时”,“分” “秒”的现代计时装置。
与传统机械表相比,它具有走时精确,显示直观等特点。
另外具有校时功能,利用单片机实现的数字时钟具有编程灵活,便于功能的扩充等优点。
第一章概述1.1课题研究的目的和意义数字钟已成为人们日常生活中必不可少的必需品,广泛用于个人家庭以及办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。
由于电子集成电路技术的发展和采用了先进的石英技术,使电子钟具有走时准确、性能稳定、携带方便等优点,它还用于计时、自动报时及自动控制等各个领域,因此进行电子钟的设计是必要的。
尽管目前市场上已有现成的电子钟集成电路芯片出售,价格便宜、使用也方便,但鉴于单片机定时器的功能也可以完成电子钟电路的设计,因此进行电子钟的设计是可行的。
在这里我们将已学过的比较零散的数字电路和单片机的知识有机的、系统的联系、组织起来应用于实际,来培养我们的综合分析和设计电路,写程序,调试电路、程序的能力。
单片机具有体积小、功能强、可靠性高、价格低廉等一系列优点,不仅已成为工业测控领域普遍采用的智能化控制工具,而且已渗入到人们工作和和生活的各个角落,有力地推动了各行业的技术改造和产品的更新换代,应用前景广阔。
1.2国内外研究的现状及发展趋势从单片机电子时钟近年的发展趋势来看,正朝着多层次用户、多品种、多规格、高精度、小体积、低能耗等方面发展。
在这种趋势下,时钟的数字化,智能化已经成为现代时钟生产研究的主导设计方向。
电子时钟基于AT89c51单片机的设计电子时钟原理图开机显示仿真图: 当按下仿真键时电子时钟开机页面显示第一行显示JD12102Class--16,第二行显示动态TINE:12:00:04。
电子时钟调时间仿真图:当按下K1为1次时,光标直接跳到电子时钟的秒,可以按下K2进行调节。
当按下K1为2次时,光标直接跳到电子时钟的分,可以按下K2进行调节。
当按下K1为3次时,光标直接跳到电子时钟的时,可以按下K2进行调节。
当按下K1为4次时,光标直接跳完,电子时钟可以进行正常计时。
电子时钟闹钟调节仿真:当按下K3为1次时,直接跳到闹钟显示界面00:00:00,按下K2可以对闹钟的秒进行调节。
当按下K3为2次时,可以调到分,按下K2可以对闹钟的分进行调节。
当按下K3为3次时,可以调到时,按下K2可以对闹钟的时进行调节。
当按下K3为4次时,直接跳到计时界面,对闹钟进行到计时,时间到可以发出滴滴声。
#include<reg51.h>#define uchar unsigned char //预定义一下#define uint unsigned intuchar table[]="JD12102Class--21"; //显示内容sbit lcden=P3^4; //寄存器EN片选引脚sbit lcdrs=P3^5; //寄存器RS选择引脚sbit beep=P3^6; //接蜂鸣器extern void key1();extern void key2();extern void key3();uchar num,hour=12,minite,second,ahour,aminite,asecond,a,F_k1,F_k2,F_k3; //定义变量void delay(uint z) //延时{uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void write_com(uchar com){lcdrs=0;P0=com; //送出指令,写指令时序delay(5);lcden=1;delay(5);lcden=0;}void write_data(uchar date){lcdrs=1;P0=date; //送出数据,写指令程序delay(5);lcden=1;delay(5);lcden=0;}void write_add(uchar add,uchar date){uchar aa,bb;aa=date/10;bb=date%10;write_com(0x80+add);write_data(0x30+aa);write_data(0x30+bb);}void init() //初始化{lcden=0;write_com(0x38); //设置16*2显示,5*7点阵write_com(0x0c); //开显示,不显示光标write_com(0x06); //地址加1,写入数据是光标右移1位write_com(0x01); //清屏write_com(0x80); //起点为第一行第一个字符开始}void display(uchar h,uchar m,uchar s) //显示设计程序{{write_com(0x80+0x16);}{write_com(0xC0+0x00);write_data('T');write_data('I');write_data('M');write_data('E');write_data(':');write_data(0x30+(h/10));write_data(0x30+(h%10));write_data(':');write_data(0x30+(m/10));write_data(0x30+(m%10));write_data(':');write_data(0x30+(s/10));write_data(0x30+(s%10));write_data(' ');write_data(' ');write_data(' ');} }void main(){init();TMOD=0X01; //设置T0定时方式1 TH0=(65535-50000)/256; //设置初值TL0=(65535-50000)%256;EA=1; //开总中断TR0=1; //启动T0ET0=1;for(num=0;num<16;num++) //依次读出数据{write_data(table[num]);}while(1){key1();key2();key3();if(ahour==hour&&aminite==minite&&second<10) //时间到闹钟响{beep=~beep;}if(F_k1==0&F_k3==0) //K1和K3按下次数为零就直接显示时分秒display(hour,minite,second);}}void timer0() interrupt 1 //T0中断函数{TH0=(65535-50000)/256; //装载计数器初值TL0=(65535-50000)%256;a++;if(a==20){ //进位设置60秒进1分,60分进1时,24时进0时a=0;second++;if(second==60){second=0;minite++;if(minite==60){minite=0;hour++;if(hour==24){hour=0;}}}}}#include <reg51.h> //调时间程序#define uchar unsigned char#define uint unsigned intsbit k1=P1^0; //定义3个变量sbit k2=P1^1;sbit k3=P1^2;extern uchar F_k1,F_k3,second,minite,hour,ahour,aminite,asecond; //预定义变量extern void write_com(uchar com);extern void write_add(uchar add,uchar date);extern void display(uchar h,uchar m,uchar s);void delay_key(int i){while(i--);}void key1(){if(k1==0) //按下K1零次时,直接计时与开机显示{delay_key(100);if(k1==0){TR0=0;while(!k1);F_k1++;if(F_k1==4){F_k1=0;write_com(0x0c);TR0=1;}}}if(F_k1==1|F_k3==1){write_com(0xC0+0x0c);write_com(0x0f);}if(F_k1==2|F_k3==2)write_com(0xC0+0x09);if(F_k1==3|F_k3==3)write_com(0xC0+0x06);}void key2(){if(k2==0){delay_key(100);while(!k2);if(F_k1==1) //按下K1一次时设置闹钟的秒{second++;if(second==60)second=0;write_add(0x4b,second);}if(F_k1==2) //按下K3两次时设置闹钟的分{minite++;if(minite==60)minite=0;write_add(0x48,minite);}if(F_k1==3) // 按下K1三次时设置闹钟的时{hour++;if(hour==24)hour=0;write_add(0x45,hour);}if(F_k3==1) //按下K3一次时设置闹钟的秒{asecond++;if(asecond==60)asecond=0;write_add(0x4b,asecond);}if(F_k3==2) //按下K3两次时设置闹钟的分{aminite++;if(aminite==60)aminite=0;write_add(0x48,aminite);}if(F_k3==3) //按下K3三次时设置闹钟的时{ahour++;if(ahour==24)ahour=0;write_add(0x45,ahour);}}}void key3(){if(k3==0){delay_key(100);if(k3==0){while(!k3);F_k3++;if(F_k3==4) //K3等于四次时直接跳入闹钟显示{F_k3=0;write_com(0x0c);}if(F_k3==1)display(ahour,aminite,asecond);}}}。
中图分类号:基于单片机控制的电子时钟设计专业名称:应用电子技术学生姓名:王明宗导师姓名:王春霞职称:讲师焦作大学机电工程学院2012年 12 月中图分类号:密级:UDC:单位代码:基于单片机控制的电子时钟设计Based on single-chip microcomputer control the design of the electronic clock焦作大学机电工程学院摘要现代生活的人们越来越重视起了时间观念,可以说是时间和金钱划上了等号。
对于那些对时间把握非常严格和准确的人或事来说,时间的不准确会带来非常大的麻烦,所以以数码管为显示器的时钟比指针式的时钟表现出了很大的优势。
数码管显示的时间简单明了而且读数快、时间准确显示到秒。
所以数字电子钟的精度、稳定度远远超过老式机械钟。
而机械式的依赖于晶体震荡器,可能会导致误差。
在这次设计中,我们采用LED数码管显示时、分、秒,以24小时计时方式,根据数码管动态显示原理来进行显示,以AT89S51芯片为核心,辅以必要的电路,设计了一个简易的电子时钟,它由4.5V直流电源供电,通过数码管能够准确显示时间,调整时间,并在数码管上显示相应的时间。
关键词:单片机 AT89S51 电子时钟ABSTRACTModern life people pay more and more attention to up the concept of time, can say time and money off the equal sign. For those who grasp of time is very strict and accurate person or thing, it is not accurate time will bring very big trouble, so to digital tube for display clock than pointer clock showed a lot of advantages. Digital tube display time simple and fast reading, time accurate display to seconds. So the digital clock accuracy, stability is far more than the old mechanical clock. And mechanical dependent on the crystal oscillators, may lead to error. In this design, we adopt LED digital tube display, points, SEC to 24 hours time way, according to the principle of dynamic display of digital tube to show that AT89S51 chip as the core, with the necessary circuit, design a simple electronic clock, it consists of 4.5 V dc power supply, through the digital tube can accurately display the time, adjusting time, and in the digital tube display the corresponding time.Key word:SCM AT89S51 electronic clock目录第一章引言 (1)1.1数字电子钟的背景 (1)1.2数字电子钟的意义 (1)1.3数字电子钟的应用 (1)第二章设计方案 (3)2.1数字时钟方案 (3)2.2数码管显示方案 (3)第三章系统设计 (4)3.1总体设计 (4)3.2单片机外围控制电路 (4)3.2.1单片机的选择 (4)3.2.2控制电路 (6)3.2.3电源部分 (7)3.2.4复位电路 (8)3.2.5程序下载接口 (8)3.2.6位选部分 (9)3.2.7数码管的连接电路 (9)第四章软件设计 (11)4.1程序流程图 (11)4.2源程序 (13)第五章使用调试 (20)第六章设计总结 (21)参考文献 (22)附录 (23)致谢 (24)第一章引言1.1数字电子钟的背景20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。
(完整)基于51单片机电子时钟设计编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望((完整)基于51单片机电子时钟设计)的内容能够给您的工作和学习带来便利。
同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。
本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为(完整)基于51单片机电子时钟设计的全部内容。
基于51单片机的电子时钟设计摘要本电子时钟以STC89C52单片机作为主控芯片,采用DS12C887时钟芯片,使用1602液晶作为显示输出.该时钟走时精确,具有闹钟设置,以及可同时显示时间、日期等多种功能。
本文将详细介绍该电子时钟涉及到的一些基本原理,从硬件和软件两方面进行分析.【关键词】STC89C52单片机 DS12C887时钟芯片 1602液晶蜂鸣器目录一、绪论 (4)1.1 电子时钟功能 (4)1.2设计方案 (4)二、硬件设计 (4)2。
151单片机部分设计 (4)2.2 USB供电电路设计 (5)2.3 串行通信电路设计 (6)2.4 DS12C887时钟芯片电路的设计 (6)2。
5 1602LCD液晶屏显示电路设计 (7)2。
6蜂鸣器电路设计 (8)2。
7按键调整电路设计 (8)三、软件设计 (9)3.1系统程序流程图设计 (9)3。
2程序设计 (11)四、心得体会 (22)参考文献 (23)一、绪论1。
1电子时钟功能(1)在1602液晶上显示年、月、日、星期、时、分、秒,并且按秒实时更新显示。
(2)具有闹铃设定即到时报警功能,报警响起时按任意键可取消报警。
(3)能够使用实验板上的按键随时调节各个参数,四个有效键分别为功能选择键、数值增大键、数值减小键和闹钟查看键。
(4)每次有键按下时,蜂鸣器都以短“滴”声报警.(5)利用DS12C887自身掉电可继续走时的特性,该时钟可实现断电时间不停、再次上电时时间仍准确显示在液晶上的功能。
摘要单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。
单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。
由于具有上述优点,在我国,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面,而51单片机是各单片机中最为典型和最有代表性的一种。
这次毕业设计通过对它的学习、应用,以AT89S51芯片为核心,辅以必要的电路,设计了一个简易的电子时钟,它由4.5V直流电源供电,通过数码管能够准确显示时间,调整时间,从而到达学习、设计、开发软、硬件的能力。
电子时钟是采用数字电路实现对“时”、“分”、“秒”数字显示的计时装置。
电子时钟的精度、稳定度远远超过老式机械钟。
在这次设计中,我们采用LED数码管显示时、分、秒,以24小时计时方式,根据数码管动态显示原理来进行显示,用12MHz 的晶振产生振荡脉冲,定时器计数。
在此次设计中,电路具有显示时间的其本功能,还可以实现对时间的调整。
电子时钟是其小巧,价格低廉,走时精度高,使用方便,功能多,便于集成化而受广大消费的喜爱,因此得到了广泛的使用。
关键词:单片机;AT89S51ABSTRACTSince the 1970 s chip since the advent, with its high cost performance and attention by people and attention, it is widely used and fast development. SCM small volume, light weight, strong anti-jamming capability, environmental demand is not high, low cost, high reliability, flexibility is good, development more easy. Because of the above features, in our country, the microcontroller is widely used in industrial automation control, automatic detection, intelligent instrument and apparatus, household appliances, power electronics, mechanical and electrical equipment, and other aspects, and 51 SCM is the most typical chip and most representative one. The graduation design through to its study, application to AT89S51 chips as the core, with the necessary circuit, design of a simple electronic clock, it by 4.5 V dc power supply, through the electronic tube can show time, adjust the time, thus to learning, the design, the development of software and hardware in the ability.Electronic Clock is a electronic circuit implementation of the "when", "sub", "seconds" The figures show the timing device. Electronic clock precision, stability, far more than the old mechanical clock. In this design, we use LED electronic display hours, minutes, seconds, to 24-hour time mode, according to electronic control theory to dynamic display to display, use the 12MHz crystal oscillation pulse, the timer count. In this design, the circuit has a display time of the this function, you can also realize the time adjustment. Electronic clock is its compact, low cost, travel time and high precision, easy to use, features and more, easy integration and loved by the general consumer, so widely used.Key words:Single-chip microcomputer ; AT89S51独创声明本人郑重声明:所呈交的毕业设计(论文),是本人在指导老师的指导下,独立进行研究工作所取得的成果,成果不存在知识产权争议。
单片机电子时钟设计程序(一)引言概述:电子时钟是一种广泛应用于家庭、办公室和公共场所的设备。
它在我们日常生活中起到了举足轻重的作用。
本文将介绍如何设计一个基于单片机的电子时钟程序,该程序能够准确地显示时间,并具备一些常用功能。
正文:1. 时钟芯片选择- 研究市场上常用的时钟芯片类型,如RTC芯片、单片机内部时钟等。
- 根据需求选择适合的时钟芯片,考虑其精度、功耗和价格等因素。
- 确定所选时钟芯片与单片机的连接方式和通信协议。
2. 硬件电路设计- 根据所选的时钟芯片类型和要求,设计电路连接图。
- 包括时钟芯片与单片机的连接,蜂鸣器和LED数码管等外部器件的接口设计。
- 确保电路可靠性和稳定性,避免干扰和电源问题。
3. 软件程序编写- 熟悉所选单片机的编程语言和开发环境。
- 设计时钟的显示逻辑,包括时、分、秒的显示方式和刷新频率。
- 实现时间的自动更新功能,通过与时钟芯片的通信获取准确的时间信息。
- 添加常用功能,如闹钟设置、定时器等,并编写相应的逻辑控制代码。
4. 调试与测试- 焊接和连接电路,并将单片机程序烧录进芯片。
- 进行硬件和软件的联合调试,确保电子时钟的功能正常。
- 测试不同情况下的准确性和稳定性,如供电中断、温度变化等。
5. 优化与改进- 对电子时钟的外观和显示效果进行优化,增加界面美感。
- 优化编程代码,提高时钟的运行效率和响应速度。
- 改进硬件电路,减少功耗和杜绝干扰,提高系统稳定性。
总结:通过本文提供的指导,我们可以设计一个功能齐全、准确可靠的单片机电子时钟程序。
从选择时钟芯片到硬件电路设计,再到软件程序编写和调试与测试,每个步骤都需要认真思考和细致操作。
通过不断优化与改进,我们可以提高电子时钟的性能和用户体验,为人们提供更好的时间显示和功能体验。
简易电子时钟设计单片机
设计一个简易的电子时钟可以使用单片机实现。
以下是一个基本的设计方案,包括硬件和软件部分的实现。
硬件部分:
1.单片机选择:可以选择8051系列的单片机,如AT89C51或
AT89S52等。
2.时钟源:使用晶体振荡器作为时钟源,通常选择11.0592MHz。
3.显示器:选择合适的数码管或液晶显示器,用于显示时间。
4.键盘:选择合适的按钮或矩阵键盘,用于设置时间和功能选择。
5.蜂鸣器:可以选择一个蜂鸣器用于报时功能。
6.电源:选择适当的电源模块,例如稳压电源模块或直流电源。
软件部分:
1.初始化:设置片内RAM、定时器、IO端口等。
2.时间设置:通过按键输入设置时钟的小时和分钟,可以使用中断的方式进行按键扫描。
3.时间更新:使用定时器中断来更新时钟的显示,在中断处理程序中实现时间累加,包括秒数、分钟数和小时数。
4.时间显示:将时间显示在数码管或液晶显示器上,可以使用数码管驱动芯片或液晶显示驱动程序进行显示。
5.报时功能:当时钟显示到设置的时间时,触发蜂鸣器进行报时。
6.闹钟功能:设置一个闹钟时间,到达闹钟时间时触发蜂鸣器报警。
7.周期功能:设置一个周期,例如每天、每周等,当时钟显示到周期
时间时触发蜂鸣器报时或报警。
8.温度显示:如果有温度传感器,可以通过温度传感器测量室内温度,并在显示器上显示当前温度。
总结:
这只是一个基本的设计方案,你可以根据实际需求进行改进和扩展。
通过合适的单片机、显示器、键盘和蜂鸣器的选择,以及基于中断的软件
编程,你可以实现一个简易的电子时钟。
《单片机技术》课程设计说明书数字电子钟系、部:电气与信息工程学院学生姓名:指导教师:职称专业:班级:完成时间:2013-06-07摘要电子钟在生活中应用非常广泛,而一种简单方便的数字电子钟则更能受到人们的欢迎。
所以设计一个简易数字电子钟很有必要。
本电子钟采用ATMEL公司的AT89S52单片机为核心,使用12MHz 晶振与单片机AT89S52 相连接,通过软件编程的方法实现以24小时为一个周期,同时8位7段LED数码管(两个四位一体数码管)显示小时、分钟和秒的要求,并在计时过程中具有定时功能,当时间到达提前定好的时间进行蜂鸣报时。
该电子钟设有四个按键KEY1、KEY2、KEY3、KEY4和KEU5键,进行相应的操作就可实现校时、定时、复位功能。
具有时间显示、整点报时、校正等功能。
走时准确、显示直观、运行稳定等优点。
具有极高的推广应用价值。
关键词电子钟;AT89S52;硬件设计;软件设计ABSTRACTClock is widely used in life, and a simple digital clock is more welcomed by people. So to design a simple digital electronic clock is necessary.The system use a single chip AT89S52 of ATMEL’s as its core to control The crystal oscillator clock,using of E-12MHZ is connected with the microcontroller AT89S52, through the software programming method to achieve a 24-hour cycle, and eight 7-segment LED digital tube (two four in one digital tube) displays hours, minutes and seconds requirements, and in the time course of a timing function, when the time arrived ahead of scheduled time to buzz a good timekeeping. The clock has four buttons KEY1, KEY2, KEY3,KEY4 and KEY5 key, and make the appropriate action can be achieved when the school, timing, reset. With a time display, alarm clock settings, timer function, corrective action. Accurate travel time, display and intuitive, precision, stability, and so on. With a high application value.Key words Electronic clock;;AT89S52;Hardware Design;Software Design目录1设计课题任务、功能要求说明及方案介绍 (1)1.1设计课题任务 (1)1.2功能要求说明 (1)1.3设计总体方案介绍及原理说明 (1)2设计课题硬件系统的设计 (2)2.1设计课题硬件系统各模块功能简要介绍 (2)2.2设计课题电路原理图、PCB图、元器件布局图 (2)2.3设计课题元器件清单 (5)3设计课题软件系统的设计 (6)3.1设计课题使用单片机资源的情况 (6)3.2设计课题软件系统各模块功能简要介绍 (6)3.3设计课题软件系统程序流程框图 (6)3.4设计课题软件系统程序清单 (10)4设计结论、仿真结果、误差分析、教学建议 (21)4.1设计课题的设计结论及使用说明 (21)4.2设计课题的仿真结果 (21)4.3设计课题的误差分析 (22)4.4设计体会 (22)4.5教学建议 (22)结束语 (23)参考文献 (24)致谢 (25)附录 (26)1 设计课题任务、功能要求说明及方案介绍1.1 设计课题任务设计一个具有特定功能的电子钟。
2#include<reg52.h>//包含52单片机头文件#define uchar unsigned char#define uint unsigned int#include"24c02.h"sbit dula=P2^6; //定义锁存器锁存端sbit wela=P2^7;sbit rs=P3^5; //定义1602液晶RS端sbit lcden=P3^4;//定义1602液晶LCDEN端sbit s1=P3^0; //定义按键--功能键sbit s2=P3^1; //定义按键--增加键sbit s3=P3^2; //定义按键--减小键sbit rd=P3^7;sbit beep=P2^3; //定义蜂鸣器端uchar count,s1num;char miao,shi,fen;uchar code table[]=" 2008-9-30 MON";//定义初始上电时液晶默认显示状态void delay(uint z) //延时函数{uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void di()//蜂鸣器发声函数{beep=0;delay(100);beep=1;}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/10;//分解一个2位数的十位和个位ge=date%10;write_com(0x80+0x40+add);//设置显示位置write_date(0x30+shi);//送去液晶显示十位write_date(0x30+ge); //送去液晶显示个位}void init()//初始化函数{uchar num;rd=0; //软件将矩阵按键第4列一端置低用以分解出独立按键dula=0;//关闭两锁存器锁存端,防止操作液晶时数码管会出乱码wela=0;lcden=0;fen=0; //初始化种变量值miao=0;shi=0;count=0;s1num=0;init_24c02();write_com(0x38);//初始化1602液晶write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);//设置显示初始坐标for(num=0;num<15;num++)//显示年月日星期{write_date(table[num]);delay(5);}write_com(0x80+0x40+6);//写出时间显示部分的两个冒号write_date(':');delay(5);write_com(0x80+0x40+9);write_date(':');delay(5);miao=read_add(1);//首次上电从AT24C02中读取出存储的数据fen=read_add(2);shi=read_add(3);write_sfm(10,miao);//分别送去液晶显示write_sfm(7,fen);write_sfm(4,shi);TMOD=0x01;//设置定时器0工作模式1TH0=(65536-50000)/256;//定时器装初值TL0=(65536-50000)%256;EA=1; //开总中断ET0=1; //开定时器0中断TR0=1; //启动定时器0}void keyscan()//按键扫描函数{if(s1==0){delay(5);if(s1==0)//确认功能键被按下{ s1num++;//功能键按下次数记录while(!s1);//释放确认di();//每当有按键释放蜂鸣器发出滴声if(s1num==1)//第一次被按下时{TR0=0; //关闭定时器write_com(0x80+0x40+10);//光标定位到秒位置write_com(0x0f); //光标开始闪烁}if(s1num==2)//第二次按下光标闪烁定位到分钟位置{write_com(0x80+0x40+7);}if(s1num==3)//第三次按下光标闪烁定位到小时位置{write_com(0x80+0x40+4);}if(s1num==4)//第四次按下{s1num=0;//记录按键数清零write_com(0x0c);//取消光标闪烁TR0=1; //启动定时器使时钟开始走}}}if(s1num!=0)//只有功能键被按下后,增加和减小键才有效{if(s2==0){delay(5);if(s2==0)//增加键确认被按下{while(!s2);//按键释放di();//每当有按键释放蜂鸣器发出滴声if(s1num==1)//若功能键第一次按下{miao++; //则调整秒加1if(miao==60)//若满60后将清零miao=0;write_sfm(10,miao);//每调节一次送液晶显示一下write_com(0x80+0x40+10);//显示位置重新回到调节处write_add(1,miao); //数据改变立即存入24C02}if(s1num==2)//若功能键第二次按下{fen++;//则调整分钟加1if(fen==60)//若满60后将清零fen=0;write_sfm(7,fen);//每调节一次送液晶显示一下write_com(0x80+0x40+7);//显示位置重新回到调节处write_add(2,fen);//数据改变立即存入24C02}if(s1num==3)//若功能键第三次按下{shi++;//则调整小时加1if(shi==24)//若满24后将清零shi=0;write_sfm(4,shi);;//每调节一次送液晶显示一下write_com(0x80+0x40+4);//显示位置重新回到调节处write_add(3,shi);//数据改变立即存入24C02}}}if(s3==0){delay(5);if(s3==0)//确认减小键被按下{while(!s3);//按键释放di();//每当有按键释放蜂鸣器发出滴声if(s1num==1)//若功能键第一次按下{miao--;//则调整秒减1if(miao==-1)//若减到负数则将其重新设置为59miao=59;write_sfm(10,miao);//每调节一次送液晶显示一下write_com(0x80+0x40+10);//显示位置重新回到调节处write_add(1,miao);//数据改变立即存入24C02}if(s1num==2)//若功能键第二次按下{fen--;//则调整分钟减1if(fen==-1)//若减到负数则将其重新设置为59fen=59;write_sfm(7,fen);//每调节一次送液晶显示一下write_com(0x80+0x40+7);//显示位置重新回到调节处write_add(2,fen);//数据改变立即存入24C02}if(s1num==3)//若功能键第二次按下{shi--;//则调整小时减1if(shi==-1)//若减到负数则将其重新设置为23shi=23;write_sfm(4,shi);//每调节一次送液晶显示一下write_com(0x80+0x40+4);//显示位置重新回到调节处write_add(3,shi);//数据改变立即存入24C02}}}}}void main()//主函数{init();//首先初始化各数据while(1)//进入主程序大循环{keyscan();//不停的检测按键是否被按下}}void timer0() interrupt 1//定时器0中断服务程序{TH0=(65536-50000)/256;//再次装定时器初值TL0=(65536-50000)%256;count++; //中断次数累加if(count==20) //20次50毫秒为1秒{count=0;miao++;if(miao==60)//秒加到60则进位分钟{miao=0;//同时秒数清零fen++;if(fen==60)//分钟加到60则进位小时{fen=0;//同时分钟数清零shi++;if(shi==24)//小时加到24则小时清零{shi=0;}write_sfm(4,shi);//小时若变化则重新写入write_add(3,shi);//数据改变立即存入24C02 }write_sfm(7,fen);//分钟若变化则重新写入write_add(2,fen);//数据改变立即存入24C02 }write_sfm(10,miao);//秒若变化则重新写入write_add(1,miao);//数据改变立即存入24C02 }}。
单片机电子时钟设计程序(二)引言:单片机电子时钟是一个广泛应用于日常生活中的设备,它能够准确地显示时间,并具备一些额外的功能,如闹钟设置、温度显示等。
本文将介绍电子时钟设计程序的相关内容。
正文:一、硬件设计1.选择适合的单片机型号2.选择合适的电路元件,如水晶振荡器、LCD屏幕、按键等3.设计电源模块,保证电子时钟正常工作4.连接电路元件,绘制电路图并进行电路布局5.进行电路的调试和测试,确保硬件设计无误二、时钟电路设计1.根据单片机的时钟源选择,配置相关寄存器设置2.编程设置时钟校准参数3.编写时钟模块的初始化函数4.编写时钟运行函数,实现时间的计算和显示5.编写时钟校准函数,用于手动或自动校准时间误差三、闹钟功能设计1.设计闹钟数据结构,包括时间、重复设置等2.编写闹钟设置函数,用于设置闹钟参数3.编写闹钟检测函数,用于判断当前时间是否与闹钟时间匹配4.编写闹钟响铃函数,控制蜂鸣器或其他报警设备的工作5.编写闹钟关闭函数,用于关闭闹钟响铃四、温度显示设计1.选择合适的温度传感器,如DS18B202.配置温度传感器的引脚和参数3.编写读取温度函数,获取当前环境温度4.编写温度显示函数,将温度数值显示在LCD屏幕上5.优化温度显示,增加单位符号和小数点位数五、其他功能设计1.设计设置界面,包括时间设置、闹钟设置等2.编写按键扫描函数,用于响应用户操作3.实现时间的自动校准功能,通过接收无线信号同步时间4.设计电源管理模块,包括省电模式等功能5.进行整体测试和调试,确保各个功能正常运行总结:通过本文的介绍,我们了解了单片机电子时钟设计程序的相关内容。
从硬件设计、时钟电路设计、闹钟功能设计、温度显示设计,以及其他功能设计等方面详细讲解了每个部分的关键要点。
通过合理的设计和编程,我们可以成功实现一个功能齐全、稳定可靠的电子时钟程序。
#include <reg51.h>#include <intrins.h>#define uchar unsigned char //宏定义#define uint unsigned intuchar sec,min,hour,sec50,jishu,dtp2; //sec、min、hour、为显示单元,sec50为60秒计数单元,jishu为扫描数码管计数单元uchar sec1,min1,hour1; //时间中介单元uchar nzmin,nzhour,nzjishu=0,dispjishu=0; //闹钟分、时定义uchar data nzbit=0; //闹钟标志位,闹钟默认为开启uchar data dispbit=0; //显示标志位,默认显示当前时间uchar data disp[8]; //秒、分、时个位与十位存放数组及‘—’uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //数字0-9sbit KEYmin=P3^2; //分加1按钮sbit KEYhour=P3^3; //时加1按钮sbit LABA=P1^0; //闹钟输出I/O口sbit NZdisplay=P3^4; //闹钟显示按钮,按住不放显示闹钟时间,放开则显示当前时间sbit KEYnzmin=P3^5; //闹钟分加1按钮sbit KEYnzhour=P3^6; //闹钟时加1按钮sbit KEYoff=P3^7; //关闭闹钟按钮,按第一次为关闭,第二次为开启void display(); //显示函数声明void keyscan(); //按键扫描函数声明void naozhong(); //闹钟判别函数声明void keynz(); //闹钟按键函数声明void main(){sec=0; //时间初始化为00—00—00min=0;hour=0;sec1=0; //显示单元初始化为00—00—00min1=0;hour1=0;nzmin=01; //闹钟初始时间为01:01nzhour=01;jishu=0;dtp2=0xfe;P0=0xff;TMOD=0x11; //设T0、T1为模式1IE=0x8a;TH0=0xb8; //T0定时20msTL0=0x0;TH1=0xfc; //T1定时1msTL1=0x66;TR0=1;TR1=1;while(1){display(); //调用显示子程序keyscan(); //调用按键子程序keynz(); //调用闹钟按键子程序}}void t0int() interrupt 1 //T0定时中断程序{TH0=0xb8;TL0=0x0;sec50++;if(sec50==50) //对20ms计数50次即1s{sec50=0; //清秒计数器,为下次做准备naozhong(); //调用闹钟判别子程序sec1++; //秒加1}if(sec1==60) //对秒计数60次即1min{sec1=0;min1++; //分加1}if(min1==60) //对分计数60次即1hour{min1=0;hour1++; //时加1}if(hour1==24){hour1=0;}if(dispbit==0) //判断显示标志位是否为0,为0显示当前时间{sec=sec1;min=min1;hour=hour1;}else //显示标志位为1,显示闹钟时间{min=nzmin; //将闹钟时间给显示单元hour=nzhour;}}void t1int() interrupt 3 //T1中断程序{TH1=0xfc;TL1=0x66;P2=0xff; //关闭所有数码管P2=dtp2;dtp2=_crol_(dtp2,1);P0=disp[jishu];jishu++;if(jishu==8) //扫描完8位数码管清0,重新从第一位开始扫描{jishu=0;}}void delay(uint x) //延时函数uchar i;while(x--){for(i=0;i<120;i++);}}void display() //显示子程序{disp[7]=table[sec%10]; //秒个位显示disp[6]=table[sec/10]; //秒十位显示disp[4]=table[min%10]; //分个位显示disp[3]=table[min/10]; //分十位显示disp[1]=table[hour%10]; //时个位显示disp[0]=table[hour/10]; //时十位显示disp[2]=0xbf; //显示‘_’disp[5]=0xbf;}void keyscan() //按键子程序{delay(20); //延时消抖if(KEYmin==0)//时间分加1按钮{min1++; //时间分加1if(min1==60){min1=0;hour1++; //分加到60对时加1}if(hour1==24){hour1=0;}while(!KEYmin); //等待按键放开}delay(20); //延时消抖if(KEYhour==0) //时间时加1按钮{hour1++; //时间时加1if(hour1==24){hour1=0;}while(!KEYhour); //等待按键放开}void naozhong() //闹钟判断{if(nzbit==0) //判断闹钟标志位,0为开启闹钟判断,1为关闭闹钟{if(min1==nzmin) //闹钟与时间分的判别if(hour1==nzhour) //闹钟与时间时的判别LABA=0; //时间分、时与闹钟分、时相等就打开蜂鸣器}elseLABA=1;}void keynz() //闹钟加、减及闹钟关闭、开启按键处理子程序{delay(20); //延时消抖if(KEYnzmin==0) //判别闹钟分加1按键{nzmin++; //闹钟分加1if(nzmin==60){nzmin=0;nzhour++; //闹钟分加到60对闹钟时加1if(nzhour==24)nzhour=0;}while(!KEYnzmin); //等待按键放开}delay(20); //延时消抖if(KEYnzhour==0) //判别闹钟时加1按键{nzhour++; //闹钟时加1if(nzhour==24)nzhour=0;while(!KEYnzhour); //等待按键放开}if(KEYoff==0)//判断关闭闹钟按键是否按下{delay(20); // 延时消抖nzjishu++;if(nzjishu==1) //判断是否为第一次按下{nzbit=1; //第一次按下关闭闹钟if(nzjishu==2) //判断是否为第二次按下{nzjishu=0; //第二次按下清计数单元nzbit=0; // 第二次按下开启闹钟判别}while(!KEYoff); //等待按键放开}if(NZdisplay==0) //判别显示切换闹钟按键是否按下{dispjishu++;if(dispjishu==1) //第一次按下显示闹钟时间{dispbit=1; //第一次按下,把标志位置1,显示切换为闹钟时间}if(dispjishu==2) //第二次按下显示为当前时间{dispjishu=0; //清零,重新计数dispbit=0; //第二次按下清零显示标志位,显示切换为当前时间}while(!NZdisplay); //等待按键放开}}。
AT89C51单片机电子时钟设计目录1 电子时钟 (4)1.1 电子时钟简介 (4)1.2 电子时钟的基本特点 (4)1.3 电子时钟的原理 (4)2 单片机识的相关知识 (4)2.1单片机简介 (4)2.2 单片机的特点 (5)2.3 AT89C51单片机介绍 (5)3 设计方案的选择 (7)3.1计时方案 (7)3.2 显示方案 (7)3.3 数码管显示工作原理 (8)3.4 键盘电路设计 (9)3.5 主控模块AT89C51 (9)4 系统软件设计 (9)附录 (12)摘要:单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注。
单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。
由于具有上述优点,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面,而51单片机是各单片机中最为典型和最有代表性的一种。
这次设计通过对它的学习、应用,以AT89C51芯片为核心,辅以必要的电路,设计了一个简易的电子时钟,它由4.5V直流电源供电,通过数码管能够准确显示时间,调整时间,从而到达学习、设计、开发软、硬件的能力。
关键词:单片机;电子时钟;AT89C511 电子时钟1.1 电子时钟简介本设计采用AT89C51单片机,以汇编语言为程序设计的基础,设计一个用六位数码管显示时、分、秒的时钟。
现代的电子时钟是基于单片机的一种计时工具,采用延时程序产生一定的时间中断,用于一秒的定义,通过计数方式进行满六十秒分钟进一,满六十分小时进一,满二十四小时小时清零,从而达到计时的功能,是人民日常生活不可缺少的工具。
1.2 电子时钟的基本特点现在高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟、石英钟、石英表都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调试,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时、分、秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。
单片机原理及应用——电子时钟电子时钟是一种利用单片机技术实现的数字时钟,具备精确计时功能,并能显示当前时间的设备。
本文将详细介绍单片机原理及其在电子时钟中的应用。
一、单片机原理单片机(Microcontroller Unit,简称MCU)是一种集成了处理器核心、存储器、输入输出设备和定时器等功能的微型计算机系统。
它具备高度集成度、低功耗、体积小等特点,广泛应用于各种电子设备中。
单片机由中央处理器(CPU)、存储器、输入输出接口和定时器组成。
中央处理器是单片机的核心部件,负责执行各种指令和控制任务。
存储器用于存储程序和数据,包括ROM(只读存储器)和RAM(随机存储器)。
输入输出接口用于与外部设备进行数据交互,如键盘、显示器等。
定时器用于实现精确的时间控制和计时功能。
二、电子时钟的实现电子时钟利用单片机的计时功能和显示功能,实现了时间的精确计算和显示。
下面是一个简单的电子时钟实现的流程:1. 初始化:单片机启动后,需要进行一系列的初始化操作,包括设置计时器的计时方式、设置显示器的显示方式等。
2. 时间计算:通过单片机的定时器,可以实现对时间的精确计算。
定时器可以设定一个计时周期,每个周期结束后,单片机会触发一个中断,通过中断服务程序可以更新时间。
3. 时间显示:通过数码管等显示设备,将计算得到的时间显示出来。
单片机通过控制显示设备的亮灭来显示不同的数字。
4. 按键设置:电子时钟通常具备按键设置功能,可以通过按键来设置时间、闹钟等参数。
单片机通过读取按键状态,实现对时间的设置和调整。
5. 闹钟功能:电子时钟通常还具备闹钟功能,可以在设定的时间点触发蜂鸣器等报警设备。
单片机通过比较当前时间和设定的闹钟时间,实现闹钟功能。
6. 电源管理:为了确保电子时钟的正常运行,单片机需要对电源进行管理,包括低电压检测、电池切换等功能。
三、电子时钟的应用电子时钟广泛应用于各种场景,如家庭、办公室、学校等。
以下是几个常见的应用场景:1. 家庭用电子时钟:家庭用电子时钟通常具备显示时间、日期、温度等功能,可以放置在客厅、卧室等地方,方便人们随时了解时间。
数字时钟的设计与分析姓名:班级:学号:基本要求:1.时间以24小时为一个周期;2.显示时、分;电子时钟的格式为:XX.XX,由左向右分别为:时,分。
完成显示从1一直加至59,再从为1.00至23.59,在恢复为1;3.有校时功能,可以分别对时及分进行单独校时,使其校正到标准时间。
扩展功能:丰富其功能(闹钟功能)模块:1.校时电路:设P3.3-P3.42.功能按键:设P3.5-P3.73.显示电路:采用动态显示;P3口作为数码管数据(段选);P2口作为数码管控制(位选);实验室的硬件是共阳极的数码管;数码表采用:{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, 0x00};4.晶振电路5.复位电路所需硬件:AT89C51,电容3个,电阻9个,晶振1个,开关5个,共阳数码管4个,蜂鸣器1个总原理图校时模块和功能模块显示模块晶振模块复位模块蜂鸣模块源程序24小时可调时程序#include<reg51.h>unsigned char seg[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};unsigned char con[6]={0x1,0x2,0x4,0x8,0x10,0x20};unsigned char mm=0;unsigned char ss=0;unsigned char hh=0;unsigned char count=100;sbit S1=P3^3;sbit S2=P3^4;sbit S3=P3^5;sbit S4=P3^6;main(){TMOD=1;TH0=-10000>>8;TL0=-10000;EA=1;ET0=1;TR0=1;while(1);}void isr_time0() interrupt 1{unsigned int i=0,j;unsigned char time[6];TH0=-10000>>8;TL0=-10000;count--;if(count==0){count=100;ss++;if(ss==60){ss=0;mm++;if(mm==60){mm=0;hh++;if(hh==24)hh=0;}}if(S1==0){hh++;if(hh==24){hh=0;}time[3]=hh/10;time[2]=hh%10; }if(S2==0){mm++;if(mm==60){ mm=0;}time[1]=mm/10;time[0]=mm%10; }}time[3]=hh/10;time[2]=hh%10;time[1]=mm/10;time[0]=mm%10;time[4]=ss/10;time[5]=ss%10;for(i=0;i<6;i++){P2=con[i];if(i==1||i==3)P1=seg[time[i]]&0x7f;else P1=seg[time[i]];for(j=100;j>0;j--);}}。
毕业设计说明书题目数字式电子钟计时系统班级姓名指导教师时间目录引言 (3)第一章绪论 (4)§1.1集成电路 (4)§1.2主要技术的背景 (4)§1.2.1 发展历史 (4)§1.2.2 现状 (5)§1.2.3 发展趋势 (6)第二章系统总体设计方案 (7)§2.1系统功能实现总体设计思路 (7)§2.1.1 方案论证 (8)§2.2LED显示器 (9)§2.2.1 LED显示器的结构 (10)§2.2.2 LED的接线形式 (10)§2.3AT89C51简介 (11)§2.3.1 AT89C51主要性能参数 (12)§2.3.2 AT89C51单片机的功能特性概述 (12)§2.4各部分功能实现 (16)§2.5系统工作原理 (16)§2.6时钟各功能分析及图解 (18)§2.6.1电路各功能图解分析 (18)§2.6.2电路功能使用说明 (20)第三章软件总体设计方案 (21)§3.1主程序流程图 (21)§3.2总中断程序流程 (22)§3.3控制电路的C语言源程序 (26)第四章毕业设计结果分析 (32)第五章总结 (32)致谢 (34)参考文献 (34)[摘要]:多功能数字钟的应用非常普遍,由单片机作为数字钟的核心控制器,通过它的时钟信号进行实现计时功能,将其时间数据经单片机输出,利用显示器显示出来。
通过键盘可以进行校时、定时等功能。
输出设备显示器可以用液晶显示技术和数码管来显示技术。
本系统利用单片机实现具有计时、校时等功能的数字时钟,是以单片机AT89C51为核心元件同时采用LED数码管显示器动态显示“时”,“分”,“秒”的现代计时装臵。
另外具有校时功能,秒表功能,和定时器功能,利用单片机实现的数字时钟具有编程灵活,便于功能的扩充等优点。
1)主程序主程序功能主要是初始化、正常显示时间和判断功能转换键。
显示时间调用显示子程序。
当P2.7端口按键按下时,转入调时功能程序。
主程序流程图如下所示。
主程序流程图2)显示子程序数码显示的数据存放在50H~55H内存单元中,其中50H﹑51H单元存放秒数据,52H﹑53H单元存放分数据,54H﹑55H单元存放时数据。
时间数据采用BCD 码表示,对应的显示用数码表存放在ROM中。
显示时,先取出50H~55H某一地址中的数据,然后从段码表中查出对应的显示用段码并从P1口输出,同时P2口将对应的数码管选中,就可显示出对应的时间值。
3)定时器T0中断服务程序时钟的最小计时单位时秒,60s进位1min,60min进位1h。
定时器T0用于产生最小单位1s,定时时间为50ms,中断累计20次即为1s。
计数单元中的十进制BCD数每逢60进位。
程序流程图如图所示。
4)定时器T1中断服务程序进行时间调整时,正在被调整的时间以闪烁形式表现,定时器T1用于产生闪烁的时间间隔,每隔0.3s闪烁一次。
5)调时功能程序调时程序的方法时:按下功能键,当按下时间小于1s时,进入省电状态,大于1s时,进入调分状态,等待操作,此时计时器停止走动。
当再次按键时,若按键时间小于0.5s,则时间加1min;若按键时间大于0.5s,则进入小时调整状态。
在小时调整状态下,若按键时间小于0.5s,则时间加1h,若按键时间大于0.5s,则退出调整状态,时钟继续走动。
6)延时程序系统使用三个延时程序。
因为系统是动态显示,为了确保系统在有效显示时间范围内(约50ms)必须执行显示程序,所以0.5s的延时程序是通过执行显示程序约81遍实现的。
主程序:ORG 0000HAJMP MAINT ;转主程序NOPORG 000BHAJMP INT01 ;转定时器T0中断程序NOPORG 001BHAJMP INT11 ;转定时器T1中断程序NOP主程序MAINT:MOV R0,#7FH ;00H----7FH单元清零CLR AWZ1:MOV @R0,ADJNZ R0,WZ1MOV SP,#30H ;置堆栈指针MOV 5AH,#0AH ;放入熄灭符数据MOV TMOD,#11H ;设T0,T1为16位定时器MOV TL0,#0B0H ;置50MS定时MOV TH0,#3CHMOV TL1,#0B0HMOV TH1,#3CHSETB EA ;开中断SETB ET0 ;允许T0中断SETB TR0 ;启动T0MOV R4,#14H ;用于产生1S定时MAINT1:LCALL XSZCX ;调用显示子程序JNB P2。
烟台南山学院单片机课程设计题目电子时钟姓名:所在学院所学专业:班级:学号:指导教师:完成时间:随时代的发展,生活节奏的加快,人们的时间观念愈来愈强;随自动化、智能化技术的发展,机电产品的智能度愈来愈高,用到时间提示、定时控制的地方也会愈来愈多,因此,设计开发数字时钟具有良好的应用前景。
由于单片机价格的低成本、高性能,在自动控制产品中得到了广泛的应用。
本设计利用Atmel公司的AT89S52单片机对电子时钟进行开发,设计了实现所需功能的硬件电路,应用汇编语言进行软件编程,并用实验板进行演示、验证。
在介绍本单片机的发展情况基础上,说明了本设计实现的功能,以及实验板硬件情况,并对各功能电路进行了分析。
主要工作放在软件编程上,用实验板实现时间、日期、定时及它们的设定功能,详细对软件编程流程以及调试进行了说明,并对计时误差进行了分析及校正,提出了定时音与显示相冲突问题及解决方案。
实验证明效果良好,可以投入使用。
本次仿真设计的目的就是让同学们在理论学习的基础上,通过完成一个涉及MCS—51单片机都种资源应用并具有综合功能的小系统目标板的设计与编程应用,使学生不但能够将课堂上学到的理论知识与实际应用结合起来,而且能够对电子电路、电子元器件、印制电路板等方面的知识进一步加深认识,同时在软件编程、排版调试、焊接技术、相关仪器设备的使用技能等方面得到较全面的锻炼和提高,为今后能够独立进行某些单片机应用系统的开发设计工作打下一定的基础。
在本学期的开始我们进行了计算机工程实践,在实践中我们以微机原理与接口技术课程中所学知识为基础,设计了电子时钟系统。
本系统为多功能数字钟的系统。
本设计以单片机AT89c51为控制核心,选用DS1302串行时钟芯片,RT1602液晶显示器实现液晶显示当前时间、日期、星期。
本电子时钟具有日期、时、分、秒的显示、调整功能,采用的时间制式为24小时制,时间显示格式为时(十位、个位)、分(十位、个位)、秒(十位、个位)。
关键词:单片机 AT89S52 电子时钟汇编语言绪论............................................. 错误!未定义书签。
1.总体设计....................................... 错误!未定义书签。
设计目的...................................... 错误!未定义书签。
总体设计...................................... 错误!未定义书签。
2.硬件设计....................................... 错误!未定义书签。
总体接线...................................... 错误!未定义书签。
2.2 硬件连接................................. 错误!未定义书签。
3.软件设计....................................... 错误!未定义书签。
主程序流程图及程序设计........................ 错误!未定义书签。
键盘非法性检测................................ 错误!未定义书签。
断服务程序流程................................ 错误!未定义书签。
4. 仿真调试...................................... 错误!未定义书签。
总结............................................. 错误!未定义书签。
参考文献......................................... 错误!未定义书签。
绪论单片机由于其微小的体积和极低的成本,广泛的应用于家用电器、工业控制等领域中。
在工业生产中,电流、电压、温度、压力和流量也都是常用的被控参数。
单片机电子时钟系统,是利用单片机作为系统的主控制器,采用AT89S52单片机作为控制核心对时钟芯片DS1302的控制,同时读取时间,并队输入信号作出处理。
该单片机具有集成度高,运算快速快,体积小、运行可靠,价值低廉的特点。
鉴于这样的重要性,我们打算设计一种基于单片机的电子时钟系统,实现对时间的调整。
本设计以单片机AT89C51为控制核心,由实时时钟模块,键盘模块组成其中实时时钟采用DS1302可实现对时间的显示,设置,计时等功能在日常生活和工作中,我们常常用到定时控制,如扩印过程中的曝光定时等。
早期常用的一些时间控制单元都使用模拟电路设计制作的,其定时准确性和重复精度都不是很理想,现在基本上都是基于数字技术的新一代产品,随着单片机性价比的不断提高,新一代产品的应用也越来越广泛。
大则可以构成复杂的工业过程控制系统,完成复杂的控制功能;小则可以用于家电控制,甚至可以用于儿童电子玩具。
它功能强大、体积小、质量轻、灵活好用,配以适当的接口芯片,可以构成各种各样、功能各异的微电子产品。
近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断地走向深入,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,因此特别适合于与控制有关的系统,越来越广泛地应用于自动控制,智能化仪器,仪表,数据采集,军工产品以及家用电器等各个领域,单片机往往是作为一个核心部件来使用,在根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。
数子时钟在日常生活中最常见,应用也最广泛。
本次设计以硬件软件化为指导思想,充分发挥单片机功能,大部分功能通过软件编程来实现,电路简单明了,系统稳定性高。
同时,该时钟系统还具有功耗小、成本低的特点,具有很强的实用性,而且系统具有一定的可扩展性。
1.总体设计设计目的应用单片机控制技术,设计出以89c51单片机为核心的电子时钟,电子时钟能够显示时、分、秒显示时间的功能,还可以进行时和分的校对,而且其片选的灵活性强。
设计一个电子时钟,可以查询日历,可以设置时间,掉电时间不丢失;时钟必须有定闹功能,定闹设置掉电不丢失。
总体设计该电子时钟由89C51,BUTTON,1602 LCD液晶屏等构成,采用晶振电路作为驱动电路,利用单片机内部定时计数器0通过软件扩展产生的一秒定时,达到时分秒的计时,六十秒为一分钟,六十分钟为一小时,满二十四小时为一天。
闹钟和时钟的时分秒的调节是由一个按键控制,而另外一个按键控制时钟和闹钟的时间的调节。
图1系统结构框图该电子时钟由STC89C51,BUTTON,1602 LCD液晶屏等构成,采用晶振电路作为驱动电路,晶振电路的晶振频率为12MHZ,使用的定时器/计数器工作方式0,通过软件扩展产生的一秒定时,达到时分秒的计时,60秒为一分钟,60分钟为一小时,24小时为一天,又重00:00:00开始计时。
没有按键按下时,时钟正常运行,当按下调节时钟按键K1,就会关闭时钟,当按下闹钟按键K3时时钟就会进入设置时间界面,但是时钟不会停止工作,按K2键,,就可以对时钟和闹钟要设置的时间进行调整。
2.硬件设计总体接线装有UNSPTMIDE仿真软件的PC机一台,UNSPTM十六位单片机实验箱一台8pin排线两根、短路块若干。
本程序用到的实验箱硬件模块为:SPCE061A核心及实验箱中提供的4*4键盘模块和6位LED数码管显示模块。
SPE061A共提供两个16位通用的并行I/O口:IOA0-IOA15 IOB0-IOB15。
两个口的每一位都可以通过编程单独定义为输入或输出口,本实验采用IOA15—IOA8连接4*4键盘,IOA0—IOA7、IOA0—IOA15连接数码管。
图总体接线图这部分的主要接线如下:IOA8-15接液晶显示模块DB0-DB7IOB4接液晶显示模块AOIOB5接液晶显示模块的R/WIOB6接液晶显示模块的EPDB0-DB7为双向数据口,AO为数据/使命控制位,R/w为读/写信号,EP是全能端(低电平有效)要这部分工作时Key接线与IOA低八位相连就可以了。
本实验中,定义每个键的功能,包括数字键、功能键和一些保留键,其中标“0-9”为数字键,标“F2-F4”为保留键,标“F1”为重新设置时间键,标“ENT”为确认键,标“DEL”为删除键。
运行程序后,按常规的显示方法,从数码管的第一位开始显示,六位数码管一次显示时、分、秒的十位、个位。
设置错误按DEL键即可重新设置,设置完成按ENT键,重新设置按F1键。
2.2 硬件连接利用4*4键盘和6位LED数码管分别与SPCE061A单片机IOA口、IOB口的相关引脚相接,IOA0~IOA7连接和6位数码管的a~g、dp,IOA口的高八位IOA15~IOA8连接4x4键盘的L1~L4、C1~C4,IOB15~IOB12连接数码管的位信号1~4,IOB2~IOB1连接数码管的位信号5~6,IOB0连接数码管的分隔符信号DD。
几把JP4、JP5的引脚全部用跳线短接起来,用一根排线连接J27和JP7。
时间的设置可以通过4*4键盘的数字键来完成,时间的显示通过6位数码管来完成,以实现计时的功能。
硬件连接图如下:图硬件接线图3.软件设计主程序流程图及程序设计本系统软件设计程序主要分为主程序(其中包括键盘非法性检测、时钟数据处理、键值转换等子模块)、中断服务子程序、键盘子程序、数码管显示子程序及中断定义子程序。
主程序对程序框架进行设计在调用各个子程序实现系统时钟的设置及重置功能,下面分别详细介绍。
图主程序流程图主程序代码:#include ""#include ""#include "061A"typedef unsigned char uchar;#define KEY_DEL 11#define KEY_ENT 12#define KEY_F1 13#define YESCarryFlag 1#define ClearCarryFlag 0#define YESIntFlag 1#define ClearIntFlag 0#define true 1#define false 0unsigned int INTflag;unsigned int KeyVal;unsigned int KeyDownTimes;unsigned int KeycodeLED[6] ;unsigned int EnterFg ;unsigned int F1flag ;unsigned int secFlag,minFlag,hourFlag;void clockPro(void);unsigned int SetKeyValPro(void);unsigned int KeyDataChange(unsigned int Key_Data);unsigned int g_Data[11] ={0x003f,0x0006,0x005b,0x004f,0x0066,0x006d,0x007d,0x0007,0x007f,0x006f}; int main(){unsigned int i;KeyDownTimes = 0;INTflag = 0;EnterFg = 0;i = 0;Key_Init(); DIG_Init();while(1)KeyVal = Key_Get();KeyVal = KeyDataChange(KeyVal) switch(KeyVal)case KEY_F1:INT_IRQ5();if(KeyDownTimes>=6) KeyDownTimes=0;F1flag = true;EnterFg = false;case KEY_DEL:if (F1flag = true)if ( KeyDownTimes>0)KeyDownTimes--;break;case 0xff:break;case KEY_ENT:if(KeyDownTimes==6)SP_INT_IRQ5();F1flag = false;EnterFg = truebreak;default:if(F1flag == true)if(KeyDownTimes<6)KeycodeLED[KeyDownTimes] = KeyVal;if(SetKeyValPro()== true){KeyDownTimes++;break;for(i=0;i<6;i++)DIG_Set(i+1,g_Data[KeycodeLED[i]]);clockPro();F_ClearWatchdog();键盘非法性检测图键盘非法性检测子程序流程图void SetKeyValPro(void)unsigned int SetKeyValPro(void)uchar flag;switch(KeyDownTimes){case 0 : if(KeycodeLED[KeyDownTimes]<3){ flag = true;else flag = false;break;case 1: if(KeycodeLED[KeyDownTimes-1]==2 ){if(KeycodeLED[KeyDownTimes]<5)flag = true;elseflag = false;}elseflag = true;break;if(KeycodeLED[KeyDownTimes]<6)void clockPro(void) while(INTflag==1)INTflag = ClearIntFlag;if(KeycodeLED[4] == 5 && KeycodeLED[5] == 9) KeycodeLED[4] = 0;KeycodeLED[5] = 0;secFlag = YESCarryFlag; }elseif(KeycodeLED[5]==9)KeycodeLED[5]= 0;KeycodeLED[4]++;else KeycodeLED[5]++;}}while(secFlag==1){secFlag = ClearCarryFlag;if(KeycodeLED[2] == 5 && KeycodeLED[3] ==9){KeycodeLED[2] = 0;KeycodeLED[3] = 0;minFlag = YESCarryFlag; }else{if(KeycodeLED[3]==9){KeycodeLED[3]= 0;KeycodeLED[2]++;}else KeycodeLED[3]++;while(minFlag==1)minFlag = ClearCarryFlag;if(KeycodeLED[0]==2 && KeycodeLED[1] ==3){KeycodeLED[0] = 0;KeycodeLED[1] = 0;hourFlag = YESCarryFlag; }else{ if(KeycodeLED[1]==9){KeycodeLED[1]= 0;KeycodeLED[0]++;else KeycodeLED[1]++;断服务程序流程图 IRQ5中断服务程序流程图IRQ6中断服务程序流程图程序说明:在IRQ5_2HZ中断里定时1s的时间,在IRQ6_TMB2中断里调用键盘程序扫描键盘,而IRQ4的1KHZ中断当中,进行数码管显示的动态扫描。