秒表-六位数码管有效显示
6位LED显示单片机控制电子钟.doc
6位LED显示单片机控制电子钟/计数器这是我们设计的单片机电子钟/计时器学习板,它采用6位LED数码管显示时、分、秒,以24小时计时方式。
可以通过按键实现时分调整、秒表/时钟功能转换、省电(关闭显示)等功能。
我们能提供的完整的汇编语言源程序清单及电路原理设计图有助于学习者进行分析和进行实验验证6位LED显示单片机控制电子钟/计数器成品板成品每套84元51单片机做的电子钟在很多地方都有介绍,对于单片机学习者来说这个程序基本上是一道门槛,掌握了电子钟程序,基本上可以说51单片机就掌握了80%。
常见的电子钟程序由显示部分、计算部分、时钟调整部分构成,本产品硬件上完全支持倒计时器,客户只要自己修改程序就能实现倒计时功能。
为了实现LED显示器的数字显示,可以采用静态显示法和动态显示法。
由于静态显示法需要数据锁存器等硬件,接口复杂一些。
考虑时钟显示只有六位,且系统没有其它复杂的处理任务,所以决定采用动态扫描法实现LED的显示。
单片机采用易购的AT89S51系列,这样单片机可具有足够的空余硬件资源实现其它的扩充功能,硬件系统的总体构成如下图所示:该板采用AT89S51单片机,最小化应用设计,采用共阳七段LED显示器,P0口输出段码数据,P2.0~P2.5做列扫描输出,P1.0,P1.1,P1.2,接三个按键开关,用以调时及功能设置。
为了提高共阳数码管的驱动电压,用9012做电源驱动输出。
采用12M晶振,有利于提高秒计时的精度。
本设计中,计时采用定时器T0中断完成,其余状态循环调用显示子程序,当端口开关按下时,转入相应功能程序。
其主程序执行流程图见下左图:数码管显示的数据存放在内存单元70H~75H中。
其中70H~71H存放秒数据,72H~73H存放分数据,74H~75H存放时数据,每一地址单元内均为十进制BCD码。
由于采用软件动态扫描实现数据显示功能,显示用十进制BCD码数据的对应段码存放在ROM表中。
显示时,先取出70H~~75H某一地址中的数据,然后查得对应的显示用段码,并从P0口输出,P2口将对应的数码管选中供电,就能显示该地址单元的数据值。
可调式六位倒计时秒表的设计
陕西理工学院毕业设计可调式六位倒计时秒表的设计王诗蓉(陕西理工学院物电学院电子信息科学与技术专业电信1202班,陕西汉中723001)指导教师:黄朝军[摘要] 以A T89C51单片机为核心芯片,结合时钟电路、复位电路、蜂鸣器驱动电路等,以四位一体的LED数码管作为显示装置,74HC245为驱动,实现了可调式六位倒计时秒表的设计。
所设计的秒表可以简单便捷的实现正计时、倒计时、暂停、复位的功能,并能通过按键对其进行操作,当倒计时到零时,蜂鸣器响。
与传统的机械时钟相比较,所设计的秒表更为直观和准确,而且没有传统机械装置,所以可以使用更长时间。
而且电子元件测量显示,可精确至千分之一秒,广泛应用于科学研究、体育运动及国防等方面,有着巨大的实用价值。
[关键词] 可调式;倒计时秒表;设计The design of a tunable six countdown stopwatchWang Shirong(Grade12,Class02,Major Electronic Information Science and Technology,School of Physics and Telecommunication Engineering,Shaanxi University of Technology,Hanzhong 723000,Shaanxi)Tutor: Huang ChaojunAbstract:The core chip is A T89C51 microcomputer, combined with the clock circuit, reset circuit, buzzer driver circuit, with four in one of the LED digital tube as display device. 74hc245 driven, adjustable a tunable six countdown stopwatchix countdown stopwatch. The stopwatch can be simple and convenient to achieve timing, countdown, pause, reset function, and the key to its operation, when the countdown to zero, the buzzer ringing. Compared with the traditional mechanical clock, stopwatch design more intuitive and accurate, and there is no traditional mechanical devices, so it can be used for a longer time. And electronic components measurement display, can be accurate to 1/1000 seconds, widely used in scientific research, sports and national defense, etc., has a huge practical value.Key words:tunable,countdown stopwatch, design目录1.引言 (1)1.1研究目的及意义 (1)1.2研究现状及发展趋势 (1)1.3主要研究内容 (1)2.系统设计概述 (1)2.1设计指标 (1)2.2设计方案 (2)2.3设计原理 (2)2.4主要元器件 (3)3.系统硬件 (9)3.1时钟电路 (9)3.2复位电路 (9)3.3显示电路 (10)3.4按键 (10)3.5蜂鸣器驱动电路 (11)4.系统软件 (12)4.1软件系统框图 (12)4.2程序流程图 (12)4.3中断设计 (13)5.安装与调试 (14)5.1软件的仿真与调试 (14)5.1.1仿真图 (15)5.1.2调试及功能实现 (15)5.2硬件的安装与调试 (15)5.2.1原理图 (15)5.2.2硬件的焊接 (16)5.2.3硬件调试 (17)6.结语 (18)致谢. (18)参考文献 (19)附录A:元器件清单 (20)附录B:程序 (21)1.引言21世纪以来,电子科技技术十分迅速的的发展,现代电子产品的性能变得越来越好,产品更新换代的节奏也日益变快。
数字式秒表
当Ui6>2Ucc/3,Ui2<Ucc/时,比较器C1、C2均输出低电平,即R=0,S=0。这种状况对于基本RS触发器属于禁止输入状态。
综上分析,可得555定时器功能表如下表2-1-1所示:
2.1.2 555构成的多谐振荡器………………………………………………….…...……………………...…7
2.1.3多谐振荡器的仿真图………………………………………………….…...…………………......……8
2.2消抖电路………….…………………………………………………………….…..………………………………...9
2.4.3方案对比与选择………………………………………………………………………………………13
2.4.4 74LS48的功能介绍……………………………………………………………………………………13
2.5数码管………………………………………………………………………………………………………………..15
4.2故障分析……………………………………………………………………………………………………………..18
参考文献………………………………………………………………………………………………………………………19
元器件明细表……………………………………………………………………………………………………….…....19
数字式秒表
摘要:数字式秒表是一种用数字电路技术实现时、分、秒计时的装置,无机械装置,具有较长的使用寿命,因此得到了广泛的使用。
数字式秒表从原理上讲是一种典型的数字电路,其中包括了组合逻辑电路和时序电路。
数字电子技术课程设计--电子秒表的设计
数字电子技术课程设计--电子秒表的设计数字电子技术课程设计课程设计题目:电子秒表的设计目录摘要 (2)1引言 (3)1.1设计目的 (3)1.2技术要求 (3)1.2.1基本要求 (3)1.2.2提高要求 (3)1.3设计内容 (3)1.4工作原理 (3)2设计框图 (4)3各个部分功能简介 (5)3.1按键去抖电路 (5)3.2控制器电路 (6)3.3时钟产生电路 (8)3.4计时电路 (9)3.5显示译码电路 (10)3.6 50000分频电路 (11)4硬件仿真 (13)4.1顶层逻辑图 (13)4.2LB0介绍 (14)4.3硬件仿真 (14)5课程设计的心得体会 (15)参考文献 (16)附录 (17)摘要本文以数字电子技术作为理论基础、以quartusⅡ软件为开发平台、以相关电路知识作为辅助,实现电子秒表电路的设计和制作。
该电子秒表可以准确显示时间,范围为00.00—99.99。
并且可以手动调节时间,随时启动、清零、暂停记录时间等。
操作起来简易、方便。
首先,本文针对电子秒表进行初步框架设计,并在对多种方案进行了认真比较和验证的基础上,又进一步详细介绍了时间脉冲发生器、秒计数器、译码及驱动显示电路。
其次,在总体电路图组装完成以后,用quartusⅡ软件对设计好的电路进行了仿真与调试,并逐一解决设计过程中出现的一系列问题。
最后,对照着电子秒表设计方案,对制作好的电子秒表功能进行总体验证。
并利用学院的LB0开发板进行硬件仿真。
关键词:电子秒表计数器分频quartusⅡ、1引言1.1设计目的1)掌握同步计数器74160,74161的使用方法,并理解其工作原理。
2)掌握用74160,74161进行计数器、分频器的设计方法。
3)掌握用三态缓冲器74244和74160,74138,7448进行动态显示扫描电路设计的方法。
4)掌握电子秒表的设计方法。
5)掌握在EDA系统软件MAX + plus Ⅱ环境下用FPGA/CPLD进行数字系统设计的方法,掌握该环境下功能仿真、时序仿真、管脚锁定和芯片下载的方法。
6位7段LED数码管显示.
目录1. 设计目的与要求..................................................... - 1 -1.1 设计目的...................................................... - 1 -1.2 设计环境...................................................... - 1 -1.3 设计要求...................................................... - 1 -2. 设计的方案与基本原理............................................... - 2 -2.1 6 位 8 段数码管工作原理....................................... - 2 -2.2 实验箱上 SPCE061A控制 6 位 8 段数码管的显示................... - 3 -2.3 动态显示原理.................................................. - 4 -2.4 unSP IDE2.0.0 简介............................................ - 6 -2.5 系统硬件连接.................................................. - 7 -3. 程序设计........................................................... - 8 -3.1主程序......................................................... - 8 -3.2 中断服务程序.................................................. - 9 -4.调试............................................................... - 12 -4.1 实验步骤..................................................... - 12 -4.2 调试结果..................................................... - 12 -5.总结............................................................... - 14 -6.参考资料........................................................... - 15 - 附录设计程序汇总.................................................... - 16 -1.设计目的与要求1.1 设计目的1. 了解 6 位 7 段 LED数码管的工作原理。
秒表-六位数码管有效显示2
秒表-六位数码管有效显示 C51单片机1.#include <reg51.h>2.#include <intrins.h>3.#define uchar unsigned char1.void delay_ms(uchar ms); // 延时毫秒@12M,ms最大值2552.void key_scan(); // 按键扫描3.void key_to(); // 按键处理4.5.uchar code dis_code[11] = {0xc0,0xf9,0xa4,0xb0,0x99, //段码表6.//0 1 2 3 4 对应内容7. 0x92,0x82,0xf8,0x80,0x90,0xbf};8.// 5 6 7 8 9 - 9.10.uchar data dis[8]; // dis[0]为百分之一秒值,dis[1]为十分之一秒值11. // dis[2],dis[5]为'-'段码的偏移量12. // dis[3]为秒个位值,dis[4]为秒十位值13. // dis[6]为分个位值,dis[7]为分十位值14.15.uchar data dot = 0; // 百分之一秒计数器(0.00s-0.99s)16.uchar data sec = 0; // 秒计数器(00s-59s)17.uchar data min = 0; // 分计数器(00m-99m)18.19.uchar data dis_b; // dis_b为位码选通数码管20.uchar data dis_r; // dis_r为取段码时的偏移量21.22.uchar data key_t = 0; // 按键次数,初始为023.24.sbit K = P1^4; // K键与P1.4相连25.26.void main()27.{28. P2 = 0xff; // 关所有数码管29. P1 = 0xff; // p1为准双向口,作输入时先写130. dis[2] = 10; // '-'在段码表中偏移量为1031. dis[5] = 10; // '-'在段码表中偏移量为1032. dis_b = 0x7f; // 初始选通P2.7口数码管33. dis_r = 0; // 初始化偏移量为034.35. TMOD = 0x11; // 定时/计数器0,1工作于方式136. TH0 = 0xd8; // 预置定时常数55536(d8f0),产生10ms时基信号37. TL0 = 0xf0;38. TH1 = 0xfc; // 预置定时常数64536(fc18),产生1ms间隔用于动态显示39. TH1 = 0x18;40. EA = 1; // 开总中断41. ET0 = 1; // 定时/计数器0允许中断42. ET1 = 1; // 定时/计数器1允许中断43. TR0 = 0; // 关闭定时/计数器044. TR1 = 1; // 启动定时/计数器145. while(1)46. {47. if(K != 1) // 有键按下48. {49. delay_ms(10); // 延时10ms去抖50. if(K != 1) // 确定是有键按下51. {52. while(K != 1); // 等待键松开53. key_to(); // 按键处理54. }55. }56. }57.}58.void key_to() // 按键处理子程序59.{60. key_t++; // 按键次数加161. if(key_t == 1) // 第一次按下62. TR0 = 1; // 启动定时器063. else64. {65. if(key_t == 2) // 第二次按下66. TR0 = 0; // 关闭定时器067. else68. {69. if(key_t == 3) // 第三次按下70. {71. dot = 0; // 三个计数器清零72. sec = 0;73. min = 0;74. key_t = 0; // 按键次数清零75. }76. }77. }78.79.}80.void tiem0(void) interrupt 1 // T/C0中断服务程序(产生10ms时基信号)81.{82. dot++; // 百分之一秒计数器加183. if(dot == 100) // 计数值到10084. {85. dot = 0; // 清零86. sec++; // 秒计数器加1(进位10ms*100=1s)87. if(sec == 60) // 秒计数值到6088. {89. sec = 0; // 秒计数器清零90. min++; // 分计数器加1(进位60s=1m)91. if(min == 100) // 分计数到10092. min = 0; // 分计数器清零93. }94. }95. TH0 = 0xd8; // 重置定时常数96. TL0 = 0xf0;97.}98.void time1(void) interrupt 3 // T/C1中断服务程序(延时1ms数码管动态显示)99.{100. dis[0] = dot % 10; // 百分之一秒计数器个位分离出来赋绐dis[0]101. dis[1] = dot / 10; // 百分之一秒计数器十位分离出来赋绐dis[1]102. dis[3] = sec % 10; // 秒计数器个位赋绐dis[3] 103. dis[4] = sec / 10; // 秒计数器十位赋绐dis[4] 104. dis[6] = min % 10; // 分计数器个位赋绐dis[6] 105. dis[7] = min / 10; // 分计数器十位赋绐dis[7] 106.107.P0 = dis_code[dis[dis_r]]; // 段码送P0口(dis[0]...dis[7])108.P2 = dis_b; // 位码送P2口109.110. dis_r++; // 偏移量加1,下次中断时显示下个数111. dis_r &= 0x07; // dis_r增到8时自动清0(使之在0到7间循环)112.113. dis_b = _cror_(dis_b,1); // 位码循环右移,下次中断时选通下个数码管114.115.TH1 = 0xfc; // 重置定时常数116.TL1 = 0x18;117.118.}119.void delay_ms(uchar ms) // 延时毫秒@12M,ms最大值255120.{121.uchar i;122.while(ms--)123.for(i = 0; i < 124; i++);124.}。
六位数码管显示时分秒
六位数码管显示时分秒,通过四个按键进行时间的控制。
按下"调时"按键,时间显示停止;按下"选择时分秒"按键,数码管上方的发光二极管会点亮,对应着选中的要修改的时间是小时、分钟还是秒;按下"按下增加"按键,选中的时间将会增加;按下"完成"按键,时间继续显示。
已通过proteus仿真,电路图如下所示,希望大家多多指点,积极留言://编程:jumpmysoul#include<reg51.h>#define ulong unsigned longchar tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳数码管数字码char tab_dp[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x70,0x10};//共阳数码管数字码(带小数点)#define LED P0 //P0为数码管的段选#define LIGHT P1 //P1为时分秒位的指示灯#define WS P2 //P2为数码管的位选sbit time_change=P3^0; //P3^0为“调时”按键sbit time_choose=P3^1; //P3^1为“选择时分秒”按键sbit time_inc=P3^2; //P3^2为“增加”按键sbit time_ok=P3^3; //P3^3为“完成”按键ulong t;ulong sec,min,hour,sec_ge,sec_shi,min_ge,min_shi,hour_ge,hour_shi; //定义秒,分,时,秒的个位,十位,分的个位,十位,时的个位,十位int choose_n; //按下“选择时分秒”按键的次数0 1160 160 1241141231 116021603124。
单片机6个数码管上显示时分秒
//6个数码管上依次显示时、分、秒,//按下S2一次,停止计时,按下S2两次,开始计时;//停止计时后,按下S3一次,小时数加1;//停止计时后,按下S4一次,分钟数加1;//停止计时后,按下S5一次,秒数加1#include<reg52.h>//头文件#define uint unsigned int#define uchar unsigned char //宏定义sbit wela=P2^7;sbit dula=P2^6;//数码管锁存位声明sbit s2=P3^4;sbit s3=P3^5;sbit s4=P3^6;sbit s5=P3^7;//独立按键位声明uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0-9段码uchar code table1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};//位码uint num=0,num1,num2;//全局变量uchar shi,fen,miao;void delay(uint);void display(uchar,uchar);void keyscan();void main(){TMOD=0x01;TH0=(65536-50000)/256;//赋初值TL0=(65536-50000)%256;EA=1;//中断使能ET0=1;TR0=1;while(1){shi=num/3600;fen=num%3600/60;miao=num%60;if(shi==13)num=num%3600;if(fen==60)num=num/3600*3600+num%60;if(miao==60)num=num/60*60;keyscan();//按键if(num2==0){display(shi,0);//显示display(fen,2);display(miao,4);}else{switch(num2){case 1:display(shi,0);display(fen,2);display(miao,4);break;case 2:display(shi,0);break;case 3:display(fen,2);break;case 4:display(miao,4);break;}}}}void delay(uint x){uint i,j;//局部变量for(i=0;i<x;i++)for(j=0;j<110;j++);//延时子函数}void display(uchar disnum,uchar weinum){uchar sh,ge;sh=disnum/10;ge=disnum%10;P0=0xff;wela=1;wela=0;P0=table[sh];dula=1;dula=0;P0=table1[weinum];wela=1;wela=0;delay(2);//十位显示P0=0xff;wela=1;wela=0;P0=table[ge];dula=1;dula=0;P0=table1[weinum+1];wela=1;wela=0;delay(2);//个位显示*/}void keyscan(){if(s2==0){delay(15);//消抖if(s2==0){TR0=0;num2++;while(!s2);//松手检测if(num2==5){num2=0;TR0=1;}}}if(num2!=0){if(s3==0){delay(5);if(s3==0){while(!s3);num=num+3600;}}if(s4==0){delay(5);if(s4==0){num=num+60;while(!s4);}}if(s5==0){delay(5);if(s5==0){num++;while(!s5);}}}}void time0() interrupt 1{TH0=(65536-50000)/256;//赋初值TL0=(65536-50000)%256;num1++;if(num1==20){num1=0;num++;//if(num==43200)//num=0;}}。
电子技术课程设计---秒表数码显示电路数字秒表电路设计
电子技术课程设计---秒表数码显示电路数字秒表电路设计一,课题名称秒表数码显示电路数字秒表电路设计二,设计要求1. 设计1MHz时钟:2.完成0~59小时59分59秒范围内的计时:3.通过按键设置计时起点与终点,计时精度为10ms:4. 计时暂停、恢复和清零功能;5. 计时时间报警功能;三,比较和选定设计的系统方案,画出系统框图1.1,课题分析与方案确定本题要求计数至59时59分59秒,所以要用到六个数码管。
计数精度为10ms,及计数分辨率为0.01秒,所以需要相应的信号发生器。
暂停功能和清零功能通过开关进行控制。
最终方案是使用六个74LS160,六个数码管,以及两个VCC来进行设计,总体采用同步预置法。
1.2,总体设计方案及系统框图数字式秒表,必须有数字显示。
按设计要求,必须用数码管来做显示器。
题目要求59时59分59秒,则需要六个数码管。
要求计数分辨率为0.01秒,则需要相应频率的信号发生器。
总体上,采用六个74LS160计数器。
使用同步预置法,实现59时59分59秒的计时。
将两个74LS160组合,并通过同步预置法实现六十进制,六个计数器分成三组,分别对应时、分、秒的功能。
四,单元电路设计、参数计算和器件选择1.1,各个模块单元设计74LS160 芯片同步十进制计数器(直接清零)作用:1、用于快速计数的内部超前进位.2、用于n 位级联的进位输出.3、同步可编程序.4、有置数控制线.5、二极管箝位输入.6、直接清零.7、同步计数.74LS160的功能真值表。
功能表:图20引脚图:图21逻辑符号及其引脚功能图:图2274ls160中的ls代表为低功耗肖特基型芯片。
74160为标准型芯片。
结构功能一样。
2、160为可预置的十进制计数器,共有54/74160 和54/74LS160 两种线路结构型式,其主要电器特性的典型值如表3-1(不同厂家具体值有差别): 异步清零端/MR1 为低电平时,不管时钟端CP信号状态如何,都可以完成清零功能。
6位数码管时钟
uchartime_y05s=0;
ucharbit_shan_f=0;
voiddelayms(uintxms)
{
uinti,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void display(ucharhour,ucharmin,ucharsec)
#include<reg52.h>
#defineucharunsigned char
#defineuintunsignedint
sbitdula=P2^6;
sbitwela=P2^7;
sbitkey1=P3^4;
sbitkey2=P3^5;
sbitkey3=P3^6;
sbitkey4=P3^7;
ucharcode table[]={
{
hourshi=hour/10;
hourge=hour%10;
minshi=min/10;
minge=min%10;
secshi=sec/10;
secge=sec%10;
if(shanshuo_s&&(bit_shan_f==1)) //送关闭显示这个功能可以在按键的时候在价格位标志可以判断是否需要闪烁
hour--;
if(hour<=0)
hour=23;
while(!key3)
{
display(hour,min,sec);
}
}
}
}
if(key4==0)
{
delayms(8);
if(key4==0)
{
aa=0;
num=0;
六位共阴数码管显示时钟程序
#include<reg52.h> // 包含51 单片机寄存器定义的头文件#define uchar unsigned char#define uint unsigned intsbit dula=P2^6;sbit wela=P2^7;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};uchar int_time ; //中断次数计数变量uchar second; //秒计数变量uchar minute; //分钟计数变量uchar hour; //小时计数变量void delay(uint z) //延时函数,延时约1ms{uchar x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}/****************************************************************** 函数功能:显示秒的子程序入口参数:s******************************************************************* */ void DisplaySecond(uchar s){wela=1;P0=0xef; //DS5点亮wela=0;P0=0xff; //消隐dula=1;P0=table[s/10]; //显示十位dula=0;delay(1);wela=1;P0=0xdf; //DS6点亮wela=0;P0=0xff; //消隐dula=1;P0=table[s%10]; //显示个位dula=0;delay(1);}/****************************************************************** 函数功能:显示分钟的子程序入口参数:m******************************************************************* */ void DisplayMinute(uchar m){wela=1;P0=0xfb; //DS3点亮wela=0;P0=0xff; //消隐dula=1;P0=table[m/10]; //显示十位dula=0;delay(1);wela=1;P0=0xf7; //DS4点亮wela=0;P0=0xff; //消隐dula=1;P0=table[m%10]; //显示个位dula=0;delay(1);wela=1;P0=0xf7; //DS4点亮wela=0;P0=0xff; //消隐dula=1;P0=0x80; //显示'.'dula=0;delay(1);}/****************************************************************** 函数功能:显示小时的子程序入口参数:h******************************************************************* */ void DisplayHour(uchar h){wela=1;P0=0xfe; //DS1点亮wela=0;P0=0xff; //消隐dula=1;P0=table[h/10]; //显示十位dula=0;delay(1);wela=1;P0=0xfd; //DS2点亮wela=0;P0=0xff; //消隐dula=1;P0=table[h%10]; //显示个位dula=0;delay(1);wela=1;P0=0xfd; //DS2点亮wela=0;P0=0xff; //消隐dula=1;P0=0x80; //显示'.'dula=0;delay(1);}/************初始化************/void init(){TMOD=0x01; //使用定时器T0EA=1; //开中断总允许ET0=1; //允许T0 中断TH0=(65536-50000)/256; //定时器高八位赋初值TL0=(65536-50000)%256; //定时器低八位赋初值TR0=1;int_time=0; //中断计数变量初始化second=0; //秒计数变量初始化minute=0; //分钟计数变量初始化hour=0; //小时计数变量初始化}/****************************************************************** 函数功能:主函数******************************************************************* */void main(){init();while(1){DisplaySecond(second); //调用秒显示子程序delay(1);DisplayMinute(minute); //调用分钟显示子程序delay(1);DisplayHour(hour); //调用小时显示子程序delay(1);}}/****************************************************************** 函数功能:定时器T0的中断服务子程序******************************************************************* */ void interserve() interrupt 1 //using Time0{int_time++;if(int_time==1)//控制速度{int_time=0; //中断计数变量清0second++; //秒计数变量加1}if(second==60){second=0; //如果秒计满60,将秒计数变量清0minute++; //分钟计数变量加1}if(minute==60){minute=0; //如果分钟计满60,将分钟计数变量清0 hour++; //小时计数变量加1}if(hour==24){hour=0; //如果小时计满24,将小时计数变量清0 }TH0=(65536-50000)/256; //定时器重新赋初值TL0=(65536-50000)%256;}。
【设计】六位数码管电子钟
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持. 【关键字】设计毕业设计(论文)(2011届)题目六位数码管电子钟系别信息电子系专业信息电子工程管理班级信电0811姓名张淑娇指导教师2011年月日目录摘要 (1)文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持. 4六位数码管电子钟【摘要】数字钟是一个将“ 时”,“分”,“秒”显示于人的视觉器官的计时装置。
它的计时周期为24小时,显示满刻度为23时59分59秒,另外应有校时功能。
因此,一个基本的数字钟电路主要由译码显示器、“时”,“分”,“秒”计数器、校时电路、报时电路和振荡器组成。
干电路系统由秒信号发生器、“时、分、秒”计数器、译码器及显示器、校时电路、整点报时电路组成。
秒信号产生器是整个系统的时基信号,它直接决定计时系统的精度,一般用石英晶体振荡器加分频器来实现。
将标准秒信号送入“秒计数器”,“秒计数器”采用60进制计数器,每累计60秒发出一个“分脉冲”信号,该信号将作为“分计数器”的时钟脉冲。
“分计数器”也采用60进制计数器,每累计60分钟,发出一个“时脉冲”信号,该信号将被送到“时计数器”。
“时计数器”采用24进制计时器,可实现对一天24小时的累计。
译码显示电路将“时”、“分”、“秒”计数器的输出状态送到七段显示译码器译码,通过七位LED七段显示器显示出来。
整点报时电路时根据计时系统的输出状态产生一脉冲信号,然后去触发一音频发生器实现报时。
校时电路时用来对“时”、“分”、“秒”显示数字进行校对调整的。
数字钟是以不同的计数器为基本单元构成的,它的用途十分广泛,只要有计时、计数的存在,便要用到数字钟的原理及结构;同时在日期中,它以其小巧,价格低廉,走时精度高,使用方便,功能多,便于集成化而受广大消费的喜爱。
【关键词】:校时电路、报时电路、振荡器第一章数字电子钟的设计方案论证1.1数字电子钟的应用意义数字电子钟是用数字电路实现“时”、“分”、“秒”数字显示的计时装置,主要由振荡器、分频器、计数器、译码显示器、校时电路、报时电路等六部分组成。
多功能数字秒表
摘要近年来随着科技的飞速发展,单片机的应用正在不断的走向深入。
本文阐述了基于单片机的数字电子秒表设计。
本设计主要特点是计时精度达到0.01s,具有多组数据记录功能,一键实现开始、暂停、清零功能。
解决了传统的由于计时精度不够造成的误差和不能记录多组数据局限性。
是各种体育竞赛的必备设备之一。
本设计的数字电子秒表系统采用AT89S52单片机为中心器件,利用其定时器/计数器定时和记数的原理,结合显示电路、LED数码管以及外部控制电路来设计计时器。
将软、硬件有机地结合起来,使得系统能够实现六位LED显示,显示时间为0~59分59秒99毫秒,计时精度为0.01秒,能正确地进行计时,同时能记录10组时间,并能用上下翻动键对计时时间进行查询。
其中软件系统采用C语言编写程序,包括显示程序,定时中断服务,延时程序等,硬件系统利用PROTEUS强大的功能来实现,简单切易于观察,在仿真中就可以观察到实际的工作状态。
关键词:单片机;数字电子秒表;仿真;LCDABSTRACTIn recent years, with the rapid development of science and technology, the application of SCM is unceasingly to the deep. This article elaborated the digital electronic stopwatch design based on single chip microcomputer. This design main characteristic is timing accuracy reached 0.01 s, has the function of multiple data record, a key to realize the start, pause, reset function. Solve the traditional due to timing error caused by the precision is not enough and can't record of data limitations. Is one of the necessary equipment of various sports competitions.The design of digital electronic stopwatch system USES AT89S52 single chip processor as the center, use the timer/counter timing and the principle of representation, combinedwith the display circuit, LED digital tube and external control circuit to design the timer. The software and hardware organically, enables the system to realize the six LED display, show time for 0 ~ 59 minutes 59 seconds 99 milliseconds, timing accuracy of 0.01 seconds, can correctly on time, at the same time can record 10 groups of time, and can turn up and down keys to inquires the clock time. Software using C language program, including display program, timer interrupt service, time delay procedures, hardware systems use PROTEUS powerful functions, simple and easy to observe, can be observed in the simulation of the actual working condition.Key words SCM; Digital electronic stopwatch; The simulation; LCD目录一、概述 (4)1、意义: (4)2、功能 (4)二、硬件电路设计及描述 (4)1、方案及设计要求: (4)2、仿真图、PCB板图、成品图 (6)3、芯片资料: (9)4、元件清单: (9)三、软件设计流程及描述 (10)1、程序流程图 (10)2、源程序代码 (10)四、测试 (22)五、总结 (23)参考文献 (23)致谢 (24)一、概述1、意义:时间是日常生活、体育竞技、工业、医学、航天等领域最常遇到的一个物理量。
6位LED 计时器IR 时间 日期温度, 正倒计时 秒表
六位数LED 计时器IR 遥控器说明书一,功能说明A :HH :MM :SS 格式的12/24小时制时钟。
B :MM — —DD 和DD — —MM 格式的日期。
C :华氏度和摄氏度。
时间、日期、温度循环显示。
显示时间分别为T1、T2,T3,可进行编辑,当所编辑的显示时间为0时,不显示该项。
D :HH:MM:SS 正倒计时E :MM:SS :ss (1/10s)(1/100s)秒表编辑键停止键秒表设置键(无秒表功能时对5英寸及以上产品有亮度调节功能)电源键 开始键 计时器键亮度调节键(有秒表功能的5英寸以上产品有效) 复位键数字键二,遥控器操作步骤 1,时间日期温度设置说明若感应温度低于实际,需增加如3℃若感应温度高于实际需减少如2 按屏幕数字闪烁 校准当前时间。
如10:40:10按键保存日期设置,屏幕显示1———00,设置时间停留时长T1如1———04,则日期停留4秒按保存时间设置,屏幕显示00——00进入日期校准,如07——22按键,屏幕显示2———00,设置日期停留时长T2 如2———05,则日期将停留5秒按键,屏幕显示3———00,设置温度停留时长T3如1———06,则温度将停留6秒 按键保存温度停留时长,屏幕显示4———00 (4———00为温度补偿格式, 设置方法按键保存温度补偿值,屏幕显示5——000,进行时间日期温度格式的设置(左边第一个0号位为0时显示24小时制时间,当为1时显示12小时制时间。
第二个0号位0时显示MM :DD 格式日期,当为1时显示DD :MM 格式日期,第三个0号位为0时显示摄氏温度,当为1时显示华氏温度)按键保存设置输入3 按保存设置按键 按键,屏幕显示“-”输入2按保存设置2,正计时 倒计时如有需要,可按停止键停止按进入正计时按编辑时间,如00:00:10 即从10秒开始正计时按键或开始正计时按键,编辑时间, 如00:00:10,即从10秒开始倒计时按键保存按键或开始倒计时按键保存按键进入倒计时3,SS:ss(1/10s)(1/100s) 秒表按进入秒表正计时,显示00:00:00按键开始正计时按进入秒表倒计时按编辑,如00:00:10,即从10秒钟开始倒计时按键保存按键开始倒计时。
基于单片机的电子时钟6位LED数码管显示
数码管显示电子时钟设计一•功能要求1•数字电子时钟最主要是LED数码管显示功能,以24小时为一个周期,显示时间时、分、秒。
2.具有校时功能,可以对时、进行单独校对,使其校正到标准时间。
二•方案论证1.数字时钟方案数字时钟是本设计的最主要的部分。
根据需要,可利用两种方案实现。
方案一:本方案采用Dallas公司的专用时钟芯片DS12887A O该芯片部采用石英晶体振荡器,其芯片精度不大于10ms/年,且具有完备的时钟闹钟功能,因此,可直接对其以用于显示或设置,使得软件编程相对简单。
为保证时钟在电网电压不足或突然掉电等突发情况下仍能正常工作,芯片部包含锂电池。
当电网电压不足或突然掉电时,系统自动转换到部锂电池供电系统。
而且即使系统不上电, 程序不执行时,锂电池也能保证芯片的正常运行,以备随时提供正确的时间。
方案二:本方案完全用软件实现数字时钟。
原理为:在单片机部存储器设三个字节分别存放时钟的时、分、秒信息。
利用定时器与软件结合实现1秒定时中断,每产生一次中断,存储器相应的秒值加1;若秒值达到60,则将其清零,并将相应的分字节值加1;若分值达到60,则清零分字节,并将时字节值加1;若时值达到24,则将十字节清零。
该方案具有硬件电路简单的特点。
但由于每次执行程序时,定时器都要重新赋初值,所以该时钟精度不高。
而且,由于是软件实现,当单片机不上电,程序不执行时,时钟将不工作。
基于硬件电路的考虑,本设计采用方案二完成数字时钟的功能。
2.数码管显示方案方案一:静态显示。
所谓靜态显示,就是当显示器显示某一字符时,相应的发光二极管恒定的导通或截止。
该方式每一位都需要一个8位输出口控制。
静态显示时较小的电流能获得较高的亮度,且字符不闪烁。
但当所显示的位数较多时,静态显示所需的I/O 口太多,造成了资源的浪费。
方案二:动态显示。
所谓动态显示就是一位一位的轮流点亮各个位,对于显示器的每一位来说,每隔一段时间点亮一次。
利用人的视觉暂留功能可以看到整个显示,但必须保证扫描速度足够快,字符才不闪烁。
基于单片机的电子时钟6位LED数码管显示
数码管显示电子时钟设计一.功能要求1.数字电子时钟最主要是LED数码管显示功能,以24小时为一个周期,显示时间时、分、秒。
2.具有校时功能,可以对时、进行单独校对,使其校正到标准时间。
二.方案论证1.数字时钟方案数字时钟是本设计的最主要的部分。
根据需要,可利用两种方案实现。
方案一:本方案采用Dallas公司的专用时钟芯片DS12887A。
该芯片内部采用石英晶体振荡器,其芯片精度不大于10ms/年,且具有完备的时钟闹钟功能,因此,可直接对其以用于显示或设置,使得软件编程相对简单。
为保证时钟在电网电压不足或突然掉电等突发情况下仍能正常工作,芯片内部包含锂电池。
当电网电压不足或突然掉电时,系统自动转换到内部锂电池供电系统。
而且即使系统不上电,程序不执行时,锂电池也能保证芯片的正常运行,以备随时提供正确的时间。
方案二:本方案完全用软件实现数字时钟。
原理为:在单片机内部存储器设三个字节分别存放时钟的时、分、秒信息。
利用定时器与软件结合实现1秒定时中断,每产生一次中断,存储器内相应的秒值加1;若秒值达到60,则将其清零,并将相应的分字节值加1;若分值达到60,则清零分字节,并将时字节值加1;若时值达到24,则将十字节清零。
该方案具有硬件电路简单的特点。
但由于每次执行程序时,定时器都要重新赋初值,所以该时钟精度不高。
而且,由于是软件实现,当单片机不上电,程序不执行时,时钟将不工作。
基于硬件电路的考虑,本设计采用方案二完成数字时钟的功能。
2.数码管显示方案方案一:静态显示。
所谓静态显示,就是当显示器显示某一字符时,相应的发光二极管恒定的导通或截止。
该方式每一位都需要一个8 位输出口控制。
静态显示时较小的电流能获得较高的亮度,且字符不闪烁。
但当所显示的位数较多时,静态显示所需的I/O口太多,造成了资源的浪费。
方案二:动态显示。
所谓动态显示就是一位一位的轮流点亮各个位,对于显示器的每一位来说,每隔一段时间点亮一次。
六位贴片数字电子时钟 KC_8023
例如,如果选用12MHz晶振,则最高计数频率为0.5MHz。虽然对 外部输入信号的占空比无特殊要求,但为了确保某给定电平在变化前至 少被采样一次,外部计数脉冲的高电平与低电平保持时间均需在一个机 器周期以上。 当CPU用软件给定时器设置了某种工作方式之后,定时器就会按设 定的工作方式独立运行,不再占用CPU的操作时间,除非定时器计满溢 出,才可能中断CPU当前操作。CPU也可以重新设置定时器工作方式, 以改变 定时器的操作。由此可见,定时器是单片机中效率高而且工作灵活的部 件。 综上所述,我们已知定时器/计数器是一种可编程部件,所以在定时 器/计数器开始工作之前,CPU必须将一些命令(称为控制字)写入定 时/计数器。将控制字写入定时/计数器的过程叫定时器/计数器初始化。 在初始化过 程中,要将工作方式控制字写入方式寄存器,工作状态字(或相关位) 写入控制寄存器,赋定时/计数初值。 控制寄存器 定时器/计数器T0和T1有2个控制寄存器-TMOD和 TCON,它们分别用来设置各个定时器/计数器的工作方式,选择定时 或计数功能,控制启动运行,以及作为运行状态的标志等。其中, TCON寄存器中 另有4位用于中断系统。
各位定义如下: TF1:定时器 1 溢出标志位。当字时器 1 计满溢出时,由硬件使 TF1 置 “1”,并且申请中断。进入中断服务程序后,由硬件自动清“0”,在查询 方式下用软件清“0”。 TR1:定时器 1 运行控制位。由软件清“0”关闭定时器 1。当 GATE=1, 且 INT1 为高电平时,TR1 置“1”启动定时器 1;当 GATE=0,TR1 置 “1”启动定时器 1。
TF0:定时器 0 溢出标志。其功能及操作情况同 TF1。 TR0:定时器 0 运行控制位。其功能及操作情况同 TR1。 IE1:外部中断 1 请求标志。 IT1:外部中断 1 触发方式选择位。 IE0:外部中断 0 请求标志。 IT0:外部中断 0 触发方式选择位。 TCON 中低 4 位与中断有关,我们将在下节课讲中断时再给予讲解。 由于 TCON 是可以位寻址的,因而如果只清溢出或启动定时器工作, 可以用位操作命令。例如:执行“CLR TF0”后则清定时器 0 的溢出; 执行“SETB TR1”后可启动定时器 1 开始工作(当然前面还要设置方 式定)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
∙/************************************************************************** ∙* 标题: 秒表-六位数码管有效显示(C51)
∙* 作者: wentao
∙
∙* 日期: 2007.3.3
∙* 软件: Keil C51 V8.02
∙* 芯片: AT89X51
∙* 说明: 实验板实测通过,数码管为8位共阳
∙* 声明: 自用存档!另仅供需要的朋友参考,请勿用做不道德转载及商业用途!
∙**************************************************************************/∙
∙#include <reg51.h>
∙#include <intrins.h>
∙#define uchar unsigned char
∙
∙void delay_ms(uchar ms); // 延时毫秒@12M,ms最大值255
∙void key_scan(); // 按键扫描
∙void key_to(); // 按键处理
∙
∙uchar code dis_code[11] = {0xc0,0xf9,0xa4,0xb0,0x99, //段码表
∙// 0 1 2 3 4 对应内容
∙ 0x92,0x82,0xf8,0x80,0x90,0xbf};
∙// 5 6 7 8 9 -
∙
∙uchar data dis[8]; // dis[0]为百分之一秒值,dis[1]为十分之一秒值
∙// dis[2],dis[5]为'-'段码的偏移量
∙// dis[3]为秒个位值,dis[4]为秒十位值
∙// dis[6]为分个位值,dis[7]为分十位值
∙
∙uchar data dot = 0; // 百分之一秒计数器(0.00s-0.99s)
∙uchar data sec = 0; // 秒计数器(00s-59s)
∙uchar data min = 0; // 分计数器(00m-99m)
∙
∙uchar data dis_b; // dis_b为位码选通数码管
∙uchar data dis_r; // dis_r为取段码时的偏移量
∙
∙uchar data key_t = 0; // 按键次数,初始为0
∙
∙sbit K = P1^4; // K键与P1.4相连
∙
∙void main()
∙ {
∙P2 = 0xff; // 关所有数码管
∙P1 = 0xff; // p1为准双向口,作输入时先写1
∙ dis[2] = 10; // '-'在段码表中偏移量为10
∙ dis[5] = 10; // '-'在段码表中偏移量为10
∙ dis_b = 0x7f; // 初始选通P2.7口数码管
∙ dis_r = 0; // 初始化偏移量为0
∙
∙TMOD = 0x11; // 定时/计数器0,1工作于方式1
∙TH0 = 0xd8; // 预置定时常数55536(d8f0),产生10ms时基信号
∙TL0 = 0xf0;
∙TH1 = 0xfc; // 预置定时常数64536(fc18),产生1ms间隔用于动态显示∙TH1 = 0x18;
∙EA = 1; // 开总中断
∙ET0 = 1; // 定时/计数器0允许中断
∙ET1 = 1; // 定时/计数器1允许中断
∙TR0 = 0; // 关闭定时/计数器0
∙TR1 = 1; // 启动定时/计数器1
∙while(1)
∙ {
∙if(K != 1) // 有键按下
∙ {
∙ delay_ms(10); // 延时10ms去抖
∙if(K != 1) // 确定是有键按下
∙ {
∙while(K != 1); // 等待键松开
∙ key_to(); // 按键处理
∙ }
∙ }
∙ }
∙ }
∙void key_to() // 按键处理子程序
∙ {
∙ key_t++; // 按键次数加1
∙if(key_t == 1) // 第一次按下
∙TR0 = 1; // 启动定时器0
∙else
∙ {
∙if(key_t == 2) // 第二次按下
∙TR0 = 0; // 关闭定时器0
∙else
∙ {
∙if(key_t == 3) // 第三次按下
∙ {
∙ dot = 0; // 三个计数器清零
∙ sec = 0;
∙ min = 0;
∙ key_t = 0; // 按键次数清零
∙ }
∙ }
∙ }
∙
∙ }
∙void tiem0(void) interrupt 1 // T/C0中断服务程序(产生10ms时基信号)
∙ {
∙ dot++; // 百分之一秒计数器加1
∙if(dot == 100) // 计数值到100
∙ {
∙ dot = 0; // 清零
∙ sec++; // 秒计数器加1(进位10ms*100=1s)
∙if(sec == 60) // 秒计数值到60
∙ {
∙ sec = 0; // 秒计数器清零
∙ min++; // 分计数器加1(进位60s=1m)
∙if(min == 100) // 分计数到100
∙ min = 0; // 分计数器清零
∙ }
∙ }
∙TH0 = 0xd8; // 重置定时常数
∙TL0 = 0xf0;
∙ }
∙void time1(void) interrupt 3 // T/C1中断服务程序(延时1ms数码管动态显示) ∙ {
∙ dis[0] = dot % 10; // 百分之一秒计数器个位分离出来赋绐dis[0]
∙ dis[1] = dot / 10; // 百分之一秒计数器十位分离出来赋绐dis[1]
∙ dis[3] = sec % 10; // 秒计数器个位赋绐dis[3]
∙ dis[4] = sec / 10; // 秒计数器十位赋绐dis[4]
∙ dis[6] = min % 10; // 分计数器个位赋绐dis[6]
∙ dis[7] = min / 10; // 分计数器十位赋绐dis[7]
∙
∙P0 = dis_code[dis[dis_r]]; // 段码送P0口(dis[0]...dis[7])
∙P2 = dis_b; // 位码送P2口
∙
∙ dis_r++; // 偏移量加1,下次中断时显示下个数
∙ dis_r &= 0x07; // dis_r增到8时自动清0(使之在0到7间循环) ∙
∙ dis_b = _cror_(dis_b,1); // 位码循环右移,下次中断时选通下个数码管
∙
∙TH1 = 0xfc; // 重置定时常数
∙TL1 = 0x18;
∙
∙ }
∙void delay_ms(uchar ms) // 延时毫秒@12M,ms最大值255 ∙ {
∙uchar i;
∙while(ms--)
∙for(i = 0; i < 124; i++);
∙ }。