单片机课程设计报告 数字电子时钟设计_第1页
单片机课程设计报告 数字电子时钟设计_第2页
单片机课程设计报告 数字电子时钟设计_第3页
单片机课程设计报告 数字电子时钟设计_第4页
单片机课程设计报告 数字电子时钟设计_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《单片机原理与接口技术》课程设计题目:数字电子时钟设计摘要在如今自动工业化的社会里单片机的技术越来越被人们所重视,单片机开始在各大产业上被加以运用。电子时钟作为人们日常生活中必备的电子产品,十分切合人们的生活。运用51单片机设计出准确可靠的电子时钟,可对年、月、日、时、分、秒经行准确的调整。本次制作主要是运用AT89C51为处理器,通过独立按键进行调时控制,运用74HC245经行输入输出的信号转换,之后在八位数码管上加以显示,确保led数码显示管安全稳定运行,。通过译码电路将秒脉冲产生的信号在报警电路上实现整点报时功能等,构成扩展电路。经过布线、焊接、调试等工作后数字电子时钟成形。关键词单片机AT89C5174HC245输入输出转换器八位数码管目录TOC\o"1-2"\h\u28773第1章绪论 第1章绪论1.1课题背景单片机是一种运用大规模集成电路技术将中央处理器和数据存储器,程序存储器,及一些其他通信口集成于一块芯片中。单片机又称微型计算处理器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了部分转换设备。它具有携带方便、小巧轻便、价钱实惠等优点,能够帮助我们深入了解其应用和开发提供方便。现在单片机的运用领域已经非常普遍,如生活中的电视机、洗衣机、电风扇、冰箱、空调,工业上的各种仪表等等都运用着单片机,这使单片机在现在越来越不可或缺。灵活运用号单片机技术不仅可以让我们更加了解现代化的智能生活,还可以在未来的行业竞争中获得优势。1.2课题现状简易电子时钟显示清晰直观,读数准确,相交于机械表,它具有体积小、精度高、功能多、稳定性高、可靠性高、造价低的优点。具有传统机械表所不具备的功能。电子表的设计原理并不复杂,我们可以运用所学习的电路知识来设计并制作一个数字电子表放眼当今社会,电子行业快速发展,单片机在多个领域如工业自动化、智能仪器仪表、消费类电子产品、武器装备、终端及外部设备控制、计算机网络和通信设备等有着广泛的应用。对于工科的电子、电气相关专业的学生而言,掌握好单片机技术对自我知识的提升和今后就业的帮助都是大大有益的。因此,单片机课程在上述专业中的地位非常重要,而且鉴于单片机特殊的实践性,它的实践环节比如课程设计就更是重中之重了。

第2章总统设计方案2.1设计要求1、用51单片机完成设计。2、制作电子时钟可以显示时、分、秒。3、独立按键调整时间可加减,按键启动、停止时间。4、可调节进入日期模块,显示年、月、日。2.2方案论证数字电子时钟由内部组成的多谐振荡电路来提供晶振,为时钟计时设计时差基础。设计核心以51单片机内部的特殊功能寄存器为基础,依靠内部程序信号的输出转换实现信号功能的A/D转换,最终由数码管数字显示屏显示具体的时间。数字电子时钟系统可分为主控单元、复位单元、按键控制电路、显示电路等。图2.1系统组成框图2.3各模块功能说明晶振电路的功能:每个单片机系统里都有晶振,全程是叫晶体震荡器,在单片机系统里晶振的作用非常大,他结合单片机内部的电路,产生单片机所必须的时钟频率,单片机的一切指令的执行都是建立在这个基础上的,晶振的提供的时钟频率越高,那单片机的运行速度也就越快。晶振用一种能把电能和机械能相互转化的晶体在共振的状态下工作,以提供稳定,精确的单频振荡。复位电路的功能:把电路初始化到一个确定的状态,一般来说,单片机复位电路作用是把一个例如状态机初始化到空状态,而在单片机内部,复位的时候单片机是把一些寄存器以及存储设备装入厂商预设的一个值。复位系统保证单片机功能可以重复稳定运行。键盘电路:根据4×1矩阵键盘,它是用四条I/O线与单片机串口相连接,每个按键功能明确,能够实现按键控制闹钟,设置时间的功能。显示电路的功能:采用8位共阴极数码管驱动方式P2口相应的位置,即选择要显示的数码管位,P0口相应的位置1即可显示相应的数码管段。负责显示时钟的时、分、秒。硬件仿真设计本次设计采用proteus软件进行硬件仿真设置,Proteus软件是英国LabCenterElectronics公司出版的EDA工具软件。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是比较好的仿真单片机及外围器件的工具。虽然国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Proteus是英国著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DSPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil和MATLAB等多种编译器。本次设计运用了AT89C51单片机、7SEG8位共阴数码管、74HC245译码器、按键、晶体振荡器、串阻等器件。总体电路如图3.1所示。图3.1时钟电路图3.1AT89C51AT89C51是美国INTEL公司生产的低电压,高性能CM0S8位单片机,片内含业4kbytes的可反复擦写的只读程序存储器(PEROA1)和128bytes的随机存取数据存储器(RA),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCs-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大AT89C51单片机能提供许多高性价比的应用场合,可灵活应用于各种控制领域。AT89C51管脚说明,如图3.2所示:图3.2AT89C51管脚图P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P0口的管脚第一次写1时,被定义为高阻输入,P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P输出原码,此时P0外部必须被拉高。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将輸出中流。P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位,在给出地址“1”时,利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口。P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2/INT0(外部中断0)P3.3/INT1(外部中断1)P3.4T0(记时器0外部输入)P3.5T1(记时器1外部输入)P3.6/WR(外部数据存储器写选通)P3.7/RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PRO:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOYX,MOVC指令是ALE才起作用。PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12Y程电源(VPP)。XTAL:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反问振荡器的输出。3.2译码器74HC24574HC245是一款高速CMOS器件,74HC245引脚兼容低功耗肖特基TTL(LSTTL)系列。74HC245译码器可接受3位二进制加权地址输入(A0,A1和A2),并当使能时,提供8个互斥的低有效输出(Y0至Y7)。74HC245特有3个使能输入端:两个低有效(E1和E2)和一个高有效(E3)。除非E1和E2置低且E3置高,否则74HC138将保持所有输出为高。利用这种复合使能特性,仅需4片74HC245芯片和1个反相器,即可轻松实现并行扩展,组合成为一个1-32(5线到32线)译码器。任选一个低有效使能输入端作为数据输入,而把其余的使能输入端作为选通端,则74HC245亦可充当一个8输出多路分配器,未使用的使能输入端必须保持绑定在各自合适的高有效或低有效状态。74HC245与74HC

