数码管显示的简易秒表
制作一个LED数码管显示的秒表

计算机科学与工程系实验报告实验题目:制作一个LED数码管显示的秒表班级:姓名:学号:日期:一、实验目的掌握单片机使用定时计数器控制LED数码管的设计与软件编程二、实验要求1、用2位数码管显示计时时间,最小计时单位为“百毫秒”,计时范围0.1~9.9s;2、当第1次按下并松开计时功能键时,秒表开始计时并显示时间;3、第2次按下并松开计时功能键时,停止计时,计算两次按下计时功能键的时间,并在数码管上显示;4、第3次按下计时功能键,秒表清0,再按1次计时功能键,重新开始计时。
5、如果计时到9.9s时,将停止计时,按下计时功能键,秒表清零,再按下重新开始计时。
三、实验要求提交的实验报告中应包括:电路原理图、实验设计思路、C51源程序(含注释语句)、运行效果(含运行截图与说明)、实验小结三、硬件电路原理图的设计四、编程思路及C51源程序编程思路:使用外中断服务处理程序处理按键,内部设计一个计数器,记录按键按下的次数,根据按键次数完成相应的功能。
用数码管显示计时时间,根据按键的次数以及其功能来显示数字。
#include<reg51.h> //包含8051单片机寄存器定义的头文件unsigned char code discode1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef} unsigned char code discode2[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};unsigned char timer=0; //记录中断次数unsigned char second; //存储秒数unsigned char key=0; //记录按键次数main() //主函数{TMOD=0x01; //定时器T0方式1定时ET0=1; // 允许定时器T0中断EA=1; // 总中断允许second=0; //设初始值P0=discode1[second/10]; //显示秒位P2=discode2[second%10]; //显示0.1S位while(1) //循环{if((P3&0x80)==0x00) //当按键被按下时{key++; //按键次数加一switch(key) //根据按键次数分三种情况{case 1: //第一次按下为启动秒表表示TH0=0xee; //TL0=0x00; //TR0=1; //break; //case 2: //按下两次暂停秒表TR0=0; //break; //case 3: //按下三次秒表清零key=0; //second=0; //P0=discode1[second/10]; //P2=discode2[second%10]; //break;}while((P3&0x80)==0x00); //如果按键时间过长在此循环}}}}void int_t0() interrupt 1 using 0 //定时器T0中断子程序{TR0=0; //停止计时,执行以下操作(计时出现误差)TH0=0xee; //向TH0写入初值的高8位TL0=0x00; //向TL0写入初值的低8位,定时5mstimer++; //记录中断次数if (timer==20) //中断20次,20*5ms=100ms=0.1s{timer=0; //中断次数清0second++; //加0.1sP0=discode1[second/10]; //根据计时时间,即时显示秒位P2=discode2[second%10]; //根据计时时间,即时显示0.1s位}if(second==99) //当计时到9.9s时{TR0=0; //停止计时second=0; //秒数清0key=2; //按键数置2,当再次按下按键时,key++,即key=3,秒表清0复原}else //计时不到9.9s时{TR0=1; //继续计时}}五、仿真运行效果展示1、第一次按键,秒表开始计时,并计时到9.92、2次按键,停止计时,将计时的时间值送到数码管显示3、第3次按下计时功能键,秒表清零六、实验小结在实验的过程中,出现过几次错误,自己对理论知识了解的还不够透彻,所幸,通过自己思考解决了。
秒表-八位数码管显示

