1、51单片机秒表计时实验设计报告设计题目: 51单片机外扩8155秒表计时 班 级:_计算机091班 姓 名: 学 号: 指导老师: 日 期: 51单片机秒表计时一、设计目的(1)利用单片机定时器中断和定时器计数方式实现秒定时。(2)通过LED显示程序的调整,熟悉单片机与LED的接口技术,熟悉LED动态显示的控制过程。(3)掌握8155芯片的用法及口地址的计算方法。(3)通过阅读和调试简易秒表整体程序,学会如何编制含LED动态显示和定时器中断等多种功能的综合程序。(4)进一步学习单片机开发系统的整个流程。二、设计任务首先以89C51单片机的原理图为背景,利用51单片机的P0、P2口外扩一片815
2、5芯片。将6个共阳极数码管的断码用8155的B口控制,位码用8155的A口控制。其次,用51单片机的P30、P31接两个独立的按键。最后用keil C编写软件,驱动各个外围设备。三、设计需求 利用STC-89C52单片机作为系统核心控制部分,用外围6个数码管、两个独立按键实习秒表计时的功能。当接P30的按键按下时,秒表开始计时,当接P30的按键打开时暂停,当接P31的按键按下时数码管清零。 四、设计材料序号器件数量功能1STC-89C52单片机最小系统板1核心28155芯片1外扩I/O口3共阳极数码管6计时4开关2控制数码管的计时与暂停内容要求一、题目分析,功能要求。(1)要求:利用实训电路板
3、,用6个共阳极数码管实现秒表计时显示。以一个按键开关实现启动、停止,另一个实现清零功能。 (2)方法:用单片机定时器T0中断方式,实现100毫秒定时;利用单片机定时器0方式1计数。(3)实验线路分析:采用实训电路板,其原理图参见附录。6个7段LED数码管分别由8155的A口和B口控制,使数码管显示00-00-00的字样。用一个开关控制数码管的启动与停止,另外一个实现清零。另外再加上一个晶振电路就够成了整个秒表的电路。(4)软件设计:软件整体设计思路是主程序进行初始化,以开关的闭合与打开判断秒表是否开始计时,LED通过定时计算器中断的方式进行显示。当开关闭合,定时器开始计时,并在数码管上显示。当
4、开关打开,定时器停止工作并在数码管上继续显示前一时刻的时间。当另外一个开关闭合时,数码管清零。二、总体方案设计三、硬件设计 电路图如下所示Protues仿真:四、软件设计#include#include#define A8155 XBYTE0XFE21 #define B8155 XBYTE0XFE22#define C8155 XBYTE0XFE23#define K8155 XBYTE0XFE20sbit p30=P30;sbit p31=P31;char code show10=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;char
5、showdata6=0xC0,0xbf,0xC0,0xC0,0xbf,0xC0;char showdata_06=0xC0,0xbf,0xC0,0xC0,0xbf,0xC0;int cnt,i,j;int flag=0,count=0,fen=0;void delay(int ms);void start();void pasue();void clear();void main() TMOD=0x01; TL0=(65536-50000)%256; TH0=(65536-50000)/256; EA=1; ET0=1; TR0=1; P=0xff; K8155=0x03; while(p31
6、=1) A8155=0x01; if(p30=0 & p31=1) start(); else if(p30=1 & p31=1) pasue(); else if(p30=1 & p31=0) clear(); void pasue() for(i=0;i6;i+) B8155=showdatai; delay(5); A8155=A81551; if(A8155=0x40) A8155=0x01; void clear() for(i=0;i6;i+) B8155=showdata_0i; delay(5); A8155=A81551; if(A8155=0x40) A8155=0x01;
7、 void start() cnt=0; while(cnt=2) for(i=0;i6;i+) B8155=showdatai; delay(5); A8155=A81551; if(A8155=0x40) A8155=0x01; if(cnt=2) flag+; if(flag=9) showdata0=showflag; else flag=0; count+; if(count=60) showdata2=showcount%10; showdata3=showcount/10; else fen+; count=0; showdata5=showfen; void delay(int
8、 ms) int j,i; for(j=0;jms;j+) for(i=0;i100;i+);void time0_int(void) interrupt 1TL0=(65536-50000)%256; /TH0=(65536-50000)/256;cnt+; 五、系统集成及测试调试程序(1)调试主程序。主程序运行后,在无任何按键输入时观察有无显示,时钟是否工作,其时、分、秒显示的变化过程是否正确。若运行结果不正确,首先应根据程序运行的实际现象分析判断哪些因素可引起相关故障,再通过调试方法逐一认证和排除。例如:若定时/计数器的初始化出错,则时钟将不能工作;若显示程序出错,则将不能正确显示时钟单
9、元内容;若定时/计数器中断服务子程序出错,则其显示数据的变化规律将不正常。(2)调试子程序。在调试主程序时,必然要调用相关的功能子程序。因此,首先应明确子程序的具体功能,通过对子程序的分析,确定子程序的入口、出口参数及相关标识位的状态,然后在满足入口条件的状态下,设法检查从主程序进入子程序,再由子程序返回到主程序的运行过程。可采用跟踪运行或运行至光标处的方法,检查从主程序进入子程序内部的运行过程,再通过单步运行等方法检查子程序内部的运行情况和返回主程序的过程。通过反复调试,发现并排除软件与硬件存在的各类问题,以满足系统设计的预期目的。六、总结通过本次秒表的实验,各方面又得到了进一步的提高。从整个单片机开发系统的把握上,感觉比以前更具有信心,当然,在焊接、调试的时候也显得更轻松,至少知道从哪些地方入手,怎样判断正确与否。尤其是在调试大型程序时,需先根据要求划分模块,优化结构;再根据各模块特点确定何为主程序,何为子程序,何为中断服务程序,相互间如何调用;再根据各模块性质和功能将各模块细化,设计出程序流程图;最后才根据各模块流程图编制具体程序。调试时应先调主程序,实现最基本最主要的功能,在此基础上再将各模块功能往主程序上堆砌,直至各模块联调、统调,实现全部功能。总的来说,还有很多的不足之处,要在以后的实践中慢慢完善,不断的提高这方面的能力。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1