第一篇:基于51单片机倒计时秒表程序设计
基于51单片机倒计时秒表程序设计
typedef unsigned char UINT8;typedef unsigned int UINT16;code UINT8 SEGMENT[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};code UINT8 SELECT[8] ={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};#define S1 0x0e #define S2 0x0d #define S3 0x0b #define S4 0x07 sbit SPEAK=P3^5;sbit P3_3=P3^3;UINT8 Second;
void timer_10ms(void)//定时器T0定时10ms {
TMOD=0x01;TH0=0xdc;TL0=0x32;TR0=1;//启动T0 } void Delay(UINT16 t){
UINT16 i,j;
for(i=0;i for(j=0;j<114;j++);} void Display(void){ static UINT8 num=0;P2=0xff;switch(num){ case 0: P0=0xff; break; case 1: P0=0xff; break; case 2: P0=0xff; break; case 3: P0=0xff; break; case 4: P0=0xff; break; case 5: P0=0xff; break; case 6: P0=SEGMENT[Second%100/10]; break; case 7: P0=SEGMENT[Second%10]; break;} P2=SELECT[num];num++;num%=8;//if(num==8)num=0;} UINT8 Scankey(void){ UINT8 key;if((P3&0x0f)==0x0f) return(0xff);Delay(10); if((P3&0x0f)==0x0f) return(0xff);key=P3&0x0f;while((P3&0x0f)!=0x0f);return(key);} void main(){ UINT8 i; EA=1; //打开总中断 EX1=0;//打开外部中断1 IT1=1;TH0=0xdc;TL0=0x32;TR0=1;//启动T0 ET0=1; Second=60;while(1) { Display(); Delay(2); i = Scankey(); if(i==S1)//启动 { EA=1; } else if(i == S2)//暂停 { EA=0; } } } } void int_0()interrupt 1 { unsigned char z,aa; for(aa=59;aa>0;aa--){ for(z=0;z<50;z++) { P0=SEGMENT[aa/10]; P2=SELECT[3]; delay(5); //10ms P0=SEGMENT[aa%10]; P2=SELECT[4]; delay(5); //10ms } } } } 青岛理工大学琴岛学院 课程设计报告 课题名称:单片机原理课程设计 学院:机电工程系 专业班级:电气工程及其自动化103班 学号:201002 学生: 指导老师: 青岛理工大学琴岛学院教务处2012年 12月21 日 目 录 第1章 单片机系统硬件电路.................................................................................1 1.1 实习目的..............................................................................................1 1.2 单片机型号及特性..............................................................................1 1.3 单片机开发板......................................................................................2 第2章 单片机应用系统软件.................................................................................5 2.1 STC下载软件......................................................................................5 2.2 Keil软件...............................................................................................5 2.3 外部电路驱动......................................................................................6 第3章 00-59秒计时器设计..................................................................................7 3.1 电路原理图..........................................................................................7 3.2 设计原理..............................................................................................7 3.3 实现方法..............................................................................................8 第4章 实习总结.....................................................................................................9 4.1 实习体会..............................................................................................9 4.2 设计硬件体会......................................................................................9 参考文献.................................................................................................................10 附录1 实物图........................................................................................................11 附录2 系统主要程序............................................................................................12 I 东北石油大学生产实习总结报告 第1章 单片机系统硬件电路 1.1 实习目的 了解单片机最小系统; 了解keilc软件操作,程序下载及调试方法; 掌握单片机外部电路使用; 掌握键盘和数码管显示编程方法; 应用单片机开发板进行实验开发; 1.2 单片机型号及特性 1、AT89S51单片机功能及特点 5l系列单片机中典型芯片(AT89S51)采用40引脚双列直插封装(DIP)形式,内部由CPU,4kB的ROM,256 B的RAM,2个16b的定时/计数器TO和T1,4个8 b的I/O端I:IP0,P1,P2,P3,一个全双功串行通信口等组成。特别是该系列单片机片内的Flash可编程、可擦除只读存储器(E~PROM),使其在实际中有着十分广泛的用途,在便携式、省电及特殊信息保存的仪器和系统中更为有用。5l系列单片机提供以下功能:4 kB存储器;256 BRAM;32条I/O线;2个16b定时/计数器;5个2级中断源;1个全双向的串行口以及时钟电路。空闲方式:CPU停止工作,而让RAM、定时/计数器、串行口和中断系统继续工作。掉电方式:保存RAM的内容,振荡器停振,禁止芯片所有的其他功能直到下一次硬件复位。5l系列单片机为许多控制提供了高度灵活和低成本的解决办法。充分利用他的片内资源,即可在较少外围电路的情况下构成功能完善的超声波测距系统。ATMEL的AT89S51是一种高效微控制器,AT89S2051是它的一种精简版本。AT89S单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。 2、STC89C52单片机功能及特点 STC89C52是一种带8K字节闪烁可编程可檫除只读存储器(FPEROM-Flash Programable and Erasable Read Only Memory)的低电压,高性能COMOS8的微处理器,俗称单片机。该器件采用ATMEL搞密度非易失存储器制造技术制造,与工业 东北石油大学生产实习总结报告 标准的MCS-51指令集和输出管脚相兼容。 STC89C52完全兼容AT89C51 AT89C52 AT89S51 AT89S52 而且加入了更多新功能, 它内部有1280字节的SRAM、8-64K字节的内部程序存储器、2-8K字节的ISP引导码、除P0-P3口外还多P4口(PLCC封装)、片内自带8路8位AD(AD系列),片内自带EEPROM、片机自带看门狗、双数据指针等。 1.3 单片机开发板 1、复位电路 图1-1复位电路图 复位是单片机的初始化操作。其主要功能是把PC初始化为0000H,使单片机从0000H单元开始执行程序。除了进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,也需按复位键重新启动。 RST引脚是复位信号的输入端。复位信号是高电平有效,其有效时间应持续24个振荡周期(即二个机器周期)以上。若使用频率为6MHz的晶振,则复位信号持续时间应超过4us才能完成复位操作。 东北石油大学生产实习总结报告 2、晶振电路 图1-2晶振电路图 简单地说,没有晶振,就没有时钟周期,没有时钟周期,就无法执行程序代码,单片机就无法工作。 对于一个高可靠性的系统设计,晶体的选择非常重要,尤其设计带有睡眠唤醒,往往用低电压以求低功耗的系统,这是因为低供电电压使提供给晶体的激励功率减少,造成晶体起振很慢或根本就不能起振,这一现象在上电复位时并不特别明显,原因是上电时电路有足够的扰动,很容易建立振荡,在睡眠唤醒时,电路的扰动要比上电时小得多,起振变得很不容易,在振荡回路中,晶体既不能过激励,容易振到高次谐波上,也不能欠激励不容易起振,晶体的选择至少必须考虑、谐振频点、负载电容、激励功率、温度特性长期稳定性。 8051的时钟周期即CPU的晶振的振荡频率的振荡周期(频率的倒数)当振荡频率为10MHZ时,振荡周期=1/10MHZ=0.1us机器周期是完成一个基本操作的时间单元,一个机器周期=12个时钟周期,当振荡频率为10MHZ时,机器周期=12x0.1=1.2us 8051的指令周期,指取出并执行一条指令的时间。一般为1-4个机器周期 3、键盘和中断 矩阵式键盘中,行、列线分别连接到按键开关的两端,行线通过上拉电阻接到+5V上。当无键按下时,行线处于高电平状态;当有键按下时,行、列线将导通,此时,行线电平将由与此行线相连的列线电平决定。这一点是识别矩阵按键是否被按下的关键。然而,矩阵键盘中的行线、列线和多个键相连,各按键按下与否均影响该键所在行线和列线的电平,各按键间将相互影响,因此,必须将行线、列线信号配合起来作适当处理,才能确定闭合键的位置。 按键按下时,与此键相连的行线与列线导通,行线在无键按下时处在高电平,显然,如果让所有的列线也处在高电平,那么,按键按下与否不会引起行线电平的变化,因此,必须使所有列线处在低电平,只有这样,当有键按下时,该键所在的东北石油大学生产实习总结报告 行电平才会由高电平变为低电平。CPU根据行平电的变化,便能判定相应的行有键按下。8号键按下时,第2行一定为低电平,然而,第2行为低电平时,能否肯定是8号键按下呢?回答是否定的,因为9、10、11号键按下同样使第2行为低电平。为进一步确定具体键,不能使所有列线在同一时刻都处在低电平,可在某一时刻只让一条列线处于低电平,其余列线均处于高电平,另一时刻,让下一列处在低电平,依次循环,这种依次轮流每次选通一列的工作方式称为键盘扫描。 外部中断请求源:即外中断0和1,经由外部管脚引入的,在单片机上有两个管脚,名称为INT0、INT1,也就是P3.2、P3.3这两个管脚。在内部的TCON中有四位是与外中断有关的。IT0:INT0触发方式控制位,可由软件进行置位和复位,IT0=0,INT0为低电平触发方式,IT0=1,INT0为负跳变触发方式。IE0:INT0中断请求标志位。当有外部的中断请求时,这位就会置1(这由硬件来完成),在CPU响应中断后,由硬件将IE0清0。IT1、IE1的用途和IT0、IE0相同。内部中断请求源TF0:定时器T0的溢出中断标记,当T0计数产生溢出时,由硬件置位TF0。当CPU响应中断后,再由硬件将TF0清0。TF1:与TF0类似。TI、RI:串行口发送、接收中断,中断允许寄存器IE在MCS-51中断系统中,中断的允许或禁止是由片内可进行位寻址的8位中断允许寄存器IE来控制的。 图1-3矩阵式键盘的结构 东北石油大学生产实习总结报告 第2章 单片机应用系统软件 2.1 STC下载软件 图2-1 总体方案原理框图 2.2 Keil软件 目前流行的51系列单片机开发软件是德国Keil公司推出的Keil C51软件,它是一个基于32位Windows环境的应用程序,支持C语言和汇编语言编程,其6.0以上的版本将编译和仿真软件统一为μVision(通常称为μV2)。Keil提供包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,由以下几部分组成:μVision IDE集成开发环境(包括工程管理器①、源程序编辑器②、程序调试器③,C51编译器、A51汇编器、LIB51库管理器、BL51连接/定位器、OH51目标文件生成器以及 Monitor- 51、RTX51实时操作系统。 东北石油大学生产实习总结报告 应用Keil进行软件仿真开发的主要步骤为:编写源程序并保存—建立工程并添加源文件—设置工程—编译/汇编、连接,产生目标文件—程序调试。Keil使用“工程”(Project)的概念,对工程(而不能对单一的源程序)进行编译/汇编、连接等操作。工程的建立、设置、编译/汇编及连接产生目标文件的方法非常易于掌握。首先选择菜单File-New…,在源程序编辑器中输入汇编语言或C语言源程序(或选择File-Open…,直接打开已用其它编辑器编辑好的源程序文档)并保存,注意保存时必须在文件名后加上扩展名.asm(.a51)或.c;然后选择菜Project-New Project…,建立新工程并保存(保存时无需加扩展名,也可加上扩展名.uv2);工程保存后会立即弹出一个设备选择对话框,选择CPU后点确定返回主界面。这时工程管理窗口的文件页(Files)会出现“Target1”,将其前面+号展开,接着选择Source Group1,右击鼠标弹出快捷菜单,选择“Add File to Group „Source Group1‟”,出现一个对话框,要求寻找并加入源文件(在加入一个源文件后,该对话框不会消失,而是等待继续加入其它文件)。加入文件后点close返回主界面,展开“Source Group1”前面+号,就会看到所加入的文件,双击文件名,即可打开该源程序文件。紧接着对工程进行设置,选择工程管理窗口的Target1,再选择Project-Option forTarget „Target1‟(或点右键弹出快捷菜单再选择该选项),打开工程属性设置对话框,共有8个选项卡,主要设置工作包括在Target选项卡中设置晶振频率、在Debug选项卡中设置实验仿真板等,如要写片,还必须在Output选项卡中选中“Creat Hex Fi”;其它选项卡内容一般可取默认值。工程设置后按F7键(或点击编译工具栏上相应图标)进行编译/汇编、连接以及产生目标文件。 2.3 外部电路驱动 1、串口 2、定时器 3、中断 东北石油大学生产实习总结报告 第3章 00-59秒计时器设计 3.1 电路原理图 图3-1电路原理图 3.2 设计原理 在设计过程中我们用一个存储单元作为秒计数单元,当一秒钟到来时,就让秒计数单元加 1,当秒计数达到 60 时,就自动返回到 0,从新秒计数。 对于秒计数单元中的数据要把它十位数和个数分开,方法仍采用对 10 整除和对 10 求余。 东北石油大学生产实习总结报告 在数码上显示,仍通过查表的方式完成。 一秒时间的产生在这里我们采用软件精确延时的方法来完成,经过精确计算得到 1 秒时间为 1.002 秒。 图3-1 程序流程图 3.3 实现方法 系统的软件设计也是工具系统功能的设计。单片机软件的设计主要包括执行软件(完成各种实质性功能)的设计和监控软件的设计。单片机的软件设计通常要考虑以下几个方面的问题: (1)根据软件功能要求,将系统软件划分为若干个相对独立的部分,设计出合理的总体结构,使软件开发清晰、简洁和流程合理; (2)培养良好的编程风格,如考虑结构化程序设计、实行模块化、子程序化。既便于调试、链接,又便于移植和修改; (3)绘制程序流程图;(4)合理分配系统资源; (5)为程序加入注释,提高可读性,实施软件工程; 东北石油大学生产实习总结报告 第4章 实习总结 4.1 实习体会 大约20天的的实习已经结束了,通过这次的实习锻炼了我们的实践能力,也是对我们以后的实际工作能力的具体训练和考察过程。现在是一个高科技的时代,单片机已经成为当今计算机应用中空前活跃的领域。因此对于我们这一专业的同学来说,学好单片机,并正确应用单片机是非常重要的。 此次单片机课程设计,从选题到定稿,从理论到实践,学到了很多的东西。同时不仅巩固了以前所学过的知识,而且还学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,要把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。这次的课程设计还让我学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。更重要的是,我在这一设计过程中,学会了坚持不懈,不轻言放弃。 4.2 设计硬件体会 设计过程,常有一些不如意,但毕竟这是第一次做,难免会遇到各种各样的问题。在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。在整个设计中也培养了我独立工作的能力,树立了对自己工作能力的信心,相信会对今后的学习工作生活有非常重要的影响。而且大大提高了动手的能力,使我充分体会到了在创造过程中探索的艰难和成功时的喜悦。 单片机实习虽然结束了,但通过实习所学到的东西将长久存在。相信这次单片机设计带给我们的严谨的学习态度和一丝不苟的科学作风将会给我们未来的工作和学习打下一个更坚实的基础。 东北石油大学生产实习总结报告 参考文献 [1] 张占松,孙时生,伍言真.电路和系统的仿真实践.北京:科学出版社电路.2000年1月 [2] Akagi H.Kanazawa Y ,Nabe A.Instantaneous reactive power compensators comprising switching devices without energy storage components.IEEE Trans.Ind.Applicat.,1984,20(3).625-630 [3] Peng F Z, Akagi H,A H;Nabae A.A novel harmonic power filter.PESC Record,1988,1151-1159 [4] 朱东起,姜新建,马大铭.无源和有源滤波器构成的并联型综合电力滤波系统.北京:清华大学学报(自然科学版),1999,39(3):49-52 [5] 邓肖粤、胡晓云《EDA在电子技术教学中的应用》 《实验与探索》 2000年12月 [6] 张占松,孙时生,伍言真.电路和系统的仿真实践.北京:科学出版社电路.2000年1月 [7] 郑春龙.Pspice在数模混合电路分析中的应用. 电子技术.1999(12)[8] 纪良文,蒋静坪.机器人超声测距数据的采集与处理.电子技术应用.2001(4) 东北石油大学生产实习总结报告 附录1 实物图 东北石油大学生产实习总结报告 附录2 系统主要程序 #include code unsigned char tab[]={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};// 0-9 unsigned char Shiwei;//定义十位 unsigned char Gewei;//定义个位 void delay(unsigned int cnt){ while(--cnt);} main(){ TMOD |=0x01;//工作在模式1,16位定时 TH0=(65535-45872)/256;TL0=(65535-45872)%256;IE= 0x82;//打开中断 TR0=1; //打开定时开关 while(1) { P0=Shiwei;//显示十位 P1=0xdf; delay(300); //短暂延时 P0=Gewei;//显示个位 P1=0xef; delay(300); } } /* 定时器中断函数 */ 东北石油大学生产实习总结报告 void tim(void)interrupt 1 using 1 { static unsigned char second,count;TH0=(65535-45872)/256;TL0=(65535-45872)%256; count++; if(count==20) { count=0; second++; //秒加1 if(second==60) second=0;Shiwei=tab[second/10];//十位显示值处理 Gewei=tab[second%10];//个位显示处理 } } 东北石油大学生产实习总结报告 本文由lj436436贡献 doc文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。湖南工程学院 课程设计任务书 课程名称: 数字电子技术 题 目:通用倒计时系统 ——A 题 专业班级: 学生姓名: 指导老师: 郭照南 审 批: 班 学号: 任务书下达日期 2009 年 10 月 26 日星期一 设计完成日期 2009 年 11 月 6 日星期五 设计内容与设计要求 一. 设计内容 设计一个适于各类场合的通用倒计时系统,功能 要求如下: 1)计时器的计时间隔为 1S,其递减计数器的模 在 59 分 59 秒至 00 分 01 秒范围内可预置。2)设置 4 个预置按钮,分别用于分个位、分十位 和秒个位、秒十位的预置,预置时通过按钮对相应的 时间位进行递增计数来完成预置。3)倒计时器通过外部功能键使其具有直接复位、启动、暂停/继续等功能; 4)具有显示功能,用 LED 数码管实现; 5)计时数器递减到零时,数码显示器的 LED “00∶ 00”字样发生闪烁(或停止),同时发出警报声。二. 设计要求: 1. 设计思路清晰,给出整体设计框图; 2. 设计各单元电路,给出具体设计思路、电 路图、器件清单; 3. 总电路设计; 4. 安装调试电路; 5. 写出设计报告; 主要设计条件 1. 提供面包板、直流稳压电源、示波器; 2. 提供各种 TTL 集成电路芯片、NE555 定时 器、电阻及电容等; 说明书格式 1. 课程设计报告书封面; 2. 任务书; 3. 说明书目录; 4. 设计总体思路; 5. 单元电路设计; 6. 总电路设计; 7. 设计调试体会与总结; 8. 附录; 9. 参考文献。 进 度 安 排 第一周星期一 上午 安排任务、讲课。星期一 下午 星期四 下午 查资 料、设计(四楼机房)、EWB 设计仿真〈四楼机房〉 星期五开始到第二周星期四 安装调试电路 第二周星期五 调试验收 答辩 地 点:实验楼 403 室 参 考 文 献 《电子技术课程设计》 历雅萍、易映萍编 《电子技术课程设计指导》 彭介华、主编 高等教育出版社 《电子线路设计、实验、测试》 谢自美主编 华中理工出版社。湖南工程学院 课程设计任务书 课程名称: 数字电子技术 题 目:数字秒表 ——B 题 专业班级: 学生姓名: 指导老师: 郭照南 审 批: 班 学号: 任务书下达日期 2009 年 10 月 26 日星期一 设计完成日期 2009 年 11 月 6 日星期五 设计内容与设计要求 一、设计内容: 设计并制作符合以下要求的数字秒表: 1.6 位数码管显示,其中两位显示 min,四位显示 sec。显示分辨率为 0。01s; 2.秒表的最大计时值为 59min59.99sec; 3.设置秒表的复位/启动键,按一下该键启动计时,再按即清 0。依此循环。4.设置秒表的暂行/继续键。启动后按一下暂行,再 按继续。依此循环。 二、设计要求: 1.设计思路清晰,给出整体设计框图; 2.设计各单元电路,给出具体设计思路、电路 图、器件清单; 3.总电路设计; 4.安装调试电路; 5.写出设计报告; 主要设计条件 3. 提供面包板、直流稳压电源、示波器; 4. 提供各种 TTL 集成电路芯片、NE555 定时 器、电阻及电容等; 说明书格式 1.课程设计报告书封面; 2 任务书; 3 说明书目录; 4 设计总体思路; 5 单元电路设计; 6 总电路设计; 7 设计调试体会与总结; 8 附录; 9 参考文献。进 度 安 排 第一周星期一 上午 安排任务、讲课。星期一 下午 星期四 下午 查资 料、设计(四楼机房)、EWB 设计仿真〈四楼机房〉 星期五开始到第二周星期四 安装调试电路 第二周星期五 调试验收 答辩 地 点:实验楼 403 室 参 考 文 献 《电子技术课程设计》 历雅萍、易映萍编 《电子技术课程设计指导》 彭介华、主编 高等教育出版社 《电子线路设计、实验、测试》 谢自美主编 华中理工出版社。 摘要 随着电子技术的发展,电子技术在各个领域的运用也越来越广泛,人对它的认识也逐步加深。秒表计时器秒表计时器常常用于体育竞赛及各种其他要求有较精确时间的各领域中。其中启/停开关的使用方法与传统的机械计时器相同,即按一下启/停开关,启动计时器开始计时,再按一下启/停开关计时终止。而复位开关可以在任何情况下使用,即使在计时过程中,只要按一下复位开关,计时应立即终止,并对计时器清零。本设计就是利用所学到的电子元器件将脉冲源用数码管显示出来,以制承诺简易的秒表。 以单片机为核心,设计一个秒表,具有计时功能,按键有启动计时、数据清零、停止、时间显示。 采用3个LED数码管显示时间,计时范围设置为0~99.9秒,即精确到0.1秒,用按键控制秒表的“开始”、“暂停”、“复位”,按“开始”按键,开始计时;按“暂停”按键,系统暂停计时;再按“开始”键,系统继续计时;数码管显示当前计时值;按“复位”按键,系统清零。 目录 一、设计任务.................................................................................................................3 二、设计题目.................................................................................................................3 三、功能分析.................................................................................................................3 四、总体设计.................................................................................................................3 4.1硬件设计...............................................................................................................4 4.1.1 89C51单片机...........................................................................................4 4.1.2晶体振荡电路...........................................................................................5 4.1.3复位电路...................................................................................................6 4.1.4按键电路...................................................................................................7 4.1.5显示电路.................................................................................................8 4.2引脚控制...............................................................................................................9 五、电路原理图...........................................................................................................10 六、程序流程图及程序设计......................................................................................11 6.1程序流程图.........................................................................................................11 6.2程序设计.............................................................................................................12 七、程序仿真...............................................................................................................21 八、心得体会...............................................................................................................22 九、致谢.......................................................................................................................23 十、参考文献...............................................................................................................24 一、设计任务 以单片机为核心,设计一个秒表,具有计时功能,按键有启动计时、数据清零、停止、时间显示。 二、设计题目 秒表的设计 三、功能分析 采用3个LED数码管显示时间,计时范围设置为0~99.9秒,即精确到0.1秒,用按键控制秒表的“开始”、“暂停”、“复位”,按“开始”按键,开始计时;按“暂停”按键,系统暂停计时;再按“开始”键,系统继续计时;数码管显示当前计时值;按“复位”按键,系统清零。 四、总体设计 本实验利用单片机的定时器/计数器定时和计数的原理,通过采用Proteus仿真软件来模拟实现。模拟AT89C51单片机、LED数码管以及控件来控制秒表的计数以及计时的开启、暂停、继续、与复位。其中有三个数码管来显示数据,两个数码管显示秒(两位),另一个数码管显示十分之一秒,十分之一秒的数码管计数从0~9,满十进一后显示秒得数码管的个位加一,并且十分之一秒显示清零 重新从零计数。同理当个位满十进一后个位也清零重新计数,当计时超过范围(即超过99.9秒)后,所有数码管全部清零从新计数 4.1硬件设计 4.1.1 89C51单片机 MCS-51系列单片机是8位单片机产品,89C51是其中的典型代表,基本模块包括以下几个部分: (1)CPU:89C51的CPU是8位的,另外89C51内部有1个位处理器 (2)R0M:4KB的片内程序存储器,存放开发调试完成的应用程序 (3)RAM:256B的片内数据存储器,容量小,但作用大 (4)I/O口:P0-P3,共4个口32条双向且可位寻址的I/O口线 (5)中断系统:共5个中断源,3个内部中断,2个外部中断 (6)定时器/计数器:2个16位的可编程定时器/计数器 (7)通用串行口:全双工通用异步接收器/发送器 (8)振荡器:89C51的外接晶振与内部时钟振荡器为CPU提供时钟信号 (9)总线控制:89C51对外提供若干控制总线,便于系统扩展 89C51单片机引脚如下图: 4.1.2晶体振荡电路 89C51单片机内部的振荡电路是一个高增益反相放大器,引线XTAL1和XTAL2分别为反相振荡放大器的输入及内部时钟工作电路的输入和来自反相 振荡器的输出,该反相放大器可以配置为片内振荡器。 这里选用51单片机12MHZ的内部振荡方式,电路如下:C2、C3起稳定振荡频率、快速起振的作用。 晶振电路 4.1.3复位电路 采用上电复位,上电后,由于电容充电,使RST持续一段时间的高电平,从而实现上电复位操作。这不仅能使单片机复位,还能是单片机的外围设备同时复位,当程序出现错误时,可以随时使电路复位。 电路图如下: 复位电路 4.1.4按键电路 当按键被按下时,相应的引脚被拉低,经扫描后,获得键值,并执行键功能程序,因此按下不同的按键,将执行不同的功能程序。 电路图如下: 按键电路 4.1.5显示电路 采用3个LED数码管,LED是七段显示器,内部有7个条形发光二极管和1个小圆点发光二极管,根据各管的亮暗组成字符。 在用数码管显示时,有静态和动态两种选择,这里采用LED动态显示,用P0、P1、P2口驱动显示,由于P0口没有上拉电阻,因此P0口需要外接上拉 电阻才能输出高电平,这里使用8个4.7k的电阻作为上拉电阻。 电路图如下: 显示电路 4.2引脚控制 P0.0—P0.7、P2.0—P2.7、P1.0—P1.7对应三个数码管的a、b、c、d、e、f、g段和小数点位;P0控制数码管十位的显示,P2控制数码管个位的现实,P1控制小数点后一问的显示,P3.2、P3.3、P3.4分别接。 五、电路原理图 用Proteus软件画出主电路图如下: 六、程序流程图及程序设计 6.1程序流程图 6.2程序设计 程序的各个组成模块及工作流程描述: (1)秒表的初始化 根据程序流程图,先进行秒表的初始化,即:①将I/O口P3全写一,为秒表的控制输入做好准备;②将数码管全部置零,使其处于秒表计时的初始状态;③将工作寄存器R0~R2以及30H初始化,留待后面的计时程序备用;④将定时器0置于工作方式1,并为其装入计时预置数D8FE(因为程序运行过程中占用的时间会导致一定误差,此为经实物测试之后的修正值),即将定时器定为每10ms溢出;⑤开总中断允许和定时器0中断允许。初始化完成后,即进入之后的按键扫描程序。 (2)按键检测程序 轮流检测开始计时(P3.2)、暂停计时(P3.3)、秒表清零(P3.4)三个按键。若发现有一个按键出现低电平(可能被按下),则延时10ms(调用延时子程序DELAY),延时完成后,若发现低电平消失,则说明该按键实际上未被按下,此时转回按键检测处继续检测;若发现仍然是低电平,则说明此键确实被按下了,此时就跳转至相应的程序标号处,执行相应的功能。 (3)开始计时 若确认“开始计时”键被按下,则跳转至程序标号“RUN”处,将定时器0计时允许控制位TR0置位,则定时器开始运行。此动作完成后,返回按键检测程序,等待操作者的下一次指令。 (4)计时程序 定时器0计时至10ms,溢出,引发中断,程序跳转至定时器0中断服务程序入口000BH处执行。程序跳转至中断服务程序TIME0。由于秒表的最小计时单位是0.1s,即100ms,因此需加入软件计时,使定时器0溢出10次之后才改变数码管的显示状态。因此每来一次中断就将30H中的数加1,若30H中的数没有到10,则给定时器0重新装入预置数,之后中断返回并继续等待中断;到10了,才进入显示程序,改变数码管的显示状态,执行完毕之后中断返回并继续等待中断。 (5)显示程序 将数码管的段选码放在数表TAB中。每次100ms计时完成后,将R0中的值(初值为0)送入A,然后自加1。.若R0中的值没到10,则使用累加器A查表,并将查得的数码管段选码送入毫秒位数码管。之后将30H中的数置零,中断返回。若发现R0中的数到10了,则将R0置零,并转入秒位进位子程序SECOND,向秒位进位,之后,继续照常向毫秒位送数。 在秒位进位子程序SECOND中,由于要用到累加器A,因此先将其推入堆栈保护。将R1中的值(初值为10)送入A,然后自加1。.若R1中的值没到20,则使用累加器A查表,并将查得的数码管段选码送入秒位数码管。若发现R1中的数到20了,则将R1重置为10,并转入十秒位进位子程序SECOND1,向十秒位进位,之后,继续照常向秒位送数。完成后,弹出ACC和PSW,子程序返回。 十秒位进位子程序与秒位进位子程序相似,只是没有向下一位进位的功能。 (6)暂停计时 若确认“暂停计时”键被按下,则跳转至程序标号“PAUSE”处,将定时器0计时允许控制位TR0置零,则定时器暂停运行。此动作完成后,返回按键检测程序,等待操作者的下一次指令。 (7)秒表清零 若确认“秒表清零”键被按下,则跳转至程序标号“STOP”处,将TR0置零,关闭定时器0运行。并且将数码管、工作寄存器、定时器0预置数全部重置,使其处于秒表计时的初始状态。此动作完成后,返回按键检测程序,等待操作者的下一次指令。 (8)延时程序 用于按键延时防抖,延时10ms。 程序清单如下: ORG 0000H;程序开始 AJMP START;跳转到主程序START ORG 000BH;定时器0中断的地址入口 AJMP TIME0;定时器0溢出,跳转到中断程序TIME0 START:;主程序 MOV P3,#0FFH;输入端口P3全写1 MOV P0,#3FH;MOV P1,#3FH; MOV P2,#0BFH;数码管初始化 MOV 30H,#00H;MOV R0,#00H;MOV R1,#0AH;MOV R2,#00H;MOV TMOD,#01H;MOV TH0,#0D8H;MOV TL0,#0FEH;SETB EA;SETB ET0;READ:;L1:JB P3.2,L2;LCALL DELAY;JB P3.2,L1;AJMP RUN;L2:JB P3.3,L3; 工作寄存器初始化 定时器0工作于方式1 定时器0预置数(D8FEH=55550D) 开总中断允许 开定时器0中断允许 读键程序 按键延时防抖 确认计时键被按下,开始/继续计时15 LCALL DELAY;按键延时防抖 JB P3.3,L2;AJMP PAUSE;确认暂停键被按下,暂停计时 L3:JB P3.4,L1;LCALL DELAY;JB P3.4,L3;AJMP STOP;RUN:;SETB TR0;AJMP READ;PAUSE:;CLR TR0;AJMP READ;TIME0:;INC 30H;MOV A,30H; 按键延时防抖 确认清零键被按下,秒表重置 计时键按下,跳转至此 定时器0开始/继续运行 暂停键按下,跳转至此 定时器0溢出,中断,跳转至此16 CJNE A,#0AH,TIME1;30H单元中的值到10了吗?(计时到10毫秒了吗,也就是说,该向毫秒位送数了吗?)MOV DPTR,#TAB;30H中的值到10了,顺序执行 MOV A,R0;INC R0;CJNE R0,#0AH,GET;R0MOV R0,#00H;LCALL SECOND;进位 GET:;MOVC A,@A+DPTR;MOV P1,A;MOV 30H,#00H;TIME1:;MOV TH0,#0D8H;MOV TL0,#0FEH;RETI;中的值到10了吗?(该向秒位进位了吗?) 到了,R0清零,调用进位子程序SECOND,向秒位没到,跳过进位子程序 查表并向数码管毫秒位送数 重置30H单元 给定时器0重新预置数 中断返回 SECOND:;秒位进位子程序 PUSH ACC;PUSH PSW;将ACC和PSW推入堆栈保护 MOV A,R1;INC R1;CJNE R1,#14H,GET1;R1了吗? MOV R1,#0AH;LCALL SECOND1;位进位 GET1:;MOVC A,@A+DPTR;MOV P2,A;POP PSW;POP ACC;PSW,ACCRET;SECOND1:;中的值到20了吗,也就是说,该向十秒位进位到了。R1重置,调用进位子程序SECOND1,向十秒没到,跳过进位子程序 查表并向数码管秒位送数 出栈 子程序返回 十秒位进位子程序 PUSH ACC;PUSH PSW;将ACC和PSW推入堆栈保护 MOV A,R2;INC R2;CJNE R2,#0AH,GET2;R2 MOV R2,#00H;GET2:;MOVC A,@A+DPTR;MOV P0,A;POP PSW;POP ACC;PSWRET;STOP:;MOV P3,#0FFH;MOV P0,#3FH;MOV P1,#3FH; 中的值到10了吗,也就是说,该将此位归零了到了,R2清零 没到,跳过清零程序 查表并向数码管十秒位送数,ACC出栈 子程序返回 清零键按下,跳转至此 吗? MOV P2,#0BFH;数码管清零 MOV 30H,#00H;MOV R0,#00H;MOV R1,#0AH;MOV R2,#00H;CLR TR0;MOV TH0,#0D8H;MOV TL0,#0FEH;AJMP READ;DELAY:;MOV R3,#50D;D1:MOV R4,#100D;D2:DJNZ R4,D2;DJNZ R3,D1;RET;工作寄存器初始化计时器0停止计时定时器0预置数 延时10ms子程序 子程序返回 TAB: DB 06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,3FH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH,0BFH;数码管段选码数表 END;程序结束 七、程序仿真 将以上程序清单导入先前做好的Proteus仿真电路,汇编之后,按 键开始进行仿真。 仿真结果如下: 仿真结果描述: 按“开始”键,秒表开始计时;按“暂停”键,秒表暂停计时;再按“开始”键,秒表继续计时;按“清零”键,秒表清零。 八、心得体会 虽然秒表是一个非常简单的功能,但要在单片机中使用汇编语言来实现这个功能,仍然花了我不少心思。 首先是计时的问题,由于单片机计时器最大只能计时65.5ms,因此要实现毫秒位的变化,我采用了软件计时的方法,单片机只需计时10ms,然后用软件重复10次,即可达到计时100ms的目的。 显示方面,为了使编程简单,我使用了静态显示。不过这使得占用I/O口线过多,而且连线复杂繁琐,为实物的制作带来了不便。在以后的学习和应用中我会努力加深动态扫描显示的理解,争取熟练运用。 根据书本知识,我们一开始只给P0口加上了上拉电阻,但是实物做成后我们发现P1和P2口得输出显示非常暗,初步确定是驱动能力不足的问题后,我们给二者也加上了上拉电阻,结果使得显示正常了。由此我们了解到,实践才是检验真理的唯一标准,有时候书本上的知识需要经过实践的改进,才能运用到实际中。 此次课程设计巩固了我的基础知识,提高了我的应用水平,锻炼了我的动手能力,使我受益匪浅。然而,在吸取经验的同时,我也吃了不少教训。在编程、仿真、焊接方面都走了不少弯路。但是,学则要有所收获,经过此次的锻炼,我在很多方面都已经有所提高,知识也掌握得更加扎实了。 在今后的学习和实践中,我将继续努力钻研,提高自己,争取在学术和记忆上获得更大的进步。 九、致谢 本设计是在李芳老师的悉心指导下完成的,李老师渊博的知识,严谨的治学态度,一丝不苟的工作作风,平易近人的性格都是我学习的楷模。在论文的研究及整理期间,李老师给了我很大的支持和鼓励,才使得论文得以顺利的完成,在此谨向导师表示忠心的感谢和崇高的敬意。 同时还要感谢同学们,他们也给了我很大的支持和帮助。 十、参考文献 1)《微控制器与接口技术》.虞沧.电子工业出版社.2012.10 2)李朝青.单片机原理及接口技术[M].北京:北京航空航天大学出版社.2005.10 3)夏继强.单片机实验北京:北京航空航天大学出版社.2001.4)孙德辉,郑士富.微型计算机控制系统.北京:冶金工业出版社.2002 5)肖洪兵.跟我学用单片机.北京:北京航空航天大学出版社.2002.8 6)陈汝全.实用微机与单片机控制技术.电子科技大学出版社.1995.7 7)王涌.单片机与嵌入式系统应用[J],2002(3):58-61 8)罗亚非.凌阳16位单片机应用基础[M].北京:北京航空航天大学出版社.2003.5 9)李庆.Keil C51 使用详解 V3.0[M].北京:北京理工大学出版 10)李华.MCS-51系列单片机实用接口技术.北京航空航天大学出版社.1993,162-229 11)温钢云,黄道平.计算机控制技术.广州:华南理工大学出版社.2002 12)肖洪兵.单片机应用技术.自编教材 13)孙德辉,郑士富.微型计算机控制系统.北京:冶金工业出版社.2002 14)韩来吉.用 89C51实现急救车优先的交通灯控制系统[J] 15)陈志强,芮延年,城市路口交通灯多级智能控制方法的研究J.2007 16)李广弟.单片机基础.北京:北京航空航天大学出版社.2001,56 17)马忠梅等.单片机的C语言应用程序设计.北京航空航天出版社.1999 18)刘瑞新,单片机原理及应用教程,北京机械工业出版社,2003 19)李传军,单片机原理及应用,河南科技出版社,2006 20)饶庆,89C51单片机课程设计实训教材,北京人民邮电出版社,2003第二篇:单片机课程设计报告多功能秒表
第三篇:实习报告-单片机秒表设计
第四篇:电气07课程设计任务书(倒计时、秒表)
第五篇:基于89C51单片机的秒表课程设计