秒表-八位数码管显示1;************************************************************************** 2; 标题: 秒表-八位数码管显示(汇编)3; 作者: wentao 4; 5; 日期: 2007.3.36; 软件: Keil A51 V8.007; 芯片: AT89X518; 说明: 实验板实测通过,数码管为8位共阳9; 声明: 自用存档!另仅供需要的朋友参考,请勿用做不道德转载及商业用途!10;************************************************************************** 1112dot_l equ 30h ;30单元存储百分之一秒值13dot_h equ 31h ;31单元存储十分之一秒值14sec_l equ 32h ;32单元存储秒个位值15sec_h equ 33h ;33单元存储秒十位值16min_l equ 34h ;34单元存储分个位值17min_h equ 35h ;35单元存储分十位值18hou_l equ 36h ;36单元存储时个位值19hou_h equ 37h ;37单元存储时十位值2021dot equ 38h ;38单元为百分之一秒计数器(0.00s-0.99s)22sec equ 39h ;39单元为秒计数器(00s-59s)23min equ 40h ;40单元为分计数器(00m-59m)24hou equ 41h ;41单元为时计数器(00h-00h)2526dis_b equ 42h ;dis_b(42单元)作为位码选通数码管27dis_r equ 43h ;dis_r(43单元)为取段码时的偏移量2829key_t equ 44h ;44单元为键按下的次数标记3031K bit p1.4 ;K键与P1.4相连3233 org 0000h34 ajmp start35 org 000bh ;定时器0的中断入口地址36 ajmp time0 ;跳到定时器0的中断服务程序处37 org 001bh ;定时器1的中断入口地址38 ajmp time1 ;跳到定时器1的中断服务程序处39 org 0030h40start:41 mov p2,#0xff ;关所有数码管42 mov p1,#0xff ;p1为准双向口,作输入时先写14344 mov dis_b,#0x7f ;初始选通P2.7口数码管45 mov dis_r,#0 ;初始化偏移量为046 mov dot,#0 ;百分之一秒计数器清零47 mov sec,#0 ;秒计数清零48 mov min,#0 ;分计数清零49 mov hou,#0 ;时计数清零50 mov key_t,#0 ;键按下次数清零5152 mov tmod,#00010001b ;定时/计数器0、1工作于方式153 mov th0,#0xd8 ;预置定时常数55536(d8f0),产生10ms时基信号54 mov tl0,#0xf055 mov th1,#0xfc ;预置定时常数64536(fc18),产生1ms间隔用于动态显示56 mov tl1,#0x185758 setb ea ;开总中断59 setb et0 ;定时/计数器0允许中断60 setb et1 ;定时/计数器1允许中断61 clr tr0 ;关定时/计数器062 setb tr1 ;开定时/计数器16364lop:65 jb K,lop ;键(P1.4)未按下则返回66 lcall d_10ms ;延时10ms消抖67 jb K,lop ;是抖动则返回重新扫描68 jnb K,$ ;等待键松开69 lcall key_to ;调用键处理部分70 ajmp lop ;循环显示7172key_to: ;键处理子程序73 inc key_t ;键按下次数加174 mov a,key_t ;按下次数送入a75 cjne a,#1,key_2 ;不是1次继续检测是否是第2次76 setb tr0 ;第1次按下启动定时器077 ret78key_2: cjne a,#2,key_3 ;也不是2次继续检测是否是第3次79 clr tr0 ;第2次按下关闭定时器080 ret81key_3: cjne a,#3,back ;也不为3则结束82 mov dot,#0 ;第3次按下将四个计数器清零83 mov sec,#084 mov min,#085 mov hou,#086 mov key_t,#0 ;按键次数清零87back: ret88;--------------------------------------------------------------------------------89time0: ;定时器0中断服务程序90 push psw ;保护现场91 push acc9293 inc dot ;百分之一秒计数器加194 mov a,dot ;计数器值送入a95 cjne a,#100,over ;未计到100则返回继续计数96 mov dot,#0 ;计到100后清零97 inc sec ;秒计数器加1(进位10ms*100=1s)98 mov a,sec ;秒计数值送入a99 cjne a,#60,over ;未计到60则返回继续计数100 mov sec,#0 ;计到60后秒计数器清零101 inc min ;分计数器加1(进位60s=1m)102 mov a,min ;分计数值送入a103 cjne a,#60,over ;未计到60则返回继续计数104 mov min,#0 ;计到60后分计数器清零,重新计时105 inc hou ;时计数器加1(进位60m=1h)106 mov a,hou ;时计数器送入a107 cjne a,#100,over ;未计到100则返回继续计数108 mov hou,#0 ;计到100后清零109110over: mov th0,#0xd8 ;重置定时常数111 mov tl0,#0xf0112 pop acc ;恢复现场113 pop psw114 reti ;中断返回115;--------------------------------------------------------------------------------116time1: ;定时器1中断服务程序117 push psw ;保护现场118 push acc119 push b120 ;以下是百分之一秒计数器值个位十位分开121 mov a,dot ;百分之一秒计数器值送入a(被除数)122 mov b,#10 ;除数10送入b123 div ab ;a除以b124 mov dot_l,b ;余数b(百分之一秒值)送入百分之一秒存储单元125 mov dot_h,a ;商a(十分之一秒值)送入十分之一秒存储单元126 ;以下是秒计数器值个位十位分开127 mov a,sec ;秒计数器值送入a(被除数)128 mov b,#10 ;除数10送入b129 div ab130 mov sec_l,b ;余数b(秒个位值)送入秒个位存储单元131 mov sec_h,a ;商a(秒十位值)送入秒十位存储单元132 ;以下是分计数器值个位十位分开133 mov a,min ;分计数器值送入a(被除数)134 mov b,#10 ;除数10送入b135 div ab136 mov min_l,b ;余数b(分个位值)送入分个位存储单元137 mov min_h,a ;商a(分十位值)送入分十位存储单元138 ;以下是时计数器值个位十位分开139 mov a,hou ;时计数器值送入a(被除数)140 mov b,#10 ;除数10送入b141 div ab142 mov hou_l,b ;余数b(小时个位值)送入时个位存储单元143 mov hou_h,a ;商a(小时十位值)送入时十位存储单元144145 mov dptr,#table ;数码管段码表首址送入dptr146147 mov a,#dot_l ;取百分之一秒值的地址148 add a,dis_r ;基址+偏移量149 mov r0,a ;R0为欲显示值的地址150 mov a,@r0 ;取欲显示值送入a151 ; dis_r : 0 1 2 3 4 5 6 7152 ;对应单元: dot_l dot_h sec_l sec_h min_l min_h hou_l hou_h153 movc a,@a+dptr ;取对应值的段码154 mov p2,dis_b ;位码送入P2口155156 mov r0,dis_b ;取位码判断是否为需加小数点的位[liuwentao]157 cjne r0,#0xdf,b3 ;不是P2.5再判断是否为P2.3158 ajmp add_dot ;是P2.5则段码加上小数点显示159b3: cjne r0,#0xf7,b1 ;也不是P2.3再判断是否为P2.1160 ajmp add_dot ;是P2.3则段码加上小数点显示161b1: cjne r0,#0xfd,com ;也不是P2.1则正常送段码162163add_dot: anl a,#0x7f ;是P2.5,P2.3,P2.1则段码和7f做与操作使对应位显示小数点164com: mov p0,a ;段码送入P0口165166 inc dis_r ;偏移量加1,下次中断时显示下个数167 anl dis_r,#0x07 ;dis_r增到8时自动清0(使之在0到7间循环)168169 mov a,dis_b ;位码循环右移,下次中断时选通下个数码管170 rr a171 mov dis_b,a172173 mov th1,#0xfc ;重置定时常数174 mov tl1,#0x18175176 pop b177 pop acc ;恢复现场178 pop psw179 reti180181d_10ms: mov r5,#20 ;1+(1+2*255)*20+2*20=10.261ms@12M182temp1: mov r6,#255 ;1+2*255183 djnz r6,$184 djnz r5,temp1185 ret186187table: db 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf ;段码表188 ; 0 1 2 3 4 5 6 7 8 9 - 对应内容189190end191/************************************************************************** 192* 标题: 八位数码管显示(C51)193* 作者: wentao 194 195* 日期: 2007.3.3196* 软件: Keil C51 V8.02197* 芯片: AT89X51198* 说明: 实验板实测通过,数码管为8位共阳199* 声明: 自用存档!另仅供需要的朋友参考,请勿用做不道德转载及商业用途!200**************************************************************************/ 201202#include <reg51.h>203#include <intrins.h>204#define uchar unsigned char205206void delay_ms(uchar ms); // 延时毫秒@12M,ms最大值255207void key_scan(); // 按键扫描208void key_to(); // 按键处理209210uchar code dis_code[11] = {0xc0,0xf9,0xa4,0xb0,0x99, //段码表211 // 0 1 2 3 4 对应内容212 0x92,0x82,0xf8,0x80,0x90,0xbf};213 // 5 6 7 8 9 -214215uchar data dis[8]; // dis[0]为百分之一秒值,dis[1]为十分之一秒值216 // dis[2]为秒个位值,dis[3]为秒十位值217 // dis[4]为分个位值,dis[5]为分十位值218 // dis[5]为时个位值,dis[6]为时十位值219220uchar data dot = 0; // 百分之一秒计数器(0.00s-0.99s)221uchar data sec = 0; // 秒计数器(00s-59s)222uchar data min = 0; // 分计数器(00m-59m)223uchar data hou = 0; // 时计数器(00h-99h)224225uchar data dis_b; // dis_b为位码选通数码管226uchar data dis_r; // dis_r为取段码时的偏移量227228uchar data key_t = 0; // 按键次数,初始为0229230sbit K = P1^4; // K键与P1.4相连231232void main()233{234 P2 = 0xff; // 关所有数码管235 P1 = 0xff; // p1为准双向口,作输入时先写1236 dis[2] = 10; // '-'在段码表中偏移量为10237 dis[5] = 10; // '-'在段码表中偏移量为10238 dis_b = 0x7f; // 初始选通P2.7口数码管239 dis_r = 0; // 初始化偏移量为0240241 TMOD = 0x11; // 定时/计数器0,1工作于方式1242 TH0 = 0xd8; // 预置定时常数55536(d8f0),产生10ms时基信号243 TL0 = 0xf0;244 TH1 = 0xfc; // 预置定时常数64536(fc18),产生1ms间隔用于动态显示245 TH1 = 0x18;246 EA = 1; // 开总中断247 ET0 = 1; // 定时/计数器0允许中断248 ET1 = 1; // 定时/计数器1允许中断249 TR0 = 0; // 关闭定时/计数器0250 TR1 = 1; // 启动定时/计数器1251 while(1)252 {253 if(K != 1) // 有键按下254 {255 delay_ms(10); // 延时10ms去抖256 if(K != 1) // 确定是有键按下257 {258 while(K != 1); // 等待键松开259 key_to(); // 按键处理260 }261 }262 }263}264void key_to() // 按键处理子程序265{266 key_t++; // 按键次数加1267 if(key_t == 1) // 第一次按下268 TR0 = 1; // 启动定时器0269 else270 {271 if(key_t == 2) // 第二次按下272 TR0 = 0; // 关闭定时器0273 else274 {275 if(key_t == 3) // 第三次按下276 {277 dot = 0; // 四个计数器清零278 sec = 0;279 min = 0;280 hou = 0;281 key_t = 0; // 按键次数清零282 }283 }284 }285286}287void tiem0(void) interrupt 1 // T/C0中断服务程序(产生10ms时基信号) 288{289 dot++; // 百分之一秒计数器加1290 if(dot == 100) // 计数值到100291 {292 dot = 0; // 清零293 sec++; // 秒计数器加1(进位10ms*100=1s)294 if(sec == 60) // 秒计数值到60295 {296 sec = 0; // 秒计数器清零297 min++; // 分计数器加1(进位60s=1m)298 if(min == 60) // 分计数到60299 {300 min = 0; // 分计数器清零301 hou++; // 时计数器加1(进位60m=1h)302 if(hou == 100) // 时计数器到100303 hou = 0; // 时计数器清零304 }305 }306 }307 TH0 = 0xd8; // 重置定时常数308 TL0 = 0xf0;309}310void time1(void) interrupt 3 // T/C1中断服务程序(延时1ms数码管动态显示) 311{312 uchar data t = 0; // 段码临时变量313314 dis[0] = dot % 10; // 百分之一秒计数器个位分离出来赋绐dis[0] 315 dis[1] = dot / 10; // 百分之一秒计数器十位分离出来赋绐dis[1] 316 dis[2] = sec % 10; // 秒计数器个位赋绐dis[2]317 dis[3] = sec / 10; // 秒计数器十位赋绐dis[3]318 dis[4] = min % 10; // 分计数器个位赋绐dis[4]319 dis[5] = min / 10; // 分计数器十位赋绐dis[5]320 dis[6] = hou % 10; // 时计数器个位赋绐dis[6]321 dis[7] = hou / 10; // 时计数器十位赋绐dis[7]322323 t = dis_code[dis[dis_r]]; // 取出段码放入临时变量t324325 // 判断位码如果为显示P2.5,P2.3,P2.1则对应段码应加上小数点显示326 // 和0x7f(01111111)做与操作使原段码加上小数点变为新段码327328 if(dis_b == 0xdf | dis_b == 0xf7 | dis_b == 0xfd)329 t &= 0x7f;330331 P2 = dis_b; // 位码送P2口332 P0 = t; // 段码送P0口333334 dis_r++; // 偏移量加1,下次中断时显示下个数335 dis_r &= 0x07; // dis_r增到8时自动清0(使之在0到7间循环) 336337 dis_b = _cror_(dis_b,1); // 位码循环右移,下次中断时选通下个数码管338339 TH1 = 0xfc; // 重置定时常数340 TL1 = 0x18;341342}343void delay_ms(uchar ms) // 延时毫秒@12M,ms最大值255344{345 uchar i;346 while(ms--)347 for(i = 0; i < 124; i++);348}广州珍珠岩,广州珍珠岩厂 Ce57uICIJeu8。
用LED数码管显示的秒表设计

