当前位置:文档之家› 基于89C51单片机的秒表课程设计讲解

基于89C51单片机的秒表课程设计讲解

《单片机技术》课程设计报告题目:基于MCU-51单片机的秒表设计班级:学号:姓名:同组人员:指导教师:王瑞瑛、汪淳2014年6月17日目录1课程设计的目的 (3)2 课程设计题目描述和要求 (3)2.1实验题目 (3)2.2设计指标 (3)2.3设计要求 (4)2.4增加功能 (4)2.5课程设计的难点 (4)2.6课程设计内容提要 (4)3 课程设计报告内容 (4)3.1设计思路 (4)3.2设计过程 (5)3.3 程序流程及实验效果 (6)3.4 实验效果 (13)4 心得体会 (14)基于 MCS-51单片机的秒表设计摘要:单片机控制秒表是集于单片机技术、模拟电子技术、数字技术为一体的机电一体化高科技产品,具有功耗低,安全性高,使用方便等优点。

本次设计内容为以 8051 单片机为核心的秒表,它采用键盘输入,单片机技术控制。

设计内容以硬件电路设计,软件设计和 PCB 板制作三部分来设计。

利用单片机的定时器/计数器定时和计数的原理,用集成电路芯片、LED 数码管以及按键来设计计时器。

将软、硬件有机地结合起来,使他拥有正确的计时、暂停、清零、并同时可以用数码管显示,在现实生中应用广泛。

关键词:秒表;8051;定时器;计数器1 课程设计的目的《单片机应用基础》课程设计是学好本门课程的又一重要实践性教学环节,课程设计的目的就是配合本课程的教学和平时实验,以达到巩固消化课程的内容,进一步加强综合应用能力及单片机应用系统开发和设计能力的训练,启发创新思维,使之具有独立单片机产品和科研的基本技能,是以培养学生综合运用所学知识的过程,是知识转化为能力和能力转化为工程素质的重要阶段。

2 课程设计题目描述和要求2.1实验题目开始时,显示“00.0”,第一次按下按钮后开始从0-99.9s计时,显示精度为0.1s;对用有4个功能按键,第1个按键复位00.0,第2个按键正计时开始按钮,第3个按键复位99.9,第4个按钮倒计时开始。

2.2设计指标了解8051芯片的的工作原理和工作方式,使用该芯片对 LED 数码管进行显示控制,实现用单片机的端口控制数码管,显示分、秒,并能用按钮实现秒表起动、停止、99.9秒、倒计时清零等功能,精确到0.1秒。

要求选用定时器的工作方式,画出使用单片机控制LED 数码管显示的电路图,并实现其硬件电路,并编程完成软件部分,最后调试秒表起动、停止、清零等功能。

2.3设计要求(1)画出电路原理图(或仿真电路图);(2)软件编程与调试;2.4增加功能增加一个“复位 00.0”按键(即清零),一个“暂停”和“开始”按键,一个“复位 99.9” 按键(用来99.9秒倒计时),一个倒计时“逐渐自减”按键。

2.5课程设计的难点单片机电子秒表需要解决三个主要问题,一是有关单片机定时器(一个控制顺序计时,一个控制倒计时)的使用;二是如何实现 LED 的动态扫描显示;三是如何对键盘输入进行编程。

2.6课程设计内容提要本课程利用单片机的定时器/计数器定时和记数的原理,结合集成电路芯片8051、LED 数码管以及实验箱上的按键来设计计时器。

将软、硬件有机地结合起来,使得系统能够正确地进行计时,数码管能够正确地显示时间。

其中本课程设计有四个开关按键:其中key2按键按下去时开始计时,即秒表开始键(同时也用作暂停键),key1按键按下去时数码管清零,复位为“00.0”,key3 按键按下去时数码管复位为“99.9”(用于倒计时),key4 按键按下去则是数码管开始“逐渐自减”倒计时。

3 课程设计报告内容3.1设计思路3.1.1 系统硬件方案设计单片机应用系统由硬件系统和软件系统两部分组成。

硬件系统是指单片机以及扩展的存储器、I\O 接口、外围扩展的功能芯片以及接口电路。

软件系统包括监控程序和各种应用程序。

在单片机应用系统中,单片机是整个系统的核心,对整个系统的信息输入、处理、信息输出进行控制。

与单片机配套的有相应的时钟电路如图3.1所示以及扩展的存储器和 I\O 接口,使单片机应用系统能够运行。

在一个单片机应用系统中,往往都会输入信息和显示信息,这就涉及键盘和显示器。

在单片机应用系统中,一般都根据系统的要求配置相应的键盘和显示器。

配置键盘和显示器一般都没有统一的规定,有的系统功能复杂,需输入的信息和显示的信息量大,配置的键盘 和显示器功能相对强大,而有些系统输入/输出的信息少,这时可能用几个按键和几个 LED 指示灯就可以进行处理了。

在单片机应用系统在中配置的键盘可以是独立键盘,也可能是矩阵键盘。

这里我们选择独立键盘如图3.2所示。

系统硬件结构整体如图3.3所示。

