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

付费下载

下载本文档

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

文档简介

目录一、引言········二、设计课题·········三、系统总体方案·········四、系统硬件设计······

1.硬件电路原理图2.元件清单五、系统软件设计·········1.软件流程图2.程序清单六、系统实物图········课程设计体会········八、参考文献及网站·········九、附录·········引言单片机因将其主要组成部分集成在一个芯片上而得名,就是把中央处理器、随机存储器、只读存储器、中断系统、定时器/计数器以及I/O接口电路等部件集成在一个芯片上。基于单片机设计的数字钟精确度较高,因为在程序的执行过程中,任何指令都不影响定时器的正常计数,即便程序很长也不会影响中断的时间。数字钟是采用数字电路实现对日期、时、分、秒,数字显示的计时装置,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表的报时功能。数字钟已成为人们日常生活中的必需品,广泛应用于家庭、车站、码头、剧院、办公室等场所,给人们的生活、学习、工作带来极大的方便。不仅如此,在现代化的进程中,也离不开电子钟的相关功能和原理,比如机械手的控制、家务的自动化、定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。而且是控制的核心部分。因此,研究数字钟及扩大其应用,有着非常现实的意义。本设计使用12MHZ晶振与单片机AT89C51相连接,以AT89C51芯片为核心,采用动态扫描方式显示,通过使用该单片机,加之在显示电路部分使用HD74LS373驱动电路,实现在8个LED数码管上显示时间,通过4个按键进行调时、复位等功能,在实现各功能时数码管进行相应显示。软件部分用C语言实现,分为显示、延迟、调时、复位等部分。通过软硬件结合达到最终目的。二.设计课题:基于单片机的数字时钟设计三.系统总体方案图2.1整体设计思路针对要实现的功能,拟采用AT89C51单片机进行设计,AT89C51单片机是一款低功耗,高性能CMOS8位单片机,片内含4KB在线可编程(ISP)的可反复擦写1000次的Flash只读程序存储器,器件采用高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构。这样,既能做到经济合理又能实现预期的功能。在程序方面,采用分块设计的方法,这样既减小了编程难度、使程序易于理解,又能便于添加各项功能。程序可分为闹钟的声音程序、显示程序、闹钟显示程序、调时显示、定时程序。运用这种方法,关键在于各模块的兼容和配合,若各模块不匹配会出现意想不到的错误。四、系统硬件设计1.硬件电路原理图(1)复位电路单片机有两种基本复位方式:即上电复位和按键复位。本次设计用按键复位,如下图所示,通过接通按钮开关,使单片机进入复位状态。本次按键复位清零。各元件参考下图。时钟电路键盘电路按键处理设置为:如没有按键,则时钟正常走时。按下K0键:进入调分状态,时钟停止走动;按K1和K2键:可进行加1和减1操作;继续按K0键:可分别进行分和小时的调整;最后按K0键:退出调整状态,时钟开始计时运行电路图如下:(4)显示电路本次数码管采用共阴极8段式LED数码管QH5011AS。该数码管参数见附录本系统共用8个数码管,从右到左依次显示秒个位、秒十位、横线、分个位、分十位、横线、时个位和时十位。数码管显示的信息用8个内存单元存放,这8个内存单元称为显示缓冲区,其中秒个位和秒十位、分个位和分十位、时个位和时十位分别由秒数据、分数据和小时数据分拆得到。在本系统中数码管显示采用软件译码动态显示。在存储器中首先建立一张显示信息的字段码表,显示时,先从显示缓冲区中取出显示的信息,然后通过查表程序在字段码表中查出所显示的信息的字段码,从P0口输出,同时在P2口将对应的位选码输出选中显示的数码管,就能在相应的数码管上显示显示缓冲区的内容。同时采用NPN型三极管,三极管接法如下图,其中当三极管基极高电平时,数码管共阴极为高电平,三极管基极接低电平时,数码管共阴极为低电平,该位选中。还采用了74LS373锁存器,用来缓存输入数码管段选的高低电平,提高电路稳定性。电路图如下:总原理图:元件清单品名规格型号数量单片机及座子STC89C51RC1晶振12MHz1独石电容30pF2电解电容47μF2电解电容10μF1按键4RJ电阻10KΩ4RJ电阻510Ω8RJ电阻4.7KΩ8三极管2N5551NPN8锁存器及座子74LS37318段式LED数码管QH5011AS8连孔板14cm*21cm带电源插座孔和USB插座孔1导线若干焊锡丝若干交流220V-直流5V适配器1A,5W1交流220V-直流5V适配器配套插座1ISP下载编程工具STC89C51RC/RD+系列ISP经济型下载编程工具1焊锡膏系统软件设计1.软件流程图(1)主程序执行流程如图,主程序先对显示单元和定时器/计数器初始化,然后重复调用数码管显示模块和按键处理模块,当有键按下,则转入相应的功能程序开始显示单元清0进入功能程序按下键否?调用显示子程序允许T0中断T0、T1设为16位计数模式开始显示单元清0进入功能程序按下键否?调用显示子程序允许T0中断T0、T1设为16位计数模式否是(2)中断服务流程图中断返回时单元清0时单元=24?时单元加1,分单元清0分单元=60?分单元加1,秒单元清0秒单元=60?秒单元加1,50ms计数器清050ms计数器=20?50ms计数器加1现场保护,重置初值启动下个50ms开始中断返回时单元清0时单元=24?时单元加1,分单元清0分单元=60?分单元加1,秒单元清0秒单元=60?秒单元加1,50ms计数器清050ms计数器=20?50ms计数器加1现场保护,重置初值启动下个50ms开始否是 否 是否 是否是是中断服务程序流程图(3)按键扫描流程图Key2键按下否?调用10ms延时子程序Key2键按下否?时或分减1,至0则取模Key0键按下否?0<Con<3?Key0键按下否?EA=1调用10ms延时子程序Key1键按下否?时或分加1,加满则清0Key1键按下否?EA=0,TR0=1,ET0=1调用10ms延时子程序Con加1,TR0=0,ET0=0开始Key2键按下否?调用10ms延时子程序Key2键按下否?时或分减1,至0则取模Key0键按下否?0<Con<3?Key0键按下否?EA=1调用10ms延时子程序Key1键按下否?时或分加1,加满则清0Key1键按下否?EA=0,TR0=1,ET0=1调用10ms延时子程序Con加1,TR0=0,ET0=0开始否 是否 是否 是 是 否否 是 是 否否 是 是显示从秒到时,从个位到十位依次扫描,并分别延时1ms,灭一次开始(4)显示函数流程图显示从秒到时,从个位到十位依次扫描,并分别延时1ms,灭一次开始2.程序清单采用C语言描写//采用8位LED软件译码动态显示程序//使用89C51单片机,12MHZ晶振,P0输出字段码,P2输出位选码//用共阴极LED数码管,KEY0为调时位选择键,KEY1为加1键,KEY2为减1键#include<reg51.h>#definecharunsignedcharcharcodedis_7[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};//共阴极LED数码管"0~9","灭"和"-"的字段码charcodescan_con[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位选择码chardatadis[8]={0x00,0x00,0x0b,0x00,0x00,0x0b,0x00,0x00};//显示缓冲区,时,分,秒初始为0,0x0b为"-"的编码chardatatimedata[3]={0x00,0x00,0x00};//分别为秒,分和小时的值chardatams50=0x00,con=0x00,con1=0x00,con2=0x00;sbitkey0=P1^0;sbitkey1=P1^1;sbitkey2=P1^2;//1ms延时函数delay1ms(intt){inti,j;for(i=0;i<t;i++)for(j=0;j<120;j++) ;}//按键处理函数keyscan(){EA=0;if(key0==0){delay1ms(10);while(key0==0);con++;TR0=0;ET0=0;if(con>=3){con=0;TR0=1; ET0=1;} }if(con!=0){if(key1==0){ delay1ms(10); while(key1==0); timedata[con]++; if(con==2)con1=24; elsecon1=60; if(timedata[con]>=con1) {timedata[con]=0;} }}if(con!=0){if(key2==0){delay1ms(10);while(key2==0);timedata[con]--;if(con==2)con2=23;elsecon2=59;if(timedata[con]<=0){timedata[con]=con2;}}}EA=1;}//数码管显示函数scan(){chark;dis[0]=timedata[0]%10;dis[1]=timedata[0]/10;dis[3]=timedata[1]%10;dis[4]=timedata[1]/10;dis[6]=timedata[2]%10;dis[7]=timedata[2]/10;for(k=0;k<8;k++){P0=dis_7[dis[k]];P2=scan_con[k];delay1ms(1);P2=0x00;}}//主函数main(){TH0=0x3c;TL0=0xb0;TMOD=0x01;ET0=1;TR0=1;EA=1;while(1){ scan(); keyscan(); }}//定时器、计数器T0中断服务函数voidtime_intt0(void)interrupt1{ET0=0;TR0=0;TH0=0x3c;TL0=0xb0;TR0=1;ms50++;if(ms50==20){ms50==0x00;timedata[0]++;if(timedata[0]==60){ timedata[0]=0; timedata[1]++; if(timedata[1]==60) { timedata[1]=0; timedata[2]++; if(timedata[2]==24) { timedata[2]=0; } } }}ET0=1;}系统实物图课程设计体会这次电子技术课程设计,我很用心的去完成,当总原理图绘好的那一刻,心里有说不出的满足感。从这次课程设计中,我真正学到了很多有用的知识。拿到课题后,我首先将《单片机原理与应用及C51程序设计》中有关本次设计的内容复习了一遍,比如七段译码显示器、计数器、振荡器等等。然后根据设计要求,我去图书馆查阅了相关的资料,对整体框架做了一个初步的了解。做完准备工作后就正式开始设计与绘图。先要将没每一功能模块设计出来,再整体排版、连接。这次设计让我熟练掌握了课本上的一些理论知识,在这次课程设计中,反复查找资料,发现电路中的错误和改善电路中的错误,让我将课本上的理论知识重新过了一遍。回过头来一想,其实设计这些电路也并不是很困难,而且还十分有意思,特别是用protues将电路图模拟成功后很有成就感。课程设计是一个学习新知识、巩固加深所学课本理论知识的过程,它培养了我们综合运用知识的能

温馨提示

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

评论

0/150

提交评论