单片机课程设计说明书用LED 数码管显示的秒表设计专业 电气工程及其自动化学生姓名 刘宁班级 B 电气081学号 **********指导教师 张兰红完成日期2011年 6月 26 日目录1、概述 (2)2、课题方案设计 (2)2.1系统总体设计要求 (2)2.2系统模块结构论证 (2)3、系统硬件设计 (3)3.1总体设计 (3)3.2单片机运行的最小系统 (4)3.2.1 52单片机最小系统电路介绍 (4)3.2.2单片机的振荡电路与复位电路 (7)3.3数码管介绍 (8)3.4驱动电路 (9)4、软硬件联调及调试结果 (10)4.1软硬件调试中出现的问题及解决措施 (10)4.2实物图 (11)4.3调试结果 (13)5、结束语 (13)参考文献 (14)附录 (14)附录1:基于单片机的秒表设计原理图 (14)附录2:基于单片机的秒表设计PCB图 (15)附录3:PROTEUS仿真图 (16)附录4:基于单片机的秒表设计C语言程序清单 (17)附录5:基于单片机的秒表设计元器件目录表 (19)1、概述21世纪是一个电子技术和电子元件有更大发展的世纪。
回顾百年来电子技术和电子工业发展的成就,举世瞩目。
作为一个电气专业的大学生,我们不但要有扎实的基础知识、课本知识,还应该有较强的动手能力。
现实也要求我们既精通电子技术理论,更要掌握电子电路设计、实验研究和调试技术。
课程设计就是一个理论联系实际的机会。
本次设计主要完成具备基本功能的电子秒表的理论设计,电子秒表是重要的记时工具,广泛运用于各行各业中。
作为一种测量工具,电子秒表相对其它一般的记时工具具有便捷、准确、可比性高等优点,不仅可以提高精确度,而且可以大大减轻操作人员的负担,降低错误率。
在设计中应用到数码管,数码管主要用于楼体墙面,广告招牌、高档的DISCO、酒吧、夜总会、会所的门头广告牌等。
特别适合应用于广告牌背景、立交桥、河、湖护栏、建筑物轮廓等大型动感光带之中,可产生彩虹般绚丽的效果。
原创数码管动态显示时间(0-999秒倒计时)

