




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 现代电子系统设计综合实习绪论单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。51单片机是各单片机中最为典型和最有代表性的一种。本设计使用12MHZ晶振与单片机AT89C51相连接,以AT89C51芯片为核心,采用动态扫描方式显示,通过使用该单片机,加之在显示电路部分使用HD74LS373驱动电路,实现在4个LED数码管上显示时间,通过4个按键进行调时、设置、复位等功能,在实现各功能时数码管进行相应显示。软件部分用C语言实现,分为显示、延迟、调时、复位等部分。通过软硬件结合达到最终目的。从而到达学习、设计、开发软、硬件的能力。电子时钟是采用数字
2、电路实现对日期、时、分、秒,数字显示的计时装置,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表的报时功能。 电子钟的时钟具有可选的24h(小时)或12h(小时)的计时方式,显示时、分、秒;具有快速校准当前时、分、秒的功能;能设置起闹时刻、响闹时间,具有人工止闹功能,止闹后不再重新操作,将不再发生起闹等。本次实习的主要内容是基于51系列单片机,结合任务书要求以及自我创新编程设计出电子时钟的某些功能,并自己亲手设计出电路以及在焊好的电路板上进行运行,进行硬件调试,呈现设计结果。关键字:AT80C
3、51芯片;LED数码管;电子时钟;按键扫描;硬件调试目 录1 实习目的12 实习内容22.1 主要内容23设计过程33.1 PROTEUS软件33.2硬件部分33.2.1STC89C52单片机介绍33.3功能设计流程43.4 模块功能53.4.1 按键扫描模块53.4.2 数码管显示模块63.4.3 闹钟模块83.5电路板焊接84 硬件调试104.1 调试结果105 实习总结12参考文献13附录A 电路板原理图14附录B 元器件清单15附录C 电子时钟模块原理图17附录D 电子时钟源程序181 实习目的这次课程计通过对51系列单片机的学习、应用,以AT80C51芯片为核心,辅以必要的电路,设计
4、了一个简易的电子时钟电路,并亲手将自己所设计出来的电路板焊接出来,它由5V直流电源供电,通过数码管能够准确显示时间,调整时间,并进行闹钟设置。为实现定时控制以及对外界事件进行计数,在单片机应用系统中,常需要用到实时时钟和计数器。还要进行单片机软件编程,目的是为了提高学生的软件编程和系统设计能力,整个设计系统包括两个部分,硬件及软件部分,硬件部分已经制作成功,学生需要掌握其原理和焊接相应的元器件,掌握元器件的辨别和元器件的作用以及应用场所即可,另外对所焊接的电路进行仔细的检查,判断是否有焊接错误的地方或者短路的地方,对出现的异常情况要能够根据现象判别原因,并具备解决问题的能力,从而切实提高学生的
5、硬件电子电路的分析、判断能力。 程序的编写是本次实习的重要环节,学生要完成的软件编程任务主要包括以下四点:熟悉Keil C51编程平台及相关编程软件;编写、调试键盘扫描子程序并进行软硬件联调;编写、调试数码管动态扫描程序并进行软硬件联调;电子钟设(包括键盘、时钟、显示等)。电子钟要求设计一个简单的单片机编程设计,要求电子钟软件程序必须具备键盘扫描、数码管显示、时钟以及闹钟功能。 通过实习,使同学们更加深入地理解了实习期间作用各种芯片的功能,以及引脚的作用,同时加深了对于主要芯片的应用的认识。本次实习旨在锻炼学生各方面的能力,提升自身的竞争力,加深对所学内容的理解,强化动手能力和实践精神。 2
6、实习内容 2.1 主要内容 本课题的主要内容是采用单片机实现一个简单的带闹钟定时功能的电子时钟,通过这个实习进一步加深C语言程序设计、单片机原理及应用等相关课程中的理论知识,熟练掌握单片机的编程、调试和应用系统的开发。 具体任务要求:1、显示“时.分”进行显示,例如“12.18”,其中小数点每秒闪烁一次。2、能够校正时间的时和分,按键分为5个功能键(1)设定键:在计时模式时,按下此键时停止计时,进入设置状态,并切换到分钟的设置状态,再按一次切换到小时的设置状态,每按下一次完成时.分设置的切换,用点亮时.分个位的数码管小数点表示分或秒处于设置状态。在闹钟时间设定状态时,按下此键同样进入设置状态,
7、完成分、秒设置的切换。(2)递增键:在设置状态时,按一次递增键,被设置的分钟数字或时钟数字增1,持续按下数字自动增1。(3)递减键:在设置状态时,按一次递减键,被设置的分钟数字或时钟数字减1,持续按下数字自动增1。(4)计时键:在设置状态或闹钟时间设定状态时,按下此键则单片机切换到计时的显示模式,按照新的时.分设置值进行计时。如果已经在计时状态则此键无效。(5)闹钟键:在计时模式时,按下此键则单片机切换到闹钟时间设定状态的显示模式。等待“设定键”、“递增键”、“递减键”来设定分钟和秒钟。3、当计时到闹钟设定时间,用发光二极管闪烁,十秒钟后结束闪烁,正常计时。3设计过程3.1 PROTEUS软件
8、PROTEUS是英国Labcenter Electronic公司研发的EDA。PROTEUS不仅是摸拟电路、数字电路、模数混合电路的设计与仿真平台,更是目前世界上最先进的、最完整的多种型号单片机(微控制器)应用系统的设计与仿真平台。它真正实现了在计算机上完成从原理图设计与电路设计、电路分析与仿真、单片机代码级调试与仿真、系统测试与功能验证到形成PCB的完整的电子设计、研发过程。主要由ISIS电路设计与仿真平台、ProSPICE模数混合仿真器、VSM单片机系统协同仿真和ARES PCB设计构成。PROTEUS还有众多的虚拟仪器(示波器、逻辑分析仪等)、信号源;还有高级图表仿真ASF。它们提供了检
9、测、调试、分析的手段。3.2硬件部分 3.2.1STC89C52单片机介绍 STC89C52单片机是由深圳宏晶公司代理销售的一款MCU,是由美国设计生产的一种低电压、高性能CMOS 8位单片机,片内含8kbytes的可反复写的FlashROM和256bytes的RAM,2个16位定时计数器。 STC89C52单片机内部主要包括累加器ACC(有时也简称为A)、程序状态字PSW、地址指示器DPTR、只读存储器ROM、随机存取存储器RAM、寄存器、并行I/O接口P0P3、定时器/计数器、串行I/O接口以及定时控制逻辑电路等。这些部件通过内部总线联接
10、起来,构成一个完整的微型计算机。其管脚图如图1所示。图1 STC89C52单片机管脚结构图3.3功能设计流程 根据题目的要求,需要实现如下几个方面的功能。(1)计时功能:要实现计时功能则需要使用定时器来计时,通过设置定时器的初始值来控制溢出中断的时间间隔,再利用一个变量记录定时器溢出的次数,达到定时1 秒中的功能。然后,当计时每到1 秒钟后,倒计时的计数器减1。当倒计时计数器到0 时,触发另一个标志变量,进入闪烁状态。(2)显示功能:显示倒计时的数字要采用动态扫描的方式将数字拆成“十位”和“个位”动态扫描显示。如果处于闪烁状态,则可以不需要动态扫描显示,只需要控制共阴极数码管的位控线,实现数码
11、管的灭和亮。(3)键盘扫描和运行模式的切换:主程序在初始化一些变量和寄存器之后,需要不断循环地读取键盘的状态和动态扫描数码管显示相应的数字。根据键盘的按键值实现设置状态、计时状态及闹钟模式的切换。电子时钟设计原理框图如下所示(设计源程序见附录C):设置键计时状态 计时键闹钟键 设置键设置状态(处于设置分的状态)闹钟设置状态计时键递增&递减键增一减一设置键设置时的状态图2 程序设计总体流程框图3.4 模块功能3.4.1 按键扫描模块本次实习所用单片机包含的为矩阵式键盘,又称行列式键盘。用I/O口线组成行、列结构,按键设置在行列的交点上。4*4的行列结构可构成16个键的键盘,无键按下时各行
12、、列线彼此相交而不相连,一般使之处于高电平状态;当有按键按下时,则与其相连的行线、列线相连,一般使之处于低电平状态。由行、列线的点平状态可以识别唯一与之相连的按键。此次编程用STC芯片上的P2口扫描读取键盘上我们所需的仅5个键盘值。 扫描获取键值程序如下:unsigned char scan_key() unsigned char a,t,b; b=255; a=0xef; P2=a; t=P2 & 0x0f; /列 switch(t) case 0x0e:b=1;/P2.0列down break; case 0x0d:b=2;/P2.1列down break; case 0x0b:b
13、=3;/P2.2列down break; case 0x07:b=4;/P2.3列down break; a=0xdf; P2=a; t=P2 & 0x0f; /列 switch(t) case 0x0e:b=5;/P2.0列down break; return b;3.4.2 数码管显示模块 所有数码管通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示。将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接
14、收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。本次编程用到四个数码管,分别显示时的十位和个位、分的十位和个位,用P3.4-P3.7口分别控制四个数码管的显示。数码管显示模块程序如下:void led_show(unsigned int u,unsigned int v,unsigned int w) unsigned char i;P3=0xff;i=u/10;/暂存十位P0=led_seg_codei;P3=0x7f;delay(100); /延时P3=0xff;
15、i=u%10;/暂存个位P0=led_seg_codei;if(w=1) P0=P0&0x7f;else P0&=0xFF;P3=0xbf;delay(100); /延时P3=0xff;i=v/10;/暂存十位P0=led_seg_codei;P3=0xdf;delay(100); /延时P3=0xff;i=v%10;/暂存个位P0=led_seg_codei;P3=0xef;delay(100); /延时P3=0xff; 3.4.3 闹钟模块蜂鸣器发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的。因此需要一定的电流才能驱动它,单片机IO口输出的电流较小,其TT
16、L电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路。程序中通过改变单片机对应IO口输出波形的频率,就可以调整控制蜂鸣器音调,产生各种不同音色、音调的声音。另外,改变其占空比,也可以控制蜂鸣器的声音大小。它有两种驱动方式,即用PNP或NPN三极管电流放大电路驱动。因此,我们可以通过程序控制IO口输出的电平来使蜂鸣器发出声音和关闭,从而实现各种可能音响的产生。 闹钟模块编程如下:void alarm() deng=1; speak=1;if(sec<=nsec+10) if(banmiao=1) deng=1; speak=1;else deng=0;speak=0;else den
17、g=1;speak=1; 3.5电路板焊接运用所学知识识别元器件,并动手在已画好线路的电路板上将元器件焊接进去,使电路板正常工作。对所焊接的电路进行仔细的检查,判断是否有焊接错误的地方或者短路的地方,对出现的异常情况根据现象判别原因,并解决问题。下图为焊接好后的电路板:图3 电路板4 硬件调试4.1 调试结果连接电脑,将源程序烧录到STC芯片中,开启电源,调试程序,检查结果显示是否正常,如有错误,及时修改源程序,直到调试结果正确。图4 设置状态 图5 计时状态5 实习总结两周的实习结束了,有很多的心得体会,有关于单片机的,也有关于模电数电等基本电子基础的。因为单片机知识已经很久没复习,刚拿到任
18、务书的时候,不知道如何着手,后来通过对书本的回顾,加深了对单片机的记忆。有些知识会迁移和联系模电数电。课堂教学考虑到大多数同学的需求,主要强调“基本”基本知识、基本理论、基本方法、基本技能。而这次实习正是为我们提供了一个深入学习、探索的机会,成为课堂教学的有益补充。我们正面临就业问题,这次课设给了我们一个机会去试验。 单片机理论的学习是为课程的设计作准备的,但有时学习的理论也解决不了实践中的问题。实践中获得的知识能让我对单片机的知识有更好的认识和理解。这次的实习中不单单是考察编程能力,还锻炼了我动手调试和解决问题的能力,不过更应该感谢老师们的耐心教导,在遇到问题向老师求教时,老师不仅
19、仅只是解决问题,还会时不时帮我们扩展思维。在焊接电路板的过程中,有一段一插曲,我用了一上午在实验室认识元器件并学习焊接技巧,自己细心的焊接好每个引脚,可在调试的时候出问题了,电路跑不起来,我当时就傻眼了,感觉这预示着我要重新焊一块板子啊,当我请教了老师之后,老师很耐心的给我讲解了这种情况应该如何应对并解决,在老师的帮助下我顺利的找出了问题所在并解决了。虽然此次实践我参考了一些文献资料,没有做到很大程度上的创新,但在对程序的读写过程中我明白了许多。这次课程设计的最大收获是只有把理论用到实践中我们才能真正掌握好所学知识。参考文献1李鸿等单片机原理及应用M湖南大学出版社,20052何立民单片机高级教
20、程-应用与设计M北京航空航天大学出版社,2000,83戴佳51单片机C语言应用程序设计实例精讲M北京:电子工业出版社,20064于京 51系列单片机C程序设计与应用案例M北京:中国电力出版社,20065孙育才. ATMEL新型AT89S52系列单片机及其应用M北京:清华大学出版社, 20056李华MCS-51系列单片机实用接口技术M北京:北京航空航天大学出版社,2000 附录A 电路板原理图附录B 元器件清单名称Part TypeDesignator数量FootprintPCB封装库金属线0欧姆,金属线,单面板中元件面的跳线R21、R23、R24、R25、R27、
21、R28、R29、R30、R31、R32、R33、R34、R35、R3914AXIAL0.4Protel99库色环金属电阻100欧姆R1、R2、R3、R4、R5、R6、R7、R8 、R369500欧姆R14、R15、 R17、 R18、R19 、R2661K欧姆R9、R10、R11、R12、R16、R20610KR13、R22 、R3839PIN排阻1KRP21SIP9Protel99库10KRP1 、RP32电解电容1uE2、E3、E4 、E5、E65RB.1/.2自制10UC1、 E12C_1自制30pC2 、C32RAD0.1Protel99库晶振11.0592MY11XTAL1Prote
22、l99库元件24C01IC21DIP8Protel99库DS18B20三芯座J91DS18B20自制MAX232IC41DIP16Protel99库STC89C52IC11DIP40Protel99库四位共阳极数码管LED5641BRU11LED5641BR自制二极管1N5817D11DIODE-0.4H自制发光二极管红色L1、L2、L3、L4、L5、L6、L7、L8、L11、L14、L15、L20、L2113LED自制黄色L10、L13、L16、L194LED自制绿色L9、L12、L17、L184LED自制三极管9012Q1、Q2、Q3、Q4、Q55PNP3自制5V无源蜂鸣器BELLU71R
23、AD0.3Protel99库自锁开关SW-DPDTS201DIP_KEY6自制轻触开关S1、S2、S3、S4、S5、S6、S7、S8、S9、S10、S11、S12、S13、S14、S15、S16、S2317TP-KEY自制跳线端子3Pin排针S17、S18、S19、S22、J25SIP3Protel99库接插件2芯接线端DC5V_IN1CON2P自制S51_ISPJP11IDC10Protel99库DB9J11DB9/FProtel99库USBJ31USB-A-F-90自制IC座DIP81DIP161DIP401跳线帽4自恢复保险丝1附录C 电子时钟模块原理图 附录D 电子时钟源程序#incl
24、ude "c:Documents and SettingsAdministrator桌面dzsz.prj"sbit deng=P17 ;sbit speak=P10 ;unsigned char data key_val_old,key_val_new; /暂存倒计数的初始值和保存倒计数的当前值unsigned int data T1_cnt=0; /保存定时器溢出次数unsigned int data state_val=0,nao=0; /状态值unsigned char data key_pre,key_cur; /存放当前扫描的键和前一次按下的键值unsigned
25、int banmiao=0;char sec=0,min=0,hour=0;char ksec,kmin,khour; char nsec=10,nmin=0,nhour=0;Char code led_seg_code10=0x3f,0x06,0x05b,0x04f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f;/-延时-void delay(unsigned int i) while(-i); /-获取键值-unsigned char scan_key() unsigned char a,t,b; b=255; a=0xef; P2=a; t=P2 & 0x0f;
26、/列switch(t) case 0x0e:b=1;/P2.0列down break; case 0x0d:b=2;/P2.1列down break; case 0x0b:b=3;/P2.2列down break; case 0x07:b=4;/P2.3列down break; a=0xdf; P2=a; t=P2 & 0x0f; /列 switch(t) case 0x0e:b=5;/P2.0列down break; return b;/-数码管显示-void led_show(unsigned int u,unsigned int v,unsigned int w) unsigne
27、d char i;P3=0xff;i=u/10;/暂存十位P0=led_seg_codei;P3=0x7f;delay(100); /延时P3=0xff;i=u%10;/暂存个位P0=led_seg_codei;if(w=1) P0=P0&0x7f;else P0&=0xFF;P3=0xbf;delay(100); /延时P3=0xff;i=v/10;/暂存十位P0=led_seg_codei;P3=0xdf;delay(100); /延时P3=0xff;i=v%10;/暂存个位P0=led_seg_codei;P3=0xef;delay(100); /延时P3=0xff;/-
28、T1 中断-void timer1() interrupt 3 /T1 中断,250us 中断一次 TH1=(65535-5000)/256; TL1=(65535-5000)%256; T1_cnt+;if(T1_cnt>1999)/如果计数>1999, 计时0.5s banmiao=1;if(T1_cnt>3999) /如果计数>3999, 计时1s T1_cnt=0; sec+; banmiao=0; if(sec=60) sec=0; min+; if(min=60) min=0; hour+; if(hour=24) hour=0; min=0; sec=0; /-闹钟-void alarm() deng=1; speak=1; if(sec<=nsec+10) if(banmiao=1) deng=1; speak=1;else deng=0;speak=0; else deng=1;speak=1; /-主程序-main()TH1=(65535-5000)/256; /*装入计数初值*/ TL1=(65535-5000)%256;s
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论