238逻辑功能一致,只不过74HC138为反相输出。设备如图3.3所示。图3.3ADC0808管脚图3.3数码管显示电路8位数码管正常显示分为静态式和动态式两种运行方式。外部结构如图3.4所示.图3.48位共阴极数码管数码管静态驱动也称直流驱动:静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二十进制译码器译码进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用uO端口多,如驱动5个数码管静态显示则需要5x8=40根10端口来驱动,要知道个89S51单片机可用的10端口才32个呢:),实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。动态显示驱动。数码管动态显示接口是单片机中应用最为广泛的一种显示方式之-,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是哪个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只需要显示的数码管的选通控制打开,该位就显示字形,没有选通则不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一-组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。数码管大多是由多为的发光二极管组成,设置共阴共阳端口,与51单片机配合十分方便简洁。8位共阴数码管内部电路如图3.5所示。图3.58位共阴极数码管3.4晶体振荡器晶振全名叫晶体振荡器,每个单片机系统里都有晶振,晶振是由石英晶体经过加工并镀上电极而做成的,主要的特性就是通电后会产生机械震荡,可以给单片机提供稳定的时钟源,晶振提供时钟频率越高,单片机的运行速度也就越快。晶振用一种能把电能和机械能相互转化的晶体在共振的状态下工作,以提供稳定,精确的单频振荡。晶振可以为系统提供基本的时钟信号。通常一个系统共用一个晶振,便于各部分保持同步。有些通讯系统的基频和射频使用不同的晶振,而通过电子调整频率的方法保持同步。晶振也可以锁相环电路配合使用,以提供系统所需的时钟频率。如果不同子系统需要不同频率的时钟信号,可以用与同一个晶振相连的不同锁相环来提供晶振如图3.6所示。图3.6晶振芯片3.5按键控制电路独立按键可以控制电子时钟的各项功能,对单片机的各项数据经行调整,是单片机经行交流的媒介,按键断开和闭合期间存在抖动信号,这样,当我们按键按下时,我们无法判断此时串口到底是高电平还是低电平,所以按键通常要配合消抖程序使用。按键如图3.7所示。图3.7按键电路