数码管动态显示时间(0-999秒倒计时)原理图:
控制部分
数码管时间显示,微动按键时间调整,工作手具转换,启动和复位程序。
1.待机:时间显示010秒.D6灯亮,此时ZHH,GZ无输出。
2.转换键:待机D5和D6状态可相互转换,开机常态体腔指示灯亮ZHH,GZ无输出。
按一下转换到D5状态,D5
指示灯亮ZHH输出,再按一下转换到D6状态,体腔指示灯亮ZHH无输出。
3.“加”“减”键:可调时间000-999秒,可快加和快减时间,每秒10个数变化。
慢加和慢减时间,每按一下变化1
个数。
4.复位键:工作和报警中可用,复位到设定状态。
5.手柄启动键:设定到D6状态时,按下启动键时间以设定时间倒计时工作,此时ZHH无输出GZ输出,治疗指
示灯D4亮时间减到000后,GZ断开报警5秒治疗指示灯闪烁,返回到设定状态。
设定到D5状态时,按下启动键时间以设定时间倒计时工作,此时ZHH,GZ输出,治疗指示灯亮时间减到000后,GZ断开报警5秒治疗指示灯闪烁。
工作中除复位键外其他键不能动作。
报警中可重复启动(设定状态)。
4位简易秒表的设计与制作

