单片机定时器中断-秒表设计
- 格式:pdf
- 大小:273.53 KB
- 文档页数:5
单片机综合实验报告题目: (项目四) 秒表班级:17班姓名:罗应武学号: K031241721一、实验内容应用AT89C51的定时器设计一个2位的LED数码显示作为“秒表”:显示时间为00~99s,每秒自动加1,设计一个“开始”键,按下“开始”键秒表开始计时,一个“暂停”键,按下去时暂停计时,使秒表停留在原先的计时。
设计一个“复位”键,按下“复位”键后,秒表从0开始计时。
二、实验电路及功能说明⒈ 电源:⑴ VCC - 芯片电源,接+5V;⑵ VSS - 接地端;注:用万用表测试单片机引脚电压一般为0v或者5v,这是标准的TTL电平。
但有时候在单片机程序正在工作时候测试结果并不是这个值而是介于0v-5v之间,其实这是万用表的响应速度没这么快而已,在某一个瞬间单片机引脚电压仍保持在0v或者5v。
⒉ 时钟:XTAL1、XTAL2 - 晶体振荡电路反相输入端和输出端。
⒊ 控制线:控制线共有4根,⑴ ALE/PROG:地址锁存允许/片内EPROM编程脉冲① ALE功能:用来锁存P0口送出的低8位地址② PROG功能:片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。
⑵ PSEN:外ROM读选通信号。
⑶ RST/VPD:复位/备用电源。
① RST(Reset)功能:复位信号输入端。
② VPD功能:在Vcc掉电情况下,接备用电源。
⑷ EA/Vpp:内外ROM选择/片内EPROM编程电源。
① EA功能:内外ROM选择端。
② Vpp功能:片内有EPROM的芯片,在EPROM编程期间,施加编程电源Vpp。
⒋ I/O线80C51共有4个8位并行I/O端口:P0、P1、P2、P3口,共32个引脚。
P3口还具有第二功能,用于特殊信号输入输出和控制信号(属控制总线)5. P3口第二功能P30 RXD 串行输入口P31 TXD 串行输出口P32 INT0 外部中断0(低电平有效)P33 INT1 外部中断1(低电平有效)P34 T0 定时计数器0P35 T1 定时计数器1P36 WR 外部数据存储器写选通(低电平有效)P37 RD 外部数据存储器读选通(低电平有效)说明:P3^4,P3^5,P3^6三个引脚分别接清零开关,停止开关和复位开关,P0口和p2口跟七段数码管相连,用来向七段数码管来发送数据。
基于51单片机秒表的程序设计1.设计目的:(1)利用单片机定时器中断和定时器计数方式实现秒、分定时。
(2)通过LED显示程序的调整,熟悉8155与8051,8155与LED的接口技术,熟悉LED动态显示的控制过程。
(3)通过键盘程序的调整,熟悉8155与矩阵式键盘的接口技术,熟悉键盘扫描原理。
(4)通过阅读和调试简易秒表整体程序,学会如何编制含LED动态显示、键盘扫描和定时器中断等多种功能的综合程序,初步体会大型程序的编制和调试技巧。
2.设计步骤与要求(1)要求:以8位LED右边2位显示秒,左边6位显示0,实现秒表计时显示。
以4×4矩阵键盘的KE0、KE1、KE2等3键分别实现启动、停止、清零等功能。
(2)方法:用单片机定时器T0中断方式,实现1秒定时;利用单片机定时器1方式3计数,实现60秒计数。
用动态显示方式实现秒表计时显示,用键盘扫描方式取得KE0、KE1、KE2的键值,用键盘处理程序实现秒表的启动、停止、清零等功能。
(3)软件设计:软件整体设计思路是以键盘扫描和键盘处理作为主程序,LED动态显示作为子程序。
二者间的联系是:主程序查询有无按键,无按键时,调用二次LED动态显示子程序(约延时8ms)后再回到按键查询状态,不断循环;有按键时,LED动态显示子程序作为按键防抖延时被连续调用二次(约延时16ms),待按键处理程序执行完后,再回到按键查询状态,同时兼顾了按键扫描取值的准确性和LED动态显示的稳定性。
秒定时采用定时器T0中断方式进行,60秒计数由定时器1采用方式3完成,中断及计数的开启与关闭受控于按键处理程序。
由上述设计思路可设计出软件流程图如图1.1所示。
(5)程序编制:编程时置KE0键为“启动”,置KE1键为“停止”,置KE2键为“清零”,因按键较少,在处理按键值时未采用散转指令“JMP”,而是采用条件转移指令“CJNE”,每条指令后紧跟着一条无条件跳转指令“AJMP”,转至相应的按键处理程序,如不是上述3个按键值则跳回按键查询状态。
单片机课程设计_基于单片机的数字秒表设计在当今科技迅速发展的时代,电子设备的应用无处不在,其中数字秒表作为一种常见的计时工具,具有广泛的应用场景,如体育比赛、科学实验、工业生产等。
本次课程设计旨在基于单片机技术实现一个数字秒表,通过对硬件电路的设计和软件程序的编写,掌握单片机系统的开发流程和方法,提高实践动手能力和解决问题的能力。
一、设计要求1、能够实现秒表的启动、暂停、复位功能。
2、计时精度达到 001 秒。
3、能够通过数码管显示计时结果。
二、系统方案设计1、硬件设计单片机选型:选用常见的 STC89C52 单片机作为核心控制器,其具有性能稳定、价格低廉、易于编程等优点。
显示模块:采用 8 位共阴极数码管作为显示器件,通过动态扫描的方式实现数字的显示。
按键模块:设置三个独立按键,分别用于启动、暂停和复位操作。
时钟模块:使用单片机内部的定时器/计数器产生精确的时钟信号,实现计时功能。
2、软件设计主程序:负责系统的初始化、按键扫描和计时处理等。
中断服务程序:利用定时器中断实现 001 秒的定时,更新计时数据。
三、硬件电路设计1、单片机最小系统包括单片机芯片、晶振电路和复位电路。
晶振频率选择 12MHz,为单片机提供时钟信号。
复位电路采用上电复位和手动复位相结合的方式,确保系统能够可靠复位。
2、显示电路将 8 位数码管的段选引脚通过限流电阻连接到单片机的 P0 口,位选引脚通过三极管连接到单片机的 P2 口。
通过动态扫描的方式,依次点亮每个数码管,实现数字的显示。
3、按键电路三个按键分别连接到单片机的 P10、P11 和 P12 引脚,采用低电平有效。
当按键按下时,相应引脚的电平被拉低,单片机通过检测引脚电平的变化来判断按键的操作。
四、软件程序设计1、主程序流程系统初始化后,进入主循环。
在主循环中,不断扫描按键状态,如果检测到启动按键按下,则启动计时;如果检测到暂停按键按下,则暂停计时;如果检测到复位按键按下,则将计时数据清零。
单片机秒表课程设计1. 引言秒表是一种常用的计时工具,可以用来测量时间的精确度。
在本课程设计中,我们将使用单片机来设计一个简单的秒表。
本文档将详细介绍该秒表的设计思路、硬件和软件实现以及测试结果。
2. 设计思路我们的设计目标是实现一个简单的秒表,包括计时、暂停和复位功能。
我们将采用基于单片机的设计,使用定时器和中断来实现计时。
具体的设计思路如下:•使用微控制器作为核心控制单元,我们选择XXXX型号的单片机。
•使用定时器模块来计时,通过设置定时器的计数频率来控制计时的精确度。
•使用外部中断按钮来控制计时的开始、暂停和复位操作。
•使用LED显示屏来显示计时结果。
3. 硬件设计3.1 硬件连接在硬件设计方面,我们需要将单片机与其他外部设备进行连接。
具体的连接方式如下:•将定时器模块的输出引脚连接到单片机的计时输入引脚。
•将外部中断按钮连接到单片机的中断输入引脚。
•将LED显示屏的控制引脚连接到单片机的输出引脚。
3.2 硬件组成本设计所需要的硬件组成如下:•单片机:XXXX型号微控制器•定时器模块•外部中断按钮•LED显示屏4. 软件设计4.1 主程序框架主程序的框架如下:#include <reg51.h>// 定义全局变量和标志位// 定时器中断函数// 外部中断中断函数// 主程序入口void main() {// 初始化定时器和中断// 循环检测按钮状态,并执行相应操作}4.2 定时器中断函数定时器中断函数用于实现计时功能,其主要逻辑如下:1.获取当前的计数值,并进行相关处理。
2.更新LED显示屏上的计时数据。
4.3 外部中断函数外部中断函数用于响应按钮的按压操作,其主要逻辑如下:1.判断按钮的按下类型,根据不同的按压类型执行相应的操作(开始、暂停或复位)。
2.根据操作类型更新相应的标志位。
4.4 功能函数除了定时器中断函数和外部中断函数之外,还可以编写一些功能函数来实现计时、暂停和复位等功能。
单片机秒表实验报告
实验目的:
使用单片机设计并实现一个秒表,能够精确计时。
实验原理:
单片机秒表的设计采用外部中断的方式进行计时。
当按下计时开始按钮时,单片机开始计时,并将计时结果显示在数码管上。
当按下计时停止按钮时,单片机停止计时,并将计时结果保存下来。
实验材料:
1. 单片机开发板
2. 4位数码管
3. 开始按钮
4. 停止按钮
5. 连接线
实验步骤:
1. 将4位数码管连接到单片机的相应引脚上。
2. 将开始按钮连接到单片机的外部中断引脚上。
3. 将停止按钮连接到单片机的外部中断引脚上。
4. 编写程序,设置外部中断的中断服务函数。
5. 在中断服务函数中实现计时功能,将计时结果显示在数码管上。
6. 在主函数中初始化单片机,开始计时。
7. 测试实验是否正常工作。
实验结果:
经过测试,单片机秒表实验正常工作。
当按下开始按钮时,数码管开始计时,实时显示计时结果。
当按下停止按钮时,数码管停止计时,并将计时结果保存下来。
实验总结:
通过本实验,我掌握了使用单片机设计秒表的方法和步骤,加深了对单片机的理解和应用。
同时,我还学会了使用外部中断进行计时,并将计时结果显示在数码管上。
这对于我今后的学习和实践有着重要的指导意义。
单片机预习报告--------------秒表一、题目分析利用单片机内部定时/计数器和中断功能,实现分、秒、十分之一秒的正计时和倒计时功能,并将计时时间通过六位数码管实时动态显示出来。
倒计时模式中可通过键盘上的按键分别对分、秒进行定时设定,在计时过程中,可通过相应按钮进行暂停、开始,从而实现了六位倒计时秒表功能。
二.系统总体设计与框图系统框图如图下图所示。
该过程是:利用单片机8051实现计数功能,按键开关 K4按下,切换定时与计时。
定时范围在0到99分,计时范围在0到99.99.秒。
首先通过检测按键K4,来确定系统工作什么模式,计时模式有开始,暂停,复位3种功能,倒计时模式有,置数,开始,暂停,复位功能。
系统总体设计与框图三.解决方案:初始化为何种状态,开关是否按下,显示是定时状态还是计时状态。
若为定时状态,。
用6个共阴数码管LED显示起显示时间,采用动态显示的方法,P2.4、P2.5、P2.6、P2.7作为位选信号,P0口输出选段码。
键盘为独立式按键,分别接在P3.2、P3.3、P3.4、P3.5上。
K1为设置/启动功能键。
按下时,系统进入时间设置;再按下,系统启动。
K2为倒计时时间十位数设定键,按下时十位数字在0到9的范围。
K3倒计时个位数设定键,按下时,个位数字在0到9的范围。
K4为复位键。
K5为定时与计时的切换键,按下切换到计时状态,不按为定时状态。
P3.5连接发光二极管状态指示,系统时间设为定时状态熄灭,倒计时状态闪烁。
P3.6输出控制信号驱动蜂鸣器,倒计时时间到,蜂鸣器响。
开始正计时,正计时结束,蜂鸣器再响,程序结束。
四.各模块方案1.计时模式开始计时:利用外部中断1与定时中断1进行开始功能与计时功能暂停计时:利用外部中断关闭时实现暂停功能硬件复位:利用电容的冲电与放电特性实现硬件复位。
实现方法:用8051单片机做一个最小系统,计数器的复位功能通过单片机的硬件复位来实现。
秒表的显示用数码管显示,秒表的秒计数和循环通过程序控制单片机的输出来显示在数码管上。
用定时器中断设计秒表用数码管显示用定时器中断设计秒表用数码管显示//此秒表有时分秒和毫秒位,最多可以记小时,有暂停和继续计时功能,独立键盘上key1为暂停和继续键,key3为复位和开始计时键//由于ms中断时间很短,所以如果中断和显示延迟关系处理不好,秒表走时不准,应注意#include<reg52.h>#define uchar unsigned char#define uint unsigned intuchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};uchar codetable1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef }; //时分秒的个位显示后带小数点uchar ms,s,m,h,count,count1;sbit k1=P3^0;sbit k3=P3^2;void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void displays(uchar temp) //数码管动态显示秒位函数{uchar shi,ge,i;i=0;shi=temp/10;ge=temp;P0=0xef;P1=table[shi];delay(1); //必须要有延迟,动态扫描,为了不影响整个秒表八位数的扫描速率提高显示效果,延迟又不要太高,ms比较合适P0=0xdf;P1=table1[ge];i=0;delay(1);}void displayms(uchar temp) //数码管动态显示毫秒位函数{uchar shi,ge,i;i=0;shi=temp/10;ge=temp;P1=table[shi];delay(1);P0=0x7f;P1=table[ge];i=0;delay(1);}void displaym(uchar temp) //数码管动态显示分位函数{uchar shi,ge,i;i=0;shi=temp/10;ge=temp;P1=table[shi];delay(1);P0=0xf7;P1=table1[ge];i=0;delay(1);}void displayh(uchar temp) //数码管动态显示小时位函数{uchar shi,ge,i;i=0;shi=temp/10;ge=temp;P1=table[shi];delay(1);P0=0xfd;P1=table1[ge];i=0;delay(1);}void keyscan() //键盘扫描函数{if(k1==0){delay(5);if(k1==0) //检测k1确实被按下防抖动 {while(!k1); //检测松手delay(1); //检测确实松手while(!k1);if(count==1)TR0=0; //暂停定时器if(count==2){TR0=1; //定时器继续计时 count=0;}}}if(k3==0){delay(5);if(k3==0){count1++;while(!k3);delay(1);while(!k3);if(count1==1) //复位秒表{TR0=0;ms=0;s=0;m=0;h=0;}if(count1==2) //重新开始计时 {TR0=1;count1=0;}}}}void main(){TMOD=0x01;EA=1;ET0=1;TR0=1;TH0=(65536-10000)/256; //设定定时器初值TL0=(65536-10000)%6; //12M晶振时ms数为while(1){keyscan();displays(s); //数码管动态扫描秒位显示 displayms(ms); //数码管动态扫描毫秒位显示displaym(m); //数码管动态扫描秒分显示 displayh(h); //数码管动态扫描秒小时显示}}void timer0() interrupt 1 //中断服务程序{TH0=(65536-10000)/256;TL0=(65536-10000)%6;ms++;if(ms==100) //定时器中断次为s{ //把这部分放在中断中,能减少程序执行时间对中断时间的影响ms=0;s++;if(s==60){s=0;m++;}if(m==60){m=0;h++;}if(h==24) {h=0; }}}。
51单片机秒表程序设计1. 简介秒表是一种用于测量时间间隔的计时器,常见于体育比赛、实验室实验等场合。
本文将介绍如何使用51单片机设计一个简单的秒表程序。
2. 硬件准备•51单片机开发板•LCD液晶显示屏•按键开关•连接线3. 程序流程3.1 初始化设置1.设置LCD液晶显示屏为8位数据总线模式。
2.初始化LCD液晶显示屏。
3.设置按键开关为输入模式。
3.2 主程序循环1.显示初始界面,包括“00:00:00”表示计时器初始值。
2.等待用户按下开始/暂停按钮。
3.如果用户按下开始按钮,则开始计时,进入计时状态。
4.如果用户按下暂停按钮,则暂停计时,进入暂停状态。
5.在计时状态下,每隔1毫秒更新计时器的数值,并在LCD液晶显示屏上显示出来。
6.在暂停状态下,不更新计时器的数值,并保持显示当前数值。
3.3 计时器控制1.定义一个变量time用于存储当前的计时器数值,单位为毫秒。
2.定义一个变量running用于标记计时器的状态,0表示暂停,1表示运行。
3.定义一个变量start_time用于存储计时器开始的时间点。
4.定义一个变量pause_time用于存储计时器暂停的时间点。
5.在计时状态下,每隔1毫秒更新time的值为当前时间与start_time的差值,并将其转换为小时、分钟、秒的表示形式。
6.在暂停状态下,保持time的值不变。
3.4 按键检测1.检测按键开关是否被按下。
2.如果按键被按下,判断是开始/暂停按钮还是复位按钮。
3.如果是开始/暂停按钮,并且当前处于计时状态,则将计时状态设置为暂停状态,并记录暂停时间点为pause_time;如果当前处于暂停状态,则将计时状态设置为运行状态,并记录开始时间点为当前时间减去暂停时间的差值。
4.如果是复位按钮,则将计时器数值重置为0,并将计时状态设置为暂停。
4. 程序代码示例#include <reg51.h>// 定义LCD控制端口和数据端口sbit LCD_RS = P1^0;sbit LCD_RW = P1^1;sbit LCD_EN = P1^2;sbit LCD_D4 = P1^3;sbit LCD_D5 = P1^4;sbit LCD_D6 = P1^5;sbit LCD_D7 = P1^6;// 定义按键开关端口sbit START_PAUSE_BTN = P2^0;sbit RESET_BTN = P2^1;// 定义全局变量unsigned int time = 0; // 计时器数值,单位为毫秒bit running = 0; // 计时器状态,0表示暂停,1表示运行unsigned long start_time = 0; // 开始时间点unsigned long pause_time = 0; // 暂停时间点// 函数声明void delay(unsigned int ms);void lcd_init();void lcd_command(unsigned char cmd);void lcd_data(unsigned char dat);void lcd_string(unsigned char *str);void lcd_clear();void lcd_gotoxy(unsigned char x, unsigned char y);// 主函数void main() {// 初始化设置lcd_init();while (1) {// 显示初始界面lcd_clear();lcd_gotoxy(0, 0);lcd_string("00:00:00");// 等待用户按下开始/暂停按钮while (!START_PAUSE_BTN && !RESET_BTN);// 判断按钮类型并处理计时器状态if (START_PAUSE_BTN) {if (running) { // 当前处于计时状态,按下按钮将进入暂停状态 running = 0;pause_time = time;} else { // 当前处于暂停状态,按下按钮将进入计时状态running = 1;start_time = get_current_time() - pause_time;}} else if (RESET_BTN) { // 复位按钮按下,重置计时器time = 0;running = 0;}}}// 毫秒级延时函数void delay(unsigned int ms) {unsigned int i, j;for (i = ms; i > 0; i--) {for (j = 110; j > 0; j--);}}// LCD初始化函数void lcd_init() {lcd_command(0x38); // 设置8位数据总线模式lcd_command(0x0C); // 显示开,光标关闭lcd_command(0x06); // 光标右移,不移动显示器lcd_command(0x01); // 清屏}// 向LCD发送指令函数void lcd_command(unsigned char cmd) {LCD_RS = 0;LCD_RW = 0;LCD_EN = 1;LCD_D4 = cmd >> 4 & 1;LCD_D5 = cmd >> 5 & 1;LCD_D6 = cmd >> 6 & 1;LCD_D7 = cmd >> 7 & 1;delay(1);LCD_EN = 0;LCD_D4 = cmd >> 0 & 1;LCD_D5 = cmd >> 1 & 1;LCD_D6 = cmd >> 2 & 1;LCD_D7 = cmd >> 3 & 1;delay(1);LCD_EN = 0;}// 向LCD发送数据函数void lcd_data(unsigned char dat) { LCD_RS = 1;LCD_RW = 0;LCD_EN = 1;LCD_D4 = dat >> 4 & 1;LCD_D5 = dat >> 5 & 1;LCD_D6 = dat >> 6 & 1;LCD_D7 = dat >> 7 & 1;delay(1);LCD_EN = 0;LCD_D4 = dat >> 0 & 1;LCD_D5 = dat >> 1 & 1;LCD_D6 = dat >> 2 & 1;LCD_D7 = dat >> 3 & 1;delay(1);LCD_EN = 0;}// 向LCD发送字符串函数void lcd_string(unsigned char *str) {while (*str) {lcd_data(*str++);delay(5);}}// 清屏函数void lcd_clear() {lcd_command(0x01);}// 设置光标位置函数void lcd_gotoxy(unsigned char x, unsigned char y) {unsigned char addr;if (y == 0)addr = x | (0x80 + y);else if (y == 1)addr = x | (0xC0 + y);lcd_command(addr);}5. 总结本文介绍了使用51单片机设计一个简单的秒表程序。
基于51单片机的秒表设计1.概述秒表是我们日常生活中常用到的工具,主要用于对一较短的时间进行准确计时,至少有启动、暂停和清零的功能。
本次秒表的设计,应用了单片机的定时、中断和LED动态扫描显示等功能。
对于定时,需要对计数初值、工作方式和控制寄存器进行初始化;对于中断,需要编好中断服务程序并返回到相应位置;本次设计中用到了8155芯片,主要是用到了它的串口。
对于设计,不是简单的功能叠加,而要考虑到整个程序的运行,使之连贯的完成任务。
2.引言基于单片机的定时与控制装置在诸多行业都有着广泛的应用,电子秒表的设计就是一个典型的例子。
在单片机电子秒表的设计电路中,除了基本的单片机系统外,还需要外部的控制设备和显示装置。
3.设计方案及原理3.1系统功能描述(1)用开关控制控制秒表的启动、停止和复位(2)用七段数码管的高2位显示分钟数,低2位显示秒数。
3.2系统分析与设计(1)系统分析:一个完整的电子秒表电路就是一个单片机的最小系统,该系统由键盘输入电路、单片机、晶振和复位电路和LED显示电路四个方面构成。
(2)设计方案:定时器/计数器0以工作方式1进行125毫秒定时8次为1秒;用中断方式进行秒数和分钟数的累加并把计时送到相应的显示缓冲单元;用LED 动态扫描显示秒和分钟数;用条件跳转命令JB,外接开关K0、K1对秒表的启动、暂停、继续计时和复位进行控制。
(3)设计原理①计数初值的计算:时钟计时的最小单位是秒,但使用单片机的定时器/计数器进行定时,即使按方式1工作,其最大定时时间也只有113毫秒。
因此可以把定时器的定时时间定为125毫秒,这样计数溢出8次即得到1s。
fosc=6MHZ,定时125毫秒,设初值为X,则(216-X)×2=125000,故X=3036=0BDCH。
②采用中断方式进行溢出次数的累计,计满8次得到秒计时。
③从秒到分的计时是通过累加和数值比较实现的。
④秒表显示和显示缓冲区:秒表时间在4位数码管上进行显示,为此在内部RAM中要设置显示缓冲区,共4个地址单元,从右向左依次存放分、秒的数值。