单片机定时器中断-秒表设计
- 格式: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个地址单元,从右向左依次存放分、秒的数值。
单片机课程设计姓名:***学号:设计课题:秒表指导老师:同组人员:*********设计时间:2009年12月16日一、设计目的1.单片机的基本原理及相关的简单应用。
2.掌握用单片机设计系统的一般步骤。
3.了解LED数码管的基本知识和驱动方法。
4.掌握单片机系统各个组成部分的作用以及分布位置。
5.学会运用单片机的硬件资源。
二、设计要求1、要求设计一个秒表,精度为00.01秒;2、显示位数为4位;3、有启动、停止、清零功能三、设计工具1.PC机一台2.TDN-MI教学实验系统一台(配串行口通讯线)四、元器件4位数码管(1个)、30P瓷片电容(2个)、12M晶振(1个)、12*12键盘(2个)、面包板(1块)、连接线(若干)、10K排阻(1个)五、电路连接1、本系统中“启动/停止”按钮接在外部中断0口(P3.2);2、本系统中“清零”按钮接在RST脚(第9管教);3、本系统的位选通信号接在P1口的低四位;4、本系统的LED数据端口使用的是P0口,由于采用了共阴数码管,且面包板上空间有限,未加扩流三极管,只使用了上拉电阻。
5、为使电路工作更加稳定,加了上电复位电路。
详见下图六、设计原理图1、3641数码管脚位图2、系统电路图七、程序流程图(1)主函数(2)LED动态扫描八、设计程序/************************************************设计题目:秒表设计要求:设计带启动、停止、清零功能的秒表利用4位数码管,显示整数两位和小数两位设计者:何友东付艳娟设计精度:0.01s完成日期:09.12.16*************************************************/#include "reg52.h"#include "intrins.h"//************** PIN CONFIGURE ********************sbit Start_Stop = P3^2; //定义启动/停止按键sbit Clear = P3^3; //定义清零按键sbit Sel_A1 = P1^0; // 定义数码管第一位sbit Sel_B1 = P1^1; // 定义数码管第二位sbit Sel_C1 = P1^2; // 定义数码管第三位sbit Sel_D1 = P1^3; // 定义数码管第四位#define LED P0 //定义LED 数据端口#define DP 0x80 //定义小数点//**************************************************bdata unsigned char flag; //定义标志寄存器sbit Status_Flag = flag^0; //1----计时0----停止sbit Is_KeyS_Hold = flag^1; //定义键盘释放判断标志位//1---未释放0---释放unsigned char xiaoshu1 = 0 , //定义计时的小数部分,第一位xiaoshu2 = 0 , //定义小数部分第二位miao1 = 0 ; //定义计时的整数部分第一位(十位)miao2 = 0 ; //定义整数部分第二位(个位)code unsigned char table[]={0x3f,0x06,0x5b, // 定义0~9 编码0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,};//******************函数声明*************************void init(); //初始化函数void display(); // 数码管显示函数void delay(); //数码管单个显示延时函数void key(); //键盘释放判断操作函数//****************************************************//*********************主函数************************* void main(){init(); //调用初始化函数while(1){key(); //调用键盘操作函数display(); //调用LED动态显示函数}}//********************键盘释放判断操作函数************* void key() //启动停止按钮释放键盘判断{if(Is_KeyS_Hold)if(Start_Stop){Is_KeyS_Hold = 0 ;EX0 = 1 ;}}//****************display()的内部延时函数*************** void delay(){unsigned int i ;for(i = 0; i<300; i++);}//***************LED的动态显示函数********************** void display(){Sel_A1 = 1;Sel_B1 = 1;Sel_C1 = 1;Sel_D1 = 0;LED = table[xiaoshu2];delay(); //显示小数的第二位Sel_A1 = 1;Sel_B1 = 1;Sel_C1 = 0;Sel_D1 = 1;LED = table[xiaoshu1];delay(); //显示小数的第一位Sel_A1 = 1;Sel_B1 = 0;Sel_C1 = 1;Sel_D1 = 1;LED = table[miao2]|DP;delay(); //显示秒的第二位//并显示小数点Sel_A1 = 0;Sel_B1 = 1;Sel_C1 = 1;Sel_D1 = 1;LED = table[miao1];delay(); //显示秒的第一位}//******************外部中断0处理函数************************ void Key_Start_Stop() interrupt 0 //外部中断0 启动停止按钮连接于此{EX0 = 0;Status_Flag = ~ Status_Flag ;Is_KeyS_Hold = 1;if( Status_Flag )TR0 = 1;elseTR0 = 0;}//*******************定时器0中断处理函数****************void time10ms() interrupt 1 //定时器中断延时时间10ms{TL0 = 0XEF;TH0 = 0XD8;TR0 = 1 ; //开定时器xiaoshu2+=1;if(xiaoshu2 == 10) { xiaoshu2 = 0 ; xiaoshu1 += 1;}if(xiaoshu1 == 10) { xiaoshu1 = 0 ; miao2 += 1;}if(miao2 == 10) { miao2 = 0 ; miao1 += 1;}if(miao1 == 10) miao1 = 0; //计数最大值99.99 ,//下一时刻00.00}//*********************系统初始化函数********************void init(){Sel_A1 = Sel_B1 = Sel_C1 = Sel_D1 = 1 ;LED = 0XFF; //关显示Status_Flag = 0; //标志位清零(未计数)xiaoshu1 = xiaoshu2 = miao1 = miao2 = 0 ;//初始化显示00.00ET0 = 1; //定时器0开中断EX0 = 1; //外部中断0开中断EA = 1 ; //开总中断TMOD = 0X01; //定时器0工作方式1TL0 = 0XEF; //延时10ms初始化设置TH0 = 0XD8;TR0 = 0 ; //定时器停止计数}九、实验步骤1.先在电脑上编写程序,然后在试验箱上装载,编译并运行,验证时钟功能是否正确。
51单片机秒表程序设计51单片机秒表程序设计班级:姓名:学号指导老师时间一、课题任务要求用*****设计一个2位LED数码显示“秒表”,显示时间为00~99秒,每秒自动加一。
即数码显示管在原先的计数上快速加一。
二、设计思路1、使用单片机,设计秒表,能显示分分秒秒;2、使用三个按键停止,开始,复位,其中“开始”按键当开关由上向下拨时开始计时,此时若再拨“开始”按键则数码管暂停;“清零”按键当开关由上向下拨时数码管清零,此时若再拨“开始”按键则又可重新开始计时;3、使用液晶或数码管显示;4、使用定时器中断;三、硬件设计1、单片机介绍单片机:*****是一种带4K字节闪存可编程可擦除只读存储器的低电压、高性能CMOS 8位微处理器。
单片机的可擦除只读存储器可以反复擦除1000次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
*****主要特性:与MCS-51 兼容低功耗的闲置和掉电模式4K字节可编程闪烁存储器全静态工作:0Hz-24MHz 寿命:1000写/擦循环数据保留时间:10年三级程序存储器锁定128×8位内部RAM 片内振荡器和时钟电路32可编程I/O线两个16位定时器/计数器5个中断源可编程串行通道管脚说明:VCC:供电电压。
GND:接地。
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
《接口及控制技术》课程设计报告课程设计题目:秒表姓名:专业班级:指导教师:成绩:时间:2010-12-10一、设计要求用AT89C51设计一个2位的LED数码显示作为“秒表”:显示时间为00—99秒,每秒自动加1,另设计一个“开始”键和一个“复位”键。
二、实验原理题目难点在于通过对键盘的扫描对时钟的走时/停止进行控制,项目采用定时器T0作为计时器,每10ms发生一次中断,每100次中断加1s。
在此期间,如“开始”按键按下,程序方将TR0置为1,从而开启中断,时钟开始走时;如“复位”按键按下,程序将TR0置为0,同时将存储时间的变量清零,从而中断停止,并实现复位。
本题目采用专用数码管显示控制芯片MAX7219。
MAX7219是美国MAXIM公司生产的串行输入/输出共阴极显示驱动器,该芯片最多可驱动8位7段数字LED显示器或个LED 和条形图显示器。
其引脚图及引脚功能参见有关参考资料。
三、实验目的1、通过本次课程设计加深对单片机课程的全面认识复习和掌握,对单片机课程的应用进一步的了解。
2、掌握定时器、外部中断的设置和编程原理。
3、通过此次课程设计能够将单片机软硬件结合起来,对程序进行编辑,校验。
四、意义该实验通过单片机的定时器/计数器定时和计数原理,设计简单的计时器系统,拥有正确的计时、暂停、清零功能,并同时可以用数码管显示,在现实生活中应用广泛,具有现实意义。
五、实验内容用AT89C51设计一个2位LED数码显示“秒表”,显示时间为00~99秒,每秒自动加一。
另设计一个“开始”K1按键和一个“复位”K2按键。
按键K1同时具有“暂停”功能。
按键说明:按“开始”K1按键,开始计数,数码管显示从00开始每秒自动加一;再次按K1按键,系统暂停计数,数码管显示当时的计数;按“复位”按键,系统清零,数码管显示00。
六、电路原理仿真图将硬件连线按上图所示连接,该实验要求进行计时并在数码管上显示时间,则可利用DVCC系列单片机微机仿真实验系统中的芯片AT89C51中的P1.0管脚做为外部中断0的入口地址,并实现“开始”按键的功能;将P3.3做为外部中断1的入口地址,并实现“清零”按键的功能.;定时器T0作为每秒加1的定时器。
单片机课程设计报告一、11111111111111111111111111111111111111111222222222231111111111111 111实验题目32654614秒表系统设计——用两个数码管来显示秒表数据,一个显示秒,另一个显示十分之一秒。
二、系统总体功能用两个数码管来显示秒表数据,一个显示秒,另一个显示十分之一秒。
有一个按键来启动秒表的开始和结束。
增加一个清零按钮,计时结束后可以清零。
三、实验目的1、利用单片机定时器/计数器中断设计秒表,从而实现秒、十分之一秒的计时。
2、综合运用所学的《单片机原理与应用》理论知识,通过实践加强对所学知识的理解,具备设计单片机应用系统的能力。
3、通过本次课程设计加深对单片机掌握定时器、外部中断的设置和编程原理的全面认识复习和掌握,对单片机实际的应用作进一步的了解。
4、通过本次试验,增强自己的动手能力。
认识单片机在日常生活中的应用的广泛性,实用性。
四、系统设计方案本实验利用单片机的定时器/计数器定时和记数的原理,通过采用proteus 仿真软件来模拟实现。
模拟利用AT89C51单片机、LED数码管以及控件来控制秒表的计数以及计数的开启/暂停/继续与复位!其中有两个数码管用来显示数据,一个数码管显示秒(两位),另一个数码管显示十分之一秒,十分之一秒的数码管计数从0~9,满十进一后显示秒的数码管的数字加一,并且十分之一秒显示清零重新从零计数。
计秒数码管采用两位的数码管,当计数超过范围是所有数码管全部清零重新计数。
五、试验设计所需硬件(模拟硬件)Atmel89C51单片机芯片一个、LED数码显示管三个,低压电源、开关(按钮)两个、电阻、电容及导线若干。
由于条件限制本实验采用软件模拟硬件系统,采用proteus软件进行模拟设计及调试工作。
图1 七段数码管引脚图图2 Atmel89C51单片机外部引脚图六、试验设计原理图图3 试验设计电路图七、软件设计分析程序流程图:实验程序清单:#include <reg51.H>{sbit sta_end=P3^4;sbit reset=P3^7;unsigned char code table0[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};unsigned char code table1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};/*声明second10用于计数十分之一秒变化,second1用于记录秒的个*/ /*位,second2用于记录秒的十位*/unsigned int second10,second1,second2;bit bdata flag;/*以下是设置延时功能的函数*/void delay(){unsigned char i,j;for(i=90;i>0;i--)for(j=200;j>0;j--);}}/*以下是设置时间的函数*/void setTime(){second10++;if(second10==10) /*当十分之一秒计数到十后从零重新计时*/ {second10=0; /*同时秒计时个位加一*/second1++;if(second1==10) /*当秒计数个位到十后从零重新计时*/ {second1=0;second2++; /*同时秒计时十位加一*/if(second2==6)second2=0;}}}/*以下是向LED管输数据并使之显示的函数*/void dispact(){P3=0xfe;P0=table1[second1];delay();P3=0xfd;P0=table1[second2];delay();P2=table0[second10];/*以下是设置时间函数和输数据函数被此函数调用实现,利用定时器中断*/ /*十分之一秒刷新一次,实现十分之一秒进一*/Timer0 () interrupt 1 using 1{TH0 = (65535 - 50000)/256;TL0 = (65535 - 50000)%256;if(flag)setTime();dispact();}void main(void){TMOD = 0x01;TH0 = (65535 - 50000)/256; /*定时器赋初值*/TL0 = (65535 - 50000)%256;flag = 0;EA = 1; /*cpu开中断*/TR0 = 1; /*利用定时器0*/ET0 = 1; /*外部中断允许*/do{if(!sta_end){if(flag == 0)flag = 1;else flag = 0;}if(!reset) /*复位设置,全部清零*/ {flag = 0;second10 = 0;second1 = 0;second2 = 0;}}while(1);}八、试验设计总结通过这一周的课程设计,我对一些专业知识和电子设计有了更深的了解,同时也尝试着去应用自己的所掌握的知识。
简易秒表制作1子情境内容:制作简易秒表,利用按键构成键盘实现秒表的启动、停止与复位,利用LED数码管显示时间。
2 子情境目标:〔1〕通过简易秒表的制作,进一步熟悉LED数码管与单片机的接口电路〔2〕学习定时/计数器、中断技术的综合运用并会使用简易键盘3 知识点链接独立式按键的使用:图5-49为按键与单片机的连接图。
机械式按键再按下或释放时,由于机械弹性作用的影响,通常伴随有一定时间的触点机械抖动,然后其触点才稳定下来。
其抖动过程如图5-50所示,抖动时间的长短与开关的机械特性有关,一般为5~10ms。
在触点抖动期间检测按键的通与断状态,可能导致判断出错。
即按键一次按下或释放被错误地认为是屡次操作,这种情况是不允许出现的。
为了克服按键触点机械抖动所致的检测误判,必须采取去抖动措施,可从硬件、软件两方面予以考虑。
本子情境中采用软件去抖。
图按键与单片机连接图图按键被按下时电压的变化4 任务步骤4.1 步骤一:PROTEUS电路设计,简易秒表的原理图如图5-51所示。
1、选取元器件①单片机:AT89C51②两位共阴极蓝色数码管:7SEG-MPX2-CC-BLUE③排阻:RESPACK-8④按钮:BUTTON2、放置元器件、放置电源和地、连线、元器件属性设置简易秒表的原理图如图5-51所示,整个电路设计操作都在ISIS平台中进行。
与子情景3相似,故不详述。
图简易秒表的原理图4.2 步骤二:源程序设计与目标代码文件生成〔1〕程序流程图主程序图5-52 秒表流程图〔2〕源程序设计#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit key1=P3^0; //定义"启动"按钮sbit key2=P3^1; //定义"停止"按钮sbit key3=P3^2; //定义"复位"按钮uchar temp,aa,shi,ge;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //共阴极数码管编码void display(uchar shi,uchar ge); //声明显示子函数void delay(uint z); //声明延时子函数void init(); //声明初始化函数void main(){init(); //调用初始化子程序while(1){if(key1==0) //检测"启动"按钮是否按下{delay(10); //延时去抖动if(key1==0) //再次检测"启动"按钮是否按下{while(!key1); //松手检测,假设按键没有释放,key1始终为0,那么!key1始终为1,程序就一直停在此while语句处TR0=1; //启动定时器开始工作}}if(key2==0) //检测"停止"按钮是否按下{delay(10); //延时去抖动if(key2==0) //再次检测"停止"按钮是否按下{while(!key2); //松手检测TR0=0; //关闭定时器}}if(key3==0) //检测"复位"按钮是否按下{delay(10); //延时去抖动if(key3==0) //再次检测"复位"按钮是否按下{while(!key3); //松手检测temp=0; //将变量temp的值清零shi=0; //将十位清零ge=0; //将个位清零TR0=0; //关闭定时器}}display(shi,ge); //调用显示子函数}}void delay(uint z) //延时子函数{uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void display(uchar shi,uchar ge) //显示子程序{P2=0xbf;P0=table[shi];delay(10);P2=0x7f;P0=table[ge];delay(10); //使用动态扫描的方法实现数码管显示}void init() //初始化子程序{temp=0;TMOD=0x01; //使用定时器T0的方式1TH0=(65536-50000)/256;TL0=(65536-50000)%256; //定时50ms中断一次EA=1; //中断总允许ET0=1; //允许定时器T0中断}void timer0() interrupt 1{TH0=(65536-50000)/256;//重新赋初值TL0=(65536-50000)%256;aa++; //中断一次变量aa的值加1if(aa==20) //中断20次后,定时时间为20*50ms=1000ms=1s,将变量temp的值加1{aa=0;temp++;if(temp==60) //秒表到达60s后回零{temp=0;}shi=temp%100/10;ge=temp%10; //别离个位和十位}}4.3 步骤三:PROTEUS仿真加载目标代码文件,双击编辑窗口的AT89C51器件,在弹出属性编辑对话框Program File一栏中单击翻开按钮,出现文件浏览对话框,找到miaobiao.hex 文件,单击“翻开〞按钮,完成添加文件。
实验设计报告设计题目:51单片机外扩8155秒表计时班级:姓名:学号: 0251单片机秒表计时一、设计目的(1)利用单片机定时器中断和定时器计数方式实现秒定时。
(2)通过LED显示程序的调整,熟悉单片机与LED的接口技术,熟悉LED动态显示的控制过程。
(3)掌握8155芯片的用法及口地址的计算方法。
(3)通过阅读和调试简易秒表整体程序,学会如何编制含LED动态显示和定时器中断等多种功能的综合程序。
(4)进一步学习单片机开发系统的整个流程。
二、设计需求利用STC-89C52单片机作为系统核心控制部分,用外围6个数码管、两个独立按键实习秒表计时的功能。
当接P30的按键按下时,秒表开始计时,当接P30的按键打开时暂停,当接P31的按键按下时数码管清零。
三、设计材料序号器件数量功能1 STC-89C52单片机最小系统板 1 核心2 8155芯片 1 外扩I/O口3 共阳极数码管 6 计时4 开关 2 控制数码管的计时与暂停内容要求一、总体方案设计二、硬件设计 电路图如下所示开始I/O 口初始化定时器、中断初始化是否有键按下按键扫描程序P30==0P31==1P31==1Start()Pasue()Clear()是是否否是是 否Protues仿真:三、软件设计#include<reg51.h>#include<absacc.h>#define A8155 XBYTE[0XFE21]#define B8155 XBYTE[0XFE22]#define C8155 XBYTE[0XFE23]#define K8155 XBYTE[0XFE20]sbit p30=P3^0;sbit p31=P3^1;char code show[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82, 0xf8,0x80,0x90};char showdata[6]={0xC0,0xbf,0xC0,0xC0,0xbf,0xC0};char showdata_0[6]={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==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;i<6;i++){B8155=showdata[i]; delay(5);A8155=A8155<<1;if(A8155==0x40){A8155=0x01;}}}void clear(){for(i=0;i<6;i++){B8155=showdata_0[i]; delay(5);A8155=A8155<<1;if(A8155==0x40){A8155=0x01;}}}void start(){ cnt=0;while(cnt<=2){for(i=0;i<6;i++){B8155=showdata[i]; delay(5);A8155=A8155<<1;if(A8155==0x40){A8155=0x01;}}if(cnt==2){flag++;if(flag<=9){showdata[0]=show[flag];}else{flag=0;count++;if(count<=60){showdata[2]=show[count%10]; showdata[3]=show[count/10]; }else{fen++;count=0;showdata[5]=show[fen];}}}}}void delay(int ms){int j,i;for(j=0;j<ms;j++){for(i=0;i<100;i++);}}void time0_int(void) interrupt 1 {TL0=(65536-50000)%256; //TH0=(65536-50000)/256;cnt++;}。