4位秒表的设计与制作一、任务要求该任务要求设计并制作一个4位秒表,秒表有启动、停止和清零功能,显示时间为0到9999秒。
该任务是综合应用数码管动态显示、单片机定时计数器和中断系统设计一个具有启动、停止、清零和校时功能的,能显示0到9999秒的4位秒表。
二、设计方案提示4位秒表的设计与1位秒表设计基本相似,所不同的是4位秒表要显示4位数据,而且要有校时功能,所以它只是综合了键盘、定时器、中断系统和动态显示的应用。
多位数显示器是用数码管显示4位十进制数,如果采用数码管静态显示方法,4个数码管要占用4个I/O端口,将占用单片机的所有I/O口而无法实现其他功能,因此不能用静态显示方法实现多位数据的显示。
如何用单片机控制数码管实现多位数据的现实,而又不占用太多的I/O口呢?这就要用到--------数码管的动态显示。
4位秒表设计与1位秒表的设计在原理上是一样的,不同的是:4位秒表要显示4位数,利用前面的数码管显示方法需要4个并行I/0口,而启动停止和清零要占用2个I/O线,89C52单片机只有4个并行I/O口,因此这种显示方法不能满足4位秒表的功能。
那么,如何实现4位秒表的设计呢?这就是该任务的关键------数码管动态显示技术三、系统硬件设计参考:4位秒表电路原理图如图3-21所示,有启动停止、清零和校时电路;数码管的位选端分别接P2口的P2.0~P2.3,段选端接P0口,74LS245是驱动电路。
图3-21 4位秒表电路原理图硬件电路设计图3-17 4位数据显示器的硬件原理图图3-17是4位数据显示器的硬件原理图,数码管是共阳连接,P2口输出显示段码,74LS245驱动数码管显示,CE是片选端,低电平有效;4位数码管的公共端分别由P3.0、P3.1、P3.2、P3.3控制。
四、系统软件设计参考程序//功能:4位数码管动态显示“1234”//函数名:delay50ms//函数功能:采用定时器1、工作方式1实现50ms延时,晶振频率12MHz//形式参数:无//返回值:无void delay50ms(){ TH1=0x3c; // 置定时器初值TL1=0xb0;TR1=1; // 启动定时器1while(!TF1); // 查询计数是否溢出,即定时到,TF1=1TF1=0; // 50ms定时时间到,将定时器溢出标志位TF1清零}void main() //主函数{unsigned char led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92}; //设置数字0~5字型码unsigned char i,w;TMOD=0x10; //设置定时器1工作方式1while(1) {w=0x01; //位选码初值为01Hfor(i=0;i<4;i++){P2=~w; //位选码取反后送位控制口P2口w<<=1; //位选码左移一位,选中下一位LEDP1=led[i]; //显示字型码送P1口delay50ms(); //延时50ms}}}4位秒表流程图如图3-22所示:包括主函数流程、定时器中断函数和显示函数流程图。
单片机简易秒表正计时时间可设置

