已阅读5页,还剩25页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘 要单片计体积小、能耗低、成本低、功能强,广泛应用于智能产品和工业自动化上。本次设计通过理论学习与应用,从而达到设计、开发单片机简单系统的目的。本次设计是一个定时闹钟,以单片机为基础,实现显示时间,能够调整时间和设定闹钟时间,并且到设定的闹钟时间可以发出报警声。基于单片机的定时闹钟在设计时需要解决三个方面的主要问题:一是LED显示模块的驱动和编程,二是有关单片机中定时器的使用,三是如何利用单片机的按键键盘实现时钟调整时间的功能和运行模式的转化。在本设计的电路中,除了基本的单片机系统和外围电路外,还需按键键盘作控制装置,LED七段数码管作显示装置。该定时闹钟是由AT89C52单片机控制的,可以达到以下效果:1、能够显示“时时-分分”。2、能够调整时间,设定闹钟时间。3、闹钟时间到时间到能够发出“滴滴滴”报警声。4、可以通过串口在PC上设定时间和闹钟。关键词:单片机 定时闹钟 仿真目 录1 系统设计11.1 实验箱主要组件11.2 系统框图及说明31.3 系统软件设计3 1.3.1 C51的编程基础3 1.3.2 系统软件设图 4 1.3.3 部分复杂函数流程图 52 系统仿真62.1 仿真软件62.2 仿真结果73 结论73.1 本课程设计的主要特点及贡献73.2 改善建议73.3 自我体会8参考文献9附录 101 单片机定时闹钟程序源代码 102 仿真软件Proteus ISIS使用方法简单介绍203.1 本课程设计的主要特点及贡献71 系统设计1.1 实验箱主要组件本课程设计使用的是河海大学常州校区刘玉宏老师设计的单片机课程实验箱中的“基础型实验”部分。该部分主要由单片机最小系统,LED数码管显示部分,外部中断控制部分,独立式与行列式键盘按键输入部分,串行口通信部分,蜂鸣器与继电器等部分组成。详细电路图见图1。图1 实验箱“基础型实验”部分电路图单片机最小系统部分由内含FLASH ROM的STC89C52RC,EA接高电平;各并行口都加了10K的上拉电阻;晶振为11.0592M。设置了上电复位和手动复位。LED数码管显示部分由4位一体的数码管LED1、单个数码管LED2和8个独立的发光二极管L1L7组成,都是共阴结构并联在一起接在单片机的P0口上。LED1用于完成LED动态显示,用于本课程设计的时间显示,各个位选线为P2.4P2.7,段码由P0口输出。行列式和独立式键盘按键输入部分主要由P2.0-P2.3为行,P2.4-P2.7为列构成的4*4行列式键盘,K20-K27构成的独立式按键构成。本课程设计中使用K20-K27构成的独立式按键,分别接在P2.0-P2.7上,当按键按下时,对应的口线输入0,同时相应的LED点亮。蜂鸣器部分采用9012三极管驱动,其基极接到RD端,当RD端为低电平时,三极管导通,蜂鸣器响,否则关断。串行口通信部分主要由USB转URAT电路构成,本课程设计中由此部分完成PC机与单片机的串行口通信,同时PC机的USB口同时承担给实验板供电的任务。实验箱“基础型试验”其他电路部分介绍略,“基础型实验”部分实物图见图2。图2 实验箱“基础型实验”部分实物图1.2 系统框图及说明本课程设计中的基于52单片机的定时闹钟系统主要由单片机最小系统模块,数码管译码和显示模块,键盘控制模块,串口通信模块,蜂鸣器模块等组成,系统框图见图3,其中箭头表示数据传送的方向。52单片机数码管显示 键盘控制 串口通信图3 单片机定时闹钟系统框图1.3 系统软件设计1.3.1 C51编程基础由于本课程设计硬件模块主要依靠刘玉宏老师设计的单片机实验箱,所以本课程设计的重点放在在定时闹钟的软件设计上。本课程设计的系统软件设计采用C语言,C语言是一种通用的程序设计高级语言,其代码利用率高,数据类型及运算符丰富,并具有良好的程序结构,适用于各种应用的程序设计,是目前使用较为广泛的单片机编程语言。使用C语言对单片机进行编程具有以下优点:(1) C51管理内部寄存器和存储器的分配,编程时,无需考虑不同存储器的寻址和数据类型等细节问题。(2) 程序由若干函数组成,具有良好的模块化结构。(3) 有丰富的子程序库可以直接使用,从而减少用户编程的工作量。(4) C语言和汇编语言可以交叉使用,提高开发效率。本课程设计采用的C语言编译器为Keil C51,该编译器以其代码紧凑和使用方法方便的特点优于其他编译器。Keil C51开发单片机程序的大致步骤为:输入源程序,新建工程,工程详细设置,源程序编译到目标代码文件等。编译完成后通过少些软件和串口,可以将代码烧进单片机内部的FLASH程序存储器内。1.3.2 系统软件设计框图单片机定时闹钟系统由多个函数构成,其中包括主函数,初始化函数,延时函数,键盘扫描函数等,图4为单片机定时闹钟软件系统各个函数框图。图4 单片机定时闹钟软件系统各个函数框图初始化函数延时函数显示子函数时间子函数键盘扫描函数时间加1函数时间减1函数闹铃子函数串口通信函数数码管扫描与显示键盘扫描与控制 主 函 数1.3.3 部分复杂函数流程图键盘扫秒函数相对比较复杂,同时该函数也本课程设计中相对较为重要的一个函数,在设计中,我们使用到了四个按键,分别是K20、K21、K22、K23,其功能分别是,K21为调整时间/回复计时模式控制键,K20为调时/调闹钟时间模式控制按键,K22与K23分别为时间调整中加1与减1功能按键。通过四个按键的配合使用,可以完成停止计时,修改时间,显示闹钟时间,修改闹钟时间等功能。键盘扫描函数设计流程图如图5,同时图5也可以作为单片机定时闹钟实现功能操作的流程图。图5 键盘扫描函数流程图另外在设计中,我们增加了一个新的功能,即通过串口在PC机上设定时间和闹钟,具体由程序中的串口通信函数实现。利用PC上的串口调试助手软件向单片机一次性传送4个十六进制数依次作为调整时间的小时,调整时间的分,设定闹钟的小时,设定闹钟的分。系统中串口通信函数的流程图见图6。图6 串口通信函数流程图2 系统仿真2.1 仿真软件图 7 单片机定时闹钟的Proteus ISIS仿真图为了更好的验证系统软件设计的正确性,我们使用了Proteus ISIS软件对系统进行了仿真。我们使用Proteus ISIS绘制了与实验向“基础型实验”部分相同的电路图,将使用Keil编译后的hex加载进入了单片机里面,结合仿真结果调整源代码,最终实现了设计要求的全部功能。图7为我们根据本课程设计的要求结合实验箱绘制的仿真图。2.2 仿真结果通过软件仿真和对源代码的调整,我们实现以下功能:1、 四个LED数码管从左到右显示“时时-分分”,无小数点,使用24小时计时制。2、 使用K20、K21、K22、K23、可以调整时间,设定闹钟时间,具体使用方法为:系统复位前,按一次K20,可以显示目前所设定的闹钟时间;第一次操作时,按一次K21,停止计时,此时按一次K20,分位显示“99”,可以使用K22和K23调整分位的时间,此时再按一次K20,时位显示“99”,可以使用K22和K23调整时位的时间,此时再按K20,分位显示“88”,可以使用K22和K23设定闹钟分位的时间,再按下K20,时位显示“88”,可以使用K22和K23设定闹钟时位的时间。调整时间和设定闹钟完成后,再按下一次K21,恢复计时。第一次操作以后每次按K21两下进入调整时间和设定闹钟模式,再按K21一下恢复计时。3、 闹钟时间到时间到时,蜂鸣器发出“滴滴滴”闹铃声,另外,每一个整点蜂鸣器会发出“滴”的整点报时声。4、 可以通过串口在PC上设定时间和闹钟。利用PC机上的软件串口调时助手可以和单片机定时闹钟系统进行通信。向单片机传送“03300430”四个十六进制数以后,则此时钟时间为“03:30”,设定的闹钟时间为“04:30”,所以传送的四个十六进制数分别为“时间时位时间分位闹钟时位闹钟分位”,需要注意的是,想单片机传送的是十六进制数而不是十进制数,在传送时应预先把时间调整为十六进制数。3 结论3.1 本课程设计的主要特点及贡献本课程设计主要特点是利用C51编程实现基于单片机的定时闹钟,C51编程时本课程设计的核心和关键,如何编程实现定时闹钟的基本功能,如何修改和完善程序源代码,如何使源代码做到简洁可读性和可移植性强,等等都是我们在课程设计中关注的问题;本课程设计另外一个特点是利用仿真软件对单片机的定时闹钟程序进行了仿真,本次课程设计使用Proteus ISIS软件进行了仿真,学习仿真软件的使用方法也是我们课程设计中很重要的一个步骤。本课程设计主要完成了基于单片机的定时闹钟的设计,对学习和掌握单片机C语言编程有一定帮助,为日后深入学习单片机打下了一定的基础。3.2 改善建议本课程设计中还有一些需要改善的方面:1、 按键只有四个,部分按键功能及操作过于复杂,在实际使用过程中不是特别的方便;2、 定时闹钟系统的稳定性有待提高,特别是对于用户的误操作处理能力不够强;3.3 自我体会本通过本次课程设计,我学习到了很多,也收获了很多。总结如下:1、 我对单片机的理论知识有了进一步的掌握,特别是对本次课程设计单片机两个比较核心的硬件扩展部分,即单片机的外接键盘,外接显示器的原理和实际应用有了熟练地理解和掌握。2、 我对单片机的C语言编程有了更深刻的认识和更扎实的掌握,虽然本次编写的源代码只有不到500行,只能算是一个很小的程序,但是这不到500行的程序,我们不断修改,不断尝试,对源代码各个模块的函数都有了一个非常深入的掌握。3、 本次课程设计,我们自学了仿真软件Proteus ISIS,我们的自学能力和分析问题解决问题的能力有了提高,我们更是深刻掌握了仿真这种重要的细想方法,为以后进行较大项目的设计与开发奠定了初步的基础。4、 本次课程设计我们还体会到了团队协作精神和创新精神。5、 本次课程设计要感谢刘玉宏老师和刘艳老师对本课程设计的悉心指导。参考文献1 田希晖,薛亮儒.C51单片机技术教程M.北京:人民邮电出版社,20072 杨欣等.电子设计从零开始M.北京:清华大学出版社,2005 3 刘玉宏.单片机实验和课程设计任务书Z附录1 单片机定时闹钟程序源代码#include /头文件#include#define uchar unsigned char/宏定义#define uint unsigned int/宏定义#define fmq RDsbit key1=P20; /位声明 /MODIFIEDsbit key2=P21;sbit key3=P22;sbit key4=P23;uchar code table=0x3f,0x06,0x5b,/数码管显示的数值0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0xbf,0x86,0xdb,/带小数点的数值0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef;void plus(); /函数声明void minus();void sint();uchar table_16; /定义数组,数组内含有6个数值uchar table_26;uchar shi=1,fen=1,miao=30; /显示初始值uchar shi1,fen1,miao1,shi2,fen2,miao2,shi3,fen3,miao3;/定义全局变量uchar flag,flag1,flag2,cnt,cnt1,count;/定义全局变量void delay(uchar i) /延时函数,用于动态扫描数码管 uchar x,y; for(x=i;x0;x-) for(y=110;y0;y-);void init() /初始化函数 TMOD=0X21; /工作方式1 TH0=(65536-50000)/256; /定时时间为:50ms TL0=(65536-50000)%256; ET0=1; /打开定时器 EA=1; /开总中断 TR0=1; /启动定时器 SCON = 0x50; /0101 0000 SM1SM2=10,方式二 REN=1允许接受 (串口初始化) TH1 = 0xFD; TR1 = 1; /启动T/C1 ES = 1; void display() /显示子函数,用于显示时间数值 uchar i,j; table_10=miao%10; /分离秒的各位与十位 table_11=miao/10; table_12=fen%10+11; /分离分的各位与十位 table_13=fen/10; table_14=shi%10+11; /分离时的各位与十位 table_15=shi/10; j=0x7f; /从秒到时的扫描 for(i=2;i6;i+) P2=j; P0=tabletable_1i;/显示数值 delay(10); j=_cror_(j,1);/循环右移 void display_1() /显示子函数,用于显示定时时间 uchar i,j; table_20=miao2%10; /以下含义同上 table_21=miao2/10; table_22=fen2%10+11; table_23=fen2/10; table_24=shi2%10+11; table_25=shi2/10; j=0x7f; for(i=2;i=20) /判断是否到一秒 flag=0; /到了,则标志位清零 miao+; /秒加1 if(miao=60) /判断秒是否到60s miao=0;/到了,则清零 fen+; /分加1 if(fen=60) /以下含义同上/MODIFIED fen=0; shi+; if(shi23) shi=0; void key_scan() /键盘扫描子函数 uchar i; /定义局部变量 if(key1=0)/判断key1是否按下 while(!key1) /防止掉显 if(cnt=0) display(); if(cnt=3|cnt=4) display_1(); if(cnt=1&(cnt1=0|cnt1=2) display_1();if(cnt=2&(cnt1=0|cnt1=2) display();cnt=0; if(cnt1=1&(cnt=1|cnt=2) display(); cnt+; /记下按键key1按下的次数 cnt=cnt%5; if(cnt=1&cnt1=1) /以下含义同上 fen1=fen; fen=99; for(i=0;i100;i+) display(); fen=fen1; if(cnt=2&cnt1=1) shi1=shi; shi=99; for(i=0;i100;i+) display(); shi=shi1; if(cnt=3&cnt1=1) fen1=fen2; fen2=88; for(i=0;i100;i+) display_1(); fen2=fen1; if(cnt=4&cnt1=1) shi1=shi2; shi2=88; for(i=0;i59) fen=0; if(cnt=2) shi+; if(shi23) shi=0; if(cnt=3) fen2+; if(fen259) fen2=0; if(cnt=4) shi2+; if(shi223) shi2=0; void minus() /减1子函数 if(cnt=1) fen-; if(fen=255) fen=59; if(cnt=2) shi-; if(shi=255) shi=23; if(cnt=3) fen2-; if(fen2=255) fen2=59; if(cnt=4) shi2-; if(shi2=255) shi2=23; void clock() /闹铃子函数 if(cnt1!=1&miao=0&miao3) if(fen2=fen) /是,在判断分是否相等 if(shi2=shi) /是,再判断时是否相等 flag1=0; /是,则标志位,flag1清零 while(!(flag1=10) /判断flag1是否到20 fmq=0; /没有,则,继续驱动蜂鸣器响,时间约为:1s shijian(); /调用时间子函数 display(); /调用显示子函数 fmq=1;/关闭蜂鸣器flag1=0;while(!(flag1=10) /判断flag1是否到20 fmq=1; /继续驱动蜂鸣器停,时间约为:1s shijian(); /调用时间子函数 display(); /调用显示子函数 fmq=1; if(cnt1!=1&fen=0&table_11=0)if(table_10=0)fmq=0;if(table_10=1)fmq=1;if(table_10=2)fmq=0;if(table_10=3)fmq=1;void main() init();/调用初始化子函数 while(1) key_scan(); /调用键盘扫描子函数 shijian(); /时间子函数 clock(); /闹钟子函数 /显示子函数 if(cnt=0) display(); if(cnt=3|cnt=4) display_1(); if(cnt=1&(cnt1=0|cnt1=2) display_1();if(cnt=2&(cnt1=0|cnt1=2) display();cnt=0; if(cnt1=1&(cnt=1|cnt=2) display(); void time0() interrupt 1 /定时器0 TH0=(65536-50000)/256; /初值50ms TL0=(65536-50000)%256; flag+; /标志位 flag1+; void sint(void) interrupt 4 unsigned char temp; flag2+;flag2=flag2%4; if(RI&flag2=1) RI=0; temp=SBUF; shi=temp; if(RI&flag2=2) RI=0; temp=SBUF; fen=temp; if(RI&flag2=3) RI=0; temp=SBUF; shi2=temp; if(RI&flag2=0) RI=0; temp=SBUF; fen2=temp; if(TI) TI=0; 2 仿真软件Proteus ISIS使用方法简单介绍2.1 简介Proteus软件是一款强大的单片机仿真软件,对于单片机学习和开发帮助极大。Proteus ISIS是英国Labcenter公司开发的电路分析与实物仿真软件。它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和数字集成电路,包括单片机。在单片机课程中我们主要利用它实现下列功能:1、绘制硬件原理图,并设置元件参数。2、仿真单片机及其程序以及外部接口电路,验证设计的可行性与合理性,为实际的硬件实验做好准备。3、如有必要可以利用它来设计电路板。总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,可以实现从构想到实际项目完成全部功能。2.2 界面介绍双击桌面上的ISIS 7 Professional图标或者单击屏幕左下方的“开始”“程序”“Proteus 7 Professional” “ISIS 7 Professional”,出现如图8所示屏幕,表明进入Proteus ISIS集成环境。图8 Proteus ISIS集成环境进入之后的界面类似如图9 所示。图中已经标注各个部分的作用,我们现在就使用软件提供的功能进行工作。图9 ISIS主窗口2.3 简单项目设计过程1、建立新项目启动软件之后,首先,新建一个项目:点击菜单:FileNew Design,如图10所示,即可出现如图11所示的对话框,以选择设计模板。一般选择A4图纸即可,点击OK,关闭对话框,完成设计图纸的模板选择,出现一个空白的设计空间。 图10 新设计 图11选模板这时设计名称为 UNTITLED (未命名),你可以点击菜单 filesave design 来给设计命名。也可以在设计的过程中任何时候命名。2、调入元件在新设计窗口中,点击对象选择器上方的按钮P(如图12所示),即可进入元件拾取对话框,如图13所示。图12 调入元件图13 查找元件在图13所示的对话框左上角,有一个Keywords输入框,可以在此输入要用的元件名称(或名称的一部分),右边出现符合输入名称的元件列表。我们要用的单片机是AT89C52,输入AT89C,就出现一些元件,选中AT89C52,双击,就可以将它调入设计窗口的元件选择器。在Keywords中重新输入要用到的元件,比如LED,双击需要用的具体元件,比如LED-YELLOW,调入。继续输入,调入,直到够用。点击OK,关闭对话框。以后如果需要其他元件,还可以再次调入。3、设计原理图3-1放置元件在对象选择器中的元件列表中,单击所用元件,再在设计窗口单击,出现所用元件的轮廓,并随鼠标移动,找到合适位置,单击,元件被放到当前位置。至此,一个元件放置好了。继续放置要用的其他元件。3-2移动元件如果要移动元件的位置,可以先右击元件,元件颜色变红,表示被选中,然后拖动到需要的位置放下即可。放下后仍然是红色,还可以继续拖动,直到位置合适,在空白处单击鼠标左键,取消选中。3-3移动多个元件如果几个元件要一起移动,可以先把它们都选中,然后移动。选中多个元件的方法是,在空白处开始,点击左键并拖动,出现一个矩形框,让矩形框包含需要选中的元件再放开,就可以了(参看图14)。如果选择的不合适,可以在空白处单击,取消选中,然后重新选择。图14 选中多个元件移动元件的目的主要是为了便于连线,当然也要考虑美观。3-4连线就是把元件的引脚按照需要用导线连接起来。方法是,在开始连线的元件引脚处点击左键(光标接近引脚端点附近会出现红色小方框,这时就可以了),移动光标到另一个元件引脚的端点,单击即可。移动过程中会有一根线跟随光标延长,直到单击才停住(图14)。(a 画线开始) (b 划线中) (c 画线完毕)图14
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2021学年辽宁省沈阳市郊联体高一下学期期末考试地理试题
- 小学四年级多位数乘除法400题
- 学校爱国卫生建设工作计划
- 儿童蛀牙伤害大
- 命题作文“释放”写作指导及佳作
- 《白血病的规范化疗》课件
- 《加油站HSE管理》课件
- 《龙蟠长城模板》课件
- 汽车工程师的工作总结
- 化工行业销售业绩总结
- 电影放映设备日常维护保养规程
- TSHZSAQS 00255-2024 食葵病虫害防治技术规范
- 食材配送消防安全应急预案
- 《供应链管理》期末考试复习题库(含答案)
- 招标文件范本江苏版
- 人教版高中地理选择性必修1第一章地球的运动单元检测含答案
- 【人民日报】72则金句期末评语模板-每页6张
- 2024年海峡出版发行集团有限责任公司招聘笔试冲刺题(带答案解析)
- 人民调解卷宗规范化制作说明
- 眼视光学理论和方法智慧树知到期末考试答案2024年
- 内镜下脑肿瘤切除手术
评论
0/150
提交评论