




免费预览已结束,剩余26页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程设计-微机控制实现多功能数字时钟 摘 要单片机自 20 世纪 70 年代问世以来,以其极高的性能价格比,受到人们的重视和关注 ,应用很广泛、发展很快。intel公司生产的 mcs-8051 系列单片机是各单片机中最为典型和最有代表性的一种。本次设计以 mcs-8051 芯片为核心,辅以必要的外围电路,设计了一个结构简单,功能齐全的数字时钟,它由 5v 直流电源供电。在硬件方面,单片机外接 12mhz 晶振,使用八个七段数码管来进行显示。led 采用动态扫描显示,使用 74ls245 芯片进行位驱动。通过 led 能够准确明亮地显示时、分、秒;四个简单的按键实现对时间的调整;蜂鸣器实现闹钟响铃功能;软件方面采用 c 语言编程。整个电子钟系统能完成时间的显示、调时和一组定时闹钟的功能。设计过程中使用 kei uvision 4 单片机模拟调试软件编写调试程序,并用 eda 工具软件 proteus isis 7 进行仿真。硬件简明,程序正确,仿真结果满足设计要求。关键词: 51单片机,定时器,中断,闹钟,led目 录摘 要1绪 论3第一章 系统设计3一、器件选型3二、硬件接线设计3三、系统综述31.3.1 上电界面31.3.2 调时界面31.3.3 闹钟设定界面31.3.4 正常走时界面31.3.5 闹钟响应3四、软件部分31.4.1 主函数流程图31.4.2 定时器t0中断服务程序流程图31.4.3 闹钟响应程序流程图31.4.4 键盘扫描程序流程图3第二章 参数计算3一、定时器t032.1.2 定时器t0初值计算3二、数码管驱动码32.2.1 位选码32.2.2 段选码3第三章 结 论3参考文献3附 录3绪 论20 世纪末,电子技术获得了飞速的发展。在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高。同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。时间对人们来说总是那么宝贵,随时提醒那些容易忘记时间的人,电子钟无疑最为直观。数字钟通过数字电路实现时、分、秒。数字显示的计时装置,广泛用于个人家庭、车站、码头办公室等公共场所成为人们日常生活中不可少的必需品。由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度远远超过老式钟表。多功能数字钟的应用非常普遍。由单片机作为数字钟的核心控制器,通过它的时钟信号进行实现计时功能,将其时间数据经单片机输出,利用显示器显示出来,通过键盘可以进行校时、定时闹钟等功能,输出设备显示器可以用液晶显示技术和数码管来显示技术。本次设计的数字时钟利用 51 单片机作为核心芯片,辅以按键、蜂鸣器和led显示器,以实现具有计时、校时、闹钟设定等功能。利用单片机实现的数字时钟具有编程灵活,便于功能的扩充等优点。本设计应解决的主要问题有两大方面,即硬件电路设计和软件设计两大方面。其中硬件电路部分又可分为四大模块:键盘模块、显示模块、计时模块和响铃模块。硬件电路部分致力于低成本、低功耗和易实现性;软件部分则应做到代码的精简、准确、易读、可移植性强。最后通过软、硬件的结合实现数字钟的精确计时、校时、闹钟功能。第一章 系统设计一、器件选型1.1.1 单片机选型 根据选题芯片采用mcs-8051单片机,intel公司生产的 51 系列 8 位单片机,凭借其成熟的技术标准和很高的性价比得到了广泛的普及与应用,其功能强大,用来做电子表硬件易实现,编程规范。1.1.2 按键模块 方案一:44行列式键盘如果选择此方案,那么在修改时钟或设置闹铃时间时就可以直接从键盘输入,方便、快捷。缺点也很明显,一是浪费按键,用全键盘来实现设定时间的小功能不免大材小用;二是从实用性考虑,全键盘体积大,明显不经济不方便。故放弃。 方案二:独立式按键如果设置过多按键,将会占用较多i/o口,而且会给布线带来不便,同时浪费按键,不高效,程序繁琐。本次设计适用于按键较少的情况。为了尽量实现按键的高效性,此次设计采用四个独立式按键,分别定义为key_mode、key_add、key_move,key_confirm,依次是模式键、加数键、移位键、确认键。1.1.3 显示模块方案一:液晶显示器lcd如果选择此方案,将会降低系统的功耗,可以用电池供电,便于携带,但液晶显示器的驱动电路复杂,使用起来有一定的难度。 方案二:数码管led数码管的驱动电路简单,使用方便,如果选择了此方案,那么在夜间看时间的时候就不需要有光源,非常方便。其缺点是功耗较大。 按照此次任务书设计要求,选择共阳 8 位七段蓝色数码管用于显示。1.1.4 计时参考模块方案一:专用时钟芯片如果使用时钟芯片,系统就不怕掉电且时间精确,但这种芯片比较贵,浪费资源不经济。方案二:单片机内部定时/计数器由于本次设计本主要是为了学习单片机程序的编写和调试,以及设计硬件电路的一些方法,因此采用软件的方法来计时。本次设计用mcs-8051单片机内部定时/计数器t0作为电子表时钟参考。1.1.5 闹钟响铃模块 通过三极管放大后驱动蜂鸣器工作,单片机i/o接三极管基极。1.1.6 显示器驱动模块 由于通过数码管公共极的电流较大,单片机i/o口驱动能力是不够的,故led驱动模块必不可少。为避免过多地使用分立元件,本次设计采用一片 74ls245来驱动位码,用p2口进行位选扫描。 图1-1 74ls245元件封装图74ls245是常用来驱动led或者其他的设备,它是 8 路同相三态双向总线收发器,可双向传输数据,74ls245还具有双向三态功能。片选端,接低电平时传输数据,接高电平时a、b均为高阻态。方向选择端ab/,接高电平时信号由a向b传输(发送),接低电平时信号由b向a传输(接收)。1.1.7 电源模块本系统采用了数码管作为显示器,功耗较大,不便于使用电池供电。况且本系统的体积较大,即使使用电池供电也不便于随身携带,因此用5v外部稳压电源来供电。二、硬件接线设计1.2.1 系统硬件框图8位七段led显示器mcs-8051段码驱动晶 振复位电路位码驱动按 键蜂鸣器1.2.2 单片机晶振配置和复位电路设计1-2 单片机晶振配置和复位电路晶振选择 12mhz ,接到如图所示引脚。复位电路兼具上电复位功能以及按键复位功能,接到如图所示引脚。1.2.3 按键电路设计图1-3 按键电路采用4个独立按键配以4个上拉电阻实现对时钟和闹钟的设定及修改。四个独立式按键分别定义为key_mode、key_add、key_move、key_confirm,依次是模式键、调时加键、调时移位键、确认键。1.2.4 蜂鸣器驱动电路设计图1-4 蜂鸣器驱动电路 蜂鸣器采用npn三极管放大电路驱动,接到如图所示引脚。1.2.5 显示模块电路设计图1-5 显示模块电路显示设备为共阳8位7段数码管(led),用单片机p0口作为led段选控制端,用单片机p2口作为led位选控制端,并采用集成块74ls245作为位驱动模块。片选端接地,方向选择端ab/接电源。1.2.6 硬件接线总览三、系统综述1.3.1 上电界面图1-6 电子钟上电界面电子表上电后自动初始化,接着从 00-00-00 开始走时,显示正常走时界面,此时闹钟默认关掉。按下key_mode键,可依次切换到调时界面、调闹钟界面、正常走时界面,如此循环往复。 上电初始化后,调时初值为00 00-00,闹钟初值为00-00 00。1.3.2 调时界面图1-7 调时界面调时界面,从左至右依次显示时、分、秒,数字右下角小点代表调整位到达位置。在调时界面下,按下key_move键可以移动调整位,数字下标小点用以指示当前操作的数位,按下key_add键可以对调整位进行加数操作。当且仅当在调时界面下,按下key_confirm键可确认设定,电子表按设定时间更新并走时,同时自动清零设定时间。此时再按 key_mode键切换回正常走时界面即能看到时间已经更新。如果调时后没有按下key_confirm键确认,而是直接按key_mode键切换回正常走时界面,则设置时间被保存,当前时间并不更新。1.3.3 闹钟设定界面图1-8 闹钟设定界面闹钟设定界面,从左至右依次显示时、分、秒,数字右下角小点代表调整位到达位置。在闹钟设定界面下,按下key_move键可以移动调整位,数字下标小点用以指示当前操作的数位,按下key_add键可以对调整位进行加数操作。闹钟设置好后直接按key_mode键返回正常正常走时界面即可,无需按key_confirm键确认,闹钟设定值会自动保存。1.3.4 正常走时界面图1-9 正常走时界面一图1-10 正常走时界面二正常走时界面,从左至右依次显示时、分、秒,小点亮灭代表闹钟开闭。在正常走时界面下,按下key_add键和key_move键不产生操作,led显示无变化;按下key_confirm键可循环开闭闹钟,led显示对应变换提示闹钟的开闭;按下key_mode键可依次切换到调时模式、闹钟设定模式、正常走时模式,循环往复。1.3.5 闹钟响应当正常走时到达闹铃设定值后,闹铃响应,正常情况下持续蜂鸣一分钟后自动关闭蜂鸣器。闹铃响铃过程中,若按下key_confirm键可立刻关闭蜂鸣器。闹铃响应后自动等待下次响应。四、软件部分1.4.1 主函数流程图开 始初始化定时器t0循环中断计时主循环键盘扫描闹钟判定显示响应闹钟响应结 束图1-11 主函数程序流程图开 始1.4.2 定时器t0中断服务程序流程图t0重装初值t+1t=20?t=0, sec+1sec=60??sec=0, min+1min=60??min=0, hour+1hour=24??hour=0结 束图1-12 定时器t0中断服务程序流程图开 始1.4.3 闹钟响应程序流程图闹钟判定闹钟定时到?闹钟打开?key_confirm按下?响铃一分钟关闭蜂鸣器结 束图1-13 闹钟响应程序流程图开 始1.4.4 键盘扫描程序流程图键盘扫描有键按下?键盘抖动?key_confirmkey_movekey_addkey_modeconfirm();mov+1add( );moshi+1moshi2?mov2?moshi=0mov=0结 束 图1-14 键盘扫描程序流程图 第二章 参数计算一、 定时器t02.1.1 定时器t0背景知识数字电子钟设计中主要使用定时器 t0 ,利用 et0 中断进行计时时间的自增,从而实现计时功能。51 单片机有两个通用定时/计数器 t0 和 t1 。两者均可配置为定时器或计数器,用作“定时器”功能时,每经过一个机器周期,寄存器值加1;用作“计数器”功能时,寄存器在对应的外部输入管脚 t0/t1 上每发生一次1到0的跳变时加1。1.方式控制寄存器tmodt1t0d7d6d5d4d3d2d1d0gatec/m1m0gatec/m1m0tmod用以设定通用定时/计数器 t0 和 t1工作方式。gate位为门控位,gate=1时,t0、t1分别受int0、int1引脚输入电平控制,常用于测量对应正脉冲的宽度;c/用选选择定时、计数功能。本次设计选择t0做定时器用,工作在方式1,故 tmod = 0x01;2.控制寄存器tcont1t0d7d6d5d4d3d2d1d0tf1tr1tf0tr0ie1it1ie0it0tr0用于开/关定时器t0,tf0为t0溢出标志位。3.中断允许控制寄存器ied7d6d5d4d3d2d1d0ea/eset1ex1et0ex0ea为总中断允许位,et0为t0中断允许位。2.1.2 定时器t0初值计算初值计算公式:x = - tx定时器初值 n定时器位数(方式0:13位,方式1: 16位,方式2: 8位)fosc单片机主频(本次设计取12mhz)t所需定时时间设定时时间为50ms,即t=50ms,fosc=12mhz,选工作方式1,带入公式求解得x=3cb0h,所以th0 = 0x3c,tl0 = 0xb0。2.1.3 定时器t0初始化程序 tmod = 0x01; /选定时器t0,工作方式1 th0 = 0x3c; tl0 = 0xb0; /50ms定时初值 et0 = 1; /定时器to使能位打开 ea = 1; /总中断允许位打开 tr0 = 1; /打开定时器t0开始计时二、数码管驱动码图2-1 数码管驱动电路2.2.1 位选码led连接如图所示,为8位共阳数码管,从右至左,依次循环扫描,可得段码驱动数组如下:unsigned char wei=0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80; 2.2.2 段选码图2-1 七段数码管示意图七段共阳数码管,当位选端为高电平时,给段选端低电平即可点亮对应段,再由点亮的段组合成字符。定义如下段码驱动数组,即可依次显示字符 0 1 2 3 4 5 6 7 8 9 - 灭 .unsigned char duan=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82, 0xf8,0x80,0x90,0xbf,0xff,0x7f; 第三章 结 论通过两个星期的持续努力,在老师的指导和同学的帮助下,经过反复调试修改我终于成功完成了此次设计任务。此次设计既是对51单片机核心功能学习的一次实际操作验收,也对微机控制理论学习的一次应用拓展。经过此次设计,我基本学会了用mcu辅助外围电路,通过编程实现常见的微机控制,为以后的工作学习打下了一定的基础。经proteus软件仿真,此次设计的多功能电子钟功能完全达标:正常走时、时间校正、闹钟设定都能完整简明地实现;同时该电子钟精确度完全可以满足日常生活显示时间的需要;时间校正和闹钟设定方便快捷,闹钟响铃还有扩展成音乐闹钟的余地。硬件总体实用性较强,操作清晰简单。 通过这次设计我学会了很多东西,微机控制课程设计重点就在于软件的设计,需要有很巧妙的程序算法。虽然一直也有小程序的练习,但我还是第一次写好这么一个综合系统的大程序,发现并不是一件简单的事,一个看似简单的功能程序实现的时候往往也不简单,具体编程的时候才发现一些细微的知识或低级错误就会引起失败,所以只有学精弄懂并且要细心才行,只学习理论有些东西是很难理解的,更谈不上掌握,实践操作很重要,活学活用才能深刻掌握知识。 最后,要感谢我的指导老师和替我答疑解惑的同学,没有你们的帮助我也无法完成此次课程设计。 参考文献 1张淑清,单片机原理及应用技术,北京:国防工业出版社,2010.8 2王为青、程国钢,单片机keilcx51应用开发技术m,北京:人民邮电出版社,2007 3张靖武、周灵彬,单片机系统的proteus设计与仿真,北京:电子工业出版社,2007 4atmel.8-bitmicrocontrollerwith4kbytesflashat89c51.2000 附 录完整程序代码如下/*头文件及宏定义*#include #define uchar unsigned char#define uint unsigned int/*软件延时程序*void delay(uint ii) while(-ii); /*定义数码管驱动码*uchar duan=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff,0x7f; /段选,0 1 2 3 4 5 6 7 8 9 - 灭 .uchar wei=0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80;/位选,共阳,从右至左/*定义变量*uchar t=0,sec=0,min=0,hour=0;/正常走时时间变量uchar sec1=0,min1=0,hour1=0; /时间设定值变量uchar sec2=0,min2=0,hour2=0; /闹钟设定值变量uchar alarm_en=0; /闹钟开关变量uchar alarm_flag=0; /闹钟定时到达标志变量uchar p3=0,moshi=0,mov=0; /p3口查询,模式值,调整位/显示缓冲区,依次为正常、调时、闹钟设定、调整位带点标记uchar temp8,temp18,temp28,temp38;/*函数声明*void initialize(void); /初始化void show(void); /正常走时显示void show1(void); /时间设定显示void show2(void); /闹钟设定显示void show3(void); /调整位标记void show4(void); /闹钟开关标记void keyscan(void); /键盘扫描void add(void); /调时调闹钟加数程序void confirm(void); /调时确认,闹钟开关void alarm_judge(void); /闹钟定时到达判定void beep(void); /闹钟响铃程序/*主函数*void main() initialize(); while(1) keyscan(); alarm_judge(); switch(moshi) case 0:show(); show4();break; /显示正常走时 case 1:show1();show3();break; /显示设置时间 case 2:show2();show3();break; /显示闹钟时间 if(alarm_flag=1 & alarm_en=1) /定时时间到达且闹钟打开 beep(); /*定时器初始化*void initialize(void) tmod = 0x01; th0 = 0x3c; tl0 = 0xb0; /50ms et0 = 1; ea = 1;tr0 = 1;p1=0x7f; /初始化时关掉蜂鸣器 alarm_flag=alarm_en=0;/*定时器t0中断服务程序*void timer0(void) interrupt 1 tl0 = 0xb0; th0 = 0x3c; t+; if(t=20) / (50ms*20=1s) t=0; sec+; if(sec=60) / 秒为60,则清零,分加1 sec=0; min+; if(min=60) / 分为60,则清零,时加1 min=0; hour+; if(hour=24) / 时为24,则清零 hour=0; if(sec1=60) sec1=0; min1+; if(min1=60) min1=0; hour1+; if(hour1=24) hour1=0; if(sec2=60) sec2=0; min2+; if(min2=60) min2=0; hour2+; if(hour2=24) hour2=0;/*正常时间显示程序*void show(void) uchar i=0; temp0=sec%10;temp1=sec/10;temp2=10; temp3=min%10; temp4=min/10;temp5=10;temp6=hour%10;temp7=hour/10; for(i=0;i8;i+) p2=weii; p0=duantempi; delay(100); /*调时模式显示程序*void show1(void) uchar i=0; temp10=sec1%10;temp11=sec1/10;temp12=10; temp13=min1%10; temp14=min1/10;temp15=11;temp16=hour1%10;temp17=hour1/10; for(i=0;i8;i+) p2=weii; p0=duantemp1i; delay(100); /*闹钟设定模式显示程序*void show2(void) uchar i=0; temp20=sec2%10;temp21=sec2/10;temp22=11; temp23=min2%10; temp24=min2/10;temp25=10;temp26=hour2%10;temp27=hour2/10; for(i=0;i=3) moshi=0; while(p3=0xfe) / key_mode键按下到弹起期间 p3=p3; switch(moshi) case 0:show(); break; /显示正常走时 case 1:show1();break; /显示设置时间 case 2:show2();break; /显示闹钟时间 if(p3=0xfd) /key_add键 delay(10);if(p3=0xfd) add(); while(p3=0xfd) / key_add键按下到弹起期间 p3=p3; switch(moshi) case 0:show(); break; /显示正常走时 case 1:show1();break; /显示设置时间 case 2:show2();break; /显示闹钟时间 if(p3=0xfb) /
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 出口欧洲外贸合同样本
- 假发批发供货合同样本
- 办公电脑购买合同标准文本
- 别墅水电合同标准文本
- 出口代理记账合同样本
- 借款展期合同样本
- 出租共享菜园合同样本
- 办理工作合同标准文本标准文本
- 办公场所广告租赁合同标准文本
- 代驾出行合同样本
- 屋顶光伏支架安装施工方案
- 挖掘机司机岗位安全培训课件
- 新能源购售电合同模板
- 2024年中国浴室套件市场调查研究报告
- 电炉炼钢工职业技能知识考试题(附答案)
- 依法治县业务培训
- 2024年一级建造师《建设工程项目管理》真题及答案
- 网络安全课件:防范钓鱼攻击与社工库检测分析
- 房屋市政工程生产安全重大事故隐患判定标准(2024版)宣传海报
- 2024年安全员A证考试题库及答案(1000题)
- 孝歌歌词大全100首
评论
0/150
提交评论