单片机简易秒表正计时时间可设置秒表是一种用来测量时间流逝的仪器,广泛应用于体育比赛、科学实验和日常生活中。
在现代科技的推动下,秒表的功能和精准度都得到了极大提升。
本文将介绍一种单片机实现的简易秒表,能够进行正计时,并可设置计时时间。
用于实现秒表功能的单片机芯片有很多种,通常选择计时和定时功能强大的单片机,如STC89C52、AT89C51等。
这些单片机具有丰富的外设和强大的计时能力,非常适合实现秒表功能。
在开始设计之前,我们需要明确几个关键的功能要求。
首先是正计时功能,我们需要编写程序来实现从0开始的计时。
其次是计时时间可设置,即用户可以设置计时的起始时间和结束时间。
最后是计时的精确度,单片机通常使用定时中断来实现计时,我们需要考虑到时钟频率和定时器的精度,确保计时的准确性。
首先,我们需要连接单片机与显示器和按键开关。
单片机的引脚可以通过通用I/O口或专用的定时器引脚与显示器和按键开关相连接。
这里我们选择7段LED数码管作为显示器,用来显示计时结果。
按键开关用于设置计时时间。
接下来,我们需要编写程序来实现秒表的功能。
首先,初始化单片机的定时器和中断。
我们需要设置定时器的工作模式、时钟频率和计时的时间间隔。
然后,我们需要编写中断服务函数,该函数在定时器达到设定的时间时被调用。
在中断服务函数中,我们将对计时进行加法操作,并将结果显示在LED数码管上。
同时,我们还需要判断计时是否达到设置的结束时间,如果达到,则停止计时。
为了使用户可以设置计时时间,我们可以通过按键开关来实现。
当用户按下设定时间的键时,我们将进入设定模式,用户可以通过按键来设定起始时间和结束时间。
通过LED数码管来显示用户设置的时间。
最后,我们需要对秒表进行测试和调试,确保其功能的正常运行。
我们可以逐步测试每个功能点,如正计时功能、计时时间设置功能和计时精确度等。
通过串口输出调试信息,我们可以对程序进行调优和改进,提高秒表的性能和稳定性。
单片机简易秒表正计时时间可设置