第4章软件设计4.1软件总统设计主函数流程图如图4.1所示。图4.1主函数流程图调用中断服务子程序,经行循环次数,根据定时器设定的初值经行计算,求得循环1000次后为1秒计时,之后循环次数清0,秒++;秒为60时,分加++,秒清0;分为60时,时++,分清0;时为24时,时清0,日期中的天++,小时清零,当天为30/31时,天清零,月增加,当月为12时月清零,年增加。系统流程如图4.2所示。图4.2系统流程4.2各模块的软件设计电路显示模块程序:voidstore_led(){ ledbt[0]=ledchar[sed%10]; ledbt[1]=ledchar[sed/10]; ledbt[2]=0xbf; ledbt[3]=ledchar[mint%10]; ledbt[4]=ledchar[mint/10]; ledbt[5]=0xbf; ledbt[6]=ledchar[hour%10]; ledbt[7]=ledchar[hour/10]; ledbd[0]=ledchar[day%10]; ledbd[1]=ledchar[day/10]; ledbd[2]=ledchar[mouth%10]; ledbd[3]=ledchar[mouth/10]; ledbd[4]=ledchar[year%100%10]; ledbd[5]=ledchar[year%100/10]; ledbd[6]=ledchar[year/100%10]; ledbd[7]=ledchar[year/1000];}voidscan_led_time(){ switch(k) { case0:WEI=weichar[0];LED=ledbt[0];k++;break; case1:WEI=weichar[1];LED=ledbt[1];k++;break; case2:WEI=weichar[2];LED=ledbt[2];k++;break; case3:WEI=weichar[3];LED=ledbt[3];k++;break; case4:WEI=weichar[4];LED=ledbt[4];k++;break; case5:WEI=weichar[5];LED=ledbt[5];k++;break; case6:WEI=weichar[6];LED=ledbt[6];k++;break; case7:WEI=weichar[7];LED=ledbt[7];k=0;break; }}voidscan_led_date(){ switch(k) { case0:WEI=weichar[0];LED=ledbd[0];k++;break; case1:WEI=weichar[1];LED=ledbd[1];k++;break; case2:WEI=weichar[2];LED=ledbd[2];k++;break; case3:WEI=weichar[3];LED=ledbd[3];k++;break; case4:WEI=weichar[4];LED=ledbd[4];k++;break; case5:WEI=weichar[5];LED=ledbd[5];k++;break; case6:WEI=weichar[6];LED=ledbd[6];k++;break; case7:WEI=weichar[7];LED=ledbd[7];k=0;break; }}时钟年月控制模块:voidtime_conversion(){ if(cnt>=1000) { sed++; cnt=0; } if(sed>=60) { sed=0; mint++; } if(mint>=60) { mint=0; hour++; } if(hour>=24) { hour=0; day++; } if(day>=30) { mouth++; day=0; } if(mouth>=12) { mouth=0; year++; }}主函数调用模块:voidmain(){ EA=1;EX0=1;IT0=1;ET0=1;TMOD=0X01; TH0=0xfc; TL0=0x66; while(1) { switch_clock(); modify_wei(); store_led(); time_conversion(); if(TR0==0) { if(nbsw%2==0) { scan_led_time(); } if(nbsw%2==1) { scan_led_date(); } } }}中断、定时器程序:voidinterrupt_timer0()interrupt1{ TH0=0xfc; TL0=0x66; cnt++; if(nbsw%2==0) { scan_led_time(); } if(nbsw%2==1) { scan_led_date(); }}voidinterrupt_0()interrupt0{ nbsw++;}voidswitch_clock(){ if(stop==0) delay(10); if(stop==0) { while(stop==0); nbst++; if(nbst%2==1) TR0=1; if(nbst%2==0) TR0=0; }}按键控制模块:switch(nbwei) {case1:if(cntplus==0){delay(10);if(cntplus==0)while(cntplus==0);sed++;} if(cntminus==0){delay(10);if(cntminus==0)while(cntminus==0);sed--;}break;case2:if(cntplus==0){delay(10);if(cntplus==0)while(cntplus==0);mint++;} if(cntminus==0){delay(10);if(cntminus==0)while(cntminus==0);mint--;}break; case3:if(cntplus==0){delay(10);if(cntplus==0)while(cntplus==0);hour++;} if(cntminus==0){delay(10);if(cntminus==0)while(cntminus==0);hour--;}break; case4:if(cntplus==0){delay(10);if(cntplus==0)while(cntplus==0);day++;} if(cntminus==0){delay(10);if(cntminus==0)while(cntminus==0);day--;}break; case5:if(cntplus==0){delay(10);if(cntplus==0)while(cntplus==0);mouth++;} if(cntminus==0){delay(10);if(cntminus==0)while(cntminus==0);mouth--;}break; case6:if(cntplus==0){delay(10);if(cntplus==0)while(cntplus==0);year++;} if(cntminus==0){delay(10);if(cntminus==0)while(cntminus==0);year--;cntminus=0;}break; }}voidscan_led_time(){ switch(k) { case0:WEI=weichar[0];LED=ledbt[0];k++;break; case1:WEI=weichar[1];LED=ledbt[1];k++;break; case2:WEI=weichar[2];LED=ledbt[2];k++;break; case3:WEI=weichar[3];LED=ledbt[3];k++;break; case4:WEI=weichar[4];LED=ledbt[4];k++;break; case5:WEI=weichar[5];LED=ledbt[5];k++;break; case6:WEI=weichar[6];LED=ledbt[6];k++;break; case7:WEI=weichar[7];LED=ledbt[7];k=0;break; }}voidscan_led_date(){ switch(k) { case0:WEI=weichar[0];LED=ledbd[0];k++;break; case1:WEI=weichar[1];LED=ledbd[1];k++;break; case2:WEI=weichar[2];LED=ledbd[2];k++;break; case3:WEI=weichar[3];LED=ledbd[3];k++;break; case4:WEI=weichar[4];LED=ledbd[4];k++;break; case5:WEI=weichar[5];LED=ledbd[5];k++;break; case6:WEI=weichar[6];LED=ledbd[6];k++;break; cas

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论