图3.1 时钟电路 图3.2 按键电路图3.3 系统硬件结构框图3.2设计过程3.2.1 系统设计思路及描述该课程设计要求进行计时并在数码管上显示时间,则可利用MCS-51系列单片机的芯片AT89C52的P3.4,P3.5,P3.6,P3.7 作为按键的入口;定时器 T0 作为每 0.1 秒减一的定时器; 定时器 T1 作为每 0.1 秒加一的定时器。

其中“开始”按键当开关由上向下拨时开始计时,此时若再拨“开始”按键则数码管暂停;“清零”按键当开关由上向下拨时数码管清零,此时若再拨“开始”按键则又可重新开始计时。

方框图图3.4所示:图3.4 数字秒表设计导向图3.2.2.课程设计仪器集成电路芯片8051,七段数码管,MCS-51系列单片机微机仿真课程系统中的软件(Keil uvision2),protues仿真软件。

3.3 程序流程及实验效果3.3.1图3.5 主程序流程图图3.6 按键流程图图3.7 显示流程图图3.8 计时流程图3.3.2 源程序及说明#include<reg52.h> //52 系列单片机头文件#define uchar unsigned char //宏定义#define uint unsigned intsbit key1=P3^4; //申明四个按键的锁存端sbit key2=P3^5;sbit key3=P3^6;sbit key4=P3^7;uchar code table[]={ //含有0~9 的数字数组0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7c,0x07,0x7f,0x67};uchar code table2[]={ //含有0~9 的数字数组(带小数点)0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfc,0x87,0xff,0xe7};void delayms(uint); //声明延时函数void display(uchar,uchar,uchar); //声明显示函数void keyscan(); //声明按键函数uchar num1,num2,bai,shi,ge; //变量声明uint num;void main() //主函数入口{TMOD=0x11; //设置TO,T1 定时器TH0=(65536-45872)/256; //装初值11.05992M晶振50ms数为45872TL0=(65536-45872)%256;TH1=(65536-45872)/256;TL1=(65536-45872)%256;EA=1; //开总中断ET0=1; //开启定时器T0 中断ET1=1; //开启定时器T1 中断while(1) //程序停在这里等待中断的发生,这个大循环也是实现数据显示的主体{keyscan(); //三个数码管要选送的数据bai=num/100; //百位shi=(num-100*bai)/10; //十位ge=num-100*bai-shi*10; //个位display(bai,shi,ge); //数码管显示}}void display(uchar bai, uchar shi,uchar ge){P1=0xfe; //位选选中第一个数码管P2=table[bai]; //送段选数据delayms(10); //延时P1=0xff; //关闭位选P1=0xfd; //位选选中第二个数码管P2=table2[shi]; //送段选数据delayms(10); //延时P1=0xff; //关闭位选P1=0xfb; //位选选中第二个数码管P2=table[ge]; //送段选数据delayms(10); //延时P1=0xff; //关闭位选}void delayms(uint xms) //延时子函数{uint i,j; for(i=xms;i>0;i--) //i=xms 即延时约xms 毫秒for(j=110;j>0;j--);}void keyscan(){if(key1==0) //清零{delayms(10); //延时去抖if(key1==0){ while(!key1) //等待按下{TR0=0; //定时器TR0 关闭TR1=1; //定时器TR1 打开num=0; //送数据num=0TR1=0; //定时器TR1 关闭}}}if(key2==0) //暂停和开始{delayms(10);if(key2==0){while(!key2);TR0=0;TR1=~TR1; //每次按下,TR1 的状态时相反的}}if(key3==0) //使计数器显示为60.0{while(!key3);TR0=0;TR1=1;num=999;TR1=0;}if(key4==0) //实现计数器的倒数功能{while(!key4);TR1=0;TR0=~TR0;//TR0=1;}}void T0_time()interrupt 1 //定时器T0,中断序号为1 {TH0=(65536-45872)/256; //重装初值TL0=(65536-45872)%256;num2++;if(num2==2) //如果到了2次,说明0.1秒的时间到{ num2=0; //然后把num2清零重新再计2次num1++;}if(num1==10)num1=0;if(num==0) //当num 自减为0时,重新为60.0,再开始倒计时num=999; //num 逐渐自减num--;}void T1_time()interrupt 3{ TH1=(65536-45872)/256; //重装初值TL1=(65536-45872)%256;num2++;if(num2==2) //如果到了2 次,说明0.1 秒的时间到{ num2=0; //然后把num2 清零重新再计2 次num1++;if(num1==10)num1=0;num++; //num 逐渐自加if(num==999)num=0;//这个数十用来送给数码管显示的,到了60.0后归零}}3.4 实验效果通过最后软件对程序的编译,组建,执行,还有最终生成.hex 文件,把.hex 下载到TX-1C开发板的 STC89C52RC 单片机上的最终效果图如下:(1)开始从“00.0”(2)复位重新从“00.0”(3)暂停功能:(4)及时归零:4 心得体会通过对本次课程的课程设计,使自己深刻的认识到自己的很多不足之处,在实际动手操作能力的不足,在进行程序编程时,自己需要,认真审题,看懂题目的要求!对于软件编程不益太简单或者太难。

相关主题