单片机简易秒表正计时时间可设置单片机简易秒表的正计时时间可设置为2000字,可以按照以下步骤进行实现:1. 硬件设计:选择一款适合需求的单片机,比如常见的8051、AVR、STM32等。
并根据需求连接必要的外设,如按键开关、数码管等。
2. 软件设计:a) 定义相关变量:- 秒变量:存储当前的秒数- 分变量:存储当前的分钟数- 时变量:存储当前的小时数- 控制变量:用于控制秒表的开始和暂停- 设置变量:用于设置需要计时的时间,初始值为2000(字)- 数码管显示变量:存储需要在数码管上显示的数据b) 初始化:- 设置定时器中断,每秒触发一次中断,用于更新秒、分、时的变量- 设置外部中断,用于处理开始/暂停的按键事件- 设置外部中断,用于处理设置事件,每按一次按键设置加1,最大为2000(字),显示设置数值。
c) 中断服务程序:- 更新秒、分、时的变量- 如果控制变量为1,将秒、分、时的变量更新到数码管显示变量中,实现数码管显示d) 控制程序:- 根据按键事件切换控制变量的状态,实现秒表的开始、暂停功能e) 设置程序:- 根据按键事件对设置变量进行更新,实现设置时间的功能。
同时将设置变量的值显示在数码管上3. 调试与优化:通过调试和优化程序,确保秒表的正计时时间可设置为2000字。
4. 扩展功能:在基本功能实现的基础上,可以添加更多的功能,如显示毫秒、添加报警功能等,以提升秒表的实用性。
5. 完善界面设计:为了方便用户操作和观察计时结果,可以设计一个简洁美观的界面。
可以利用数码管显示计时结果,同时增加LED指示灯来辅助显示状态(如运行、暂停)。
可以设计一个独立的按键用于开始/暂停功能,一个按键用于增加设置时间。
可以在界面上打印一些提示信息,如"Press Start to begin timing"等。
6. 用户交互优化:为了方便用户操作,可以添加一些交互优化功能。
例如,可以实现按住增加设置时间按键连续加速增加时间的功能,以快速设置需要计时的时间。
数字式秒表资料

数字式秒表资料电⼦技术综合课程设计课程:电⼦技术综合课程设计题⽬:数字式秒表所属院(系) 物电学院专业班级电⼦101姓名XXX 学号:XXXXX指导⽼师XXXXX完成地点5XXX2012年 09 ⽉ 26⽇任务书数字式秒表⼀任务和要求:设计并制作⼀个数字式秒表,要求如下:1、⽤三位数码管及⼀个LED发光⼆极管显⽰秒表计时,格式如下:开机时数码管显⽰000,LED灯灭;当计时超过59秒时,LED灯亮;计到1分59秒时,过⼀秒,LED灯灭,同时数码管重新计时显⽰。
计时最⼩单位为0.1秒。
2、具有如下功能键:开始/清零键:按第⼀下时计时开始,同时显⽰;按第⼆下,停⽌计时,恢复到初始状态;固定显⽰键:按第⼀下时,显⽰固定,但计时仍继续;再按下时,显⽰从新时间开始。
3、要求⾃制0.1秒信号源。
4、设计并制作本电路所⽤直流电源。
⼀、提⽰和参考⽂献直流稳压电源见参考资料P23《数字电⼦技术实验任务书》实验六陕西理⼯学院⽬录前⾔ (1)⼀.⽅案论证 (2)1.1⽅案1 (2)1.2⽅案2 (2)⽅案1、2的⽐较: (3)⼆、单元电路设计原理 (4)2.1 五伏电压源设计 (4)2.2 0.1s信号源设计: (5)2.3 显⽰电路: (6)2.4 计数电路 (8)2.5控制电路 (9)三、仿真调试及问题分析 (10)3.1仿真软件简介 (10)3.3信号发⽣器的仿真与问题分析 (12)3.4 计数显⽰部分的仿真与问题分析 (12)3.5 控制电路、译码、显⽰全图的仿真与问题分析 (13)四装调步骤和故障问题与调试改进 (14)五.⼩结 (14)六.参考⽂献 (15)附录1.元器件功能与管脚 (16)附录2.元器件清单 (20)附录3.总体电路图 (21)前⾔电⼦技术综合课程设计是针对模拟电⼦技术、数字逻辑电路及电路分析课程的要求,对学⽣进⾏综合性实践训练的实践学习环节,它包括选择课程、电⼦电路设计、制作、调试和编写总结报告等实践内容。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
❖ while(1) {
❖ for(i=0;i<10;i++)
❖{
❖
P1=led[i]; //字型显示码送段控制口P1
❖
delay1s(); //延时1秒
❖}
❖
}
❖}
16
可编辑版
动动手
程序编写 ❖ 创建工程 保存工程 ❖ 建立源文件 保存源文件 ❖ 源文件加入工程 ❖ 编译 链接 调试
17
可编辑版
3
可编辑版
工作任务
❖ 正确连接实验箱电路 ❖ 输入简易秒表程序并完成调试 ❖ 根据要求修改程序并观察运行结果 ❖ 完成实训报告
4
可编辑版
任务分析
❖ 用单片机实现一位数简易秒表控制,计时范围为0~9s, 并将计时时间在一位数码管上显示出来。
❖ 数码管如何显示0-9数字?
5
可编辑版
实训电路
6
可编辑版
//启动T1
❖ while(!TF1); //查询计数是否溢出,即定时50ms时间到,TF1=1
❖ TF1=0;
//50ms定时时间到,将T1溢出标志位TF1清零
❖}
❖}
15
可编辑版
❖ void main()
//主函数
❖{
❖ unsigned char i;
❖ TMOD=0x10;
//设置定时器1工作于方式1
10
可编辑版
单片机与LED数码管接口
LED静态显示
静态显示是指数码管显示某一字符时,相应的发光二极管恒定导 通或恒定截止。
这种显示方式的各位数码管的公共端恒定接地(共阴极)或+5V (共阳极)。
每个数码管的八个段控制引脚分别与一个八位I/O端口相连。只 要I/O端口有显示字型码输出,数码管就显示给定字符,并保持不 变,直到I/O口输出
LED数码管结构及原理
7
可编辑版
单片机与LED数码管接口
LED数码管结构及原理
8
可编辑版
新知识点:数码管如何显示?
LED数码管工作原理
a b c ad e f g
a bcdef g
f
b
g
共阴极COM( )
a
e
R
I
d
c
U U′
COM 9
COM(+)
共阳极
R U-U I
下一时段按顺序选通另外一位数码管,并送出相应的字型显示编 码,依此规律循环下去,即可使各位数码管分别间断地显示出相应 的字符。
这一过程称为动态扫描显示。
14
可编辑版
参考程序
❖ //程序:ex5_1.c
❖ //功能:0~9简易秒表
❖ #include <reg51.h>
❖ unsigned char led[ ]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
可编辑版
单片机与LED数码管接口
LED数码管字型编码
若将数值0送至单片机的P1口,数码管上不会显示数字“0”。显 然,要使数码管显示出数字或字符,直接将相应的数字或字符送至 数码管的段控制端是不行的,必须使段控制端输出相应的字形编码。 将单片机P1口的P1.0、P1.1 …P1.7八个引脚依次与数码管的a、 b…f、dp八个段控制引脚相连接。如果使用的是共阳极数码管, COM端接+5V,要显示数字“0”,则数码管的a、b、c、d、e、f六 个段应点亮,其它段熄灭,需向P1口传送数据11000000B(C0H), 该数据就是与字符“0”相对应的共阳极字型编码。若共阴极的数码 管COM端接地,要显示数字“1”,则数码管的b、c两段点亮,其他 段熄灭,需向P1口传送数据00000110(06H),这就是字符“1”的 共阴极字型码了。
11
可编辑版
单片机与LED数码管接口
LED静态显示
12
可编辑版
单片机与LED数码管接口
LED动态显示
13
可编辑版
单片机与LED数码管接口
LED动态显示
动态显示是一种按位轮流点亮各位数码管的显示方式,即在某一 时段,只让其中一位数码管“位选端”有效,并送出相应的字型显 示编码。此时,其它位的数码管因“位选端”无效而都处于熄灭状 态;
任务十一
数码管显示的简易秒表
1
机电工程学院 机电一体化教研室
引出任务
❖ 生活中经常会用到秒表,大家知道它 的工作原理吗?
❖ 我们今天这次课上学习如何利用数码 管制作一个简易的秒表!
❖ 大家加油!
2
可编辑版
学习目标
❖ 通过对一位数码管显示0~9简易秒表的制作,熟悉单片机 与LED数码管的接口技术,了解LED数码管的结构、工作 原理、显示方法和控制方法。
❖ //定义数组led存放数字0~9的字型码
❖ void delay1s()
//采用定时器1实现1秒延时
❖{
❖ unsigned char i;
❖ for(i=0;i<0x14;i++)
//设置20次循环次数
❖{
❖ TH1=0x3c;
//设置定时器初值为3CB0H
❖ TL1=0xb0;
❖ TR1=1;
动动手
硬件连接 ❖使用电子连线连接实验箱单片机输出端口与
相应的数码管端口 ❖使用USB数据线连接电脑USB端口与单片机实
验箱数据端口 ❖全速运行,观察秒表使用效果
18
可编辑版
拓展思考
❖ 如何使六位数码管动态显示“012345”?
19
可编辑版
20
机电工程学院 机电一体化教研室