秒表-六位数码管有效显示2

合集下载

FPGA课程设计题目

FPGA课程设计题目

F PG A课程设计题目-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN1、彩灯控制器设计内容及要求:设计一个彩灯控制器,具体设计要求如下:(1)要有多种花型变化(至少设计5种),led至少16路(2)多种花型可以自动变化(3)彩灯变换的快慢节拍可以选择(4)具有清零开关(5)完成全部流程:设计规范文档、模块设计、代码输入、仿真、下载验证等,最后就课程设计本身提交一篇课程设计报告。

2、数字秒表设计内容及要求:设计一用于体育比赛的数字秒表,具体设计要求如下:(1)6位数码管显示,其中两位显示min,四位显示see,显示分辨率为0.01 s。

(2)秒表的最大计时值为59min59.99see。

(3)设置秒表的复位/启动键,按一下该键启动计时,再按即清0。

依此循环。

(4)设置秒表的暂行/继续键。

启动后按一下暂行,再按继续。

依此循环。

(5)完成全部流程:设计规范文档、模块设计、代码输入、仿真、下载验证等,最后就课程设计本身提交一篇课程设计报告。

3、交通信号控制系统设计内容及要求:设计一个十字路口交通控制系统,具体设计要求如下:(1)东西(用A表示)、南北(用B表示)方向均有绿灯、黄灯、红灯指示,其持续时间分别是40秒、5秒和45秒, 交通灯运行的切换示意图和时序图分别如图1、图2所示。

(2) 系统设有时钟,以倒计时方式显示每一路允许通行的时间。

(3)当东西或南北两路中任一路出现特殊情况时,系统可由交警手动控制立即进入特殊运行状态,即红灯全亮,时钟停止计时,东西、南北两路所有车辆停止通行;当特殊运行状态结束后,系统恢复工作,继续正常运行。

图1 交通灯运行切换示意图B红CPA绿A黄A红B黄B绿5S5S图2 交通灯时序图(4)完成全部流程:设计规范文档、模块设计、代码输入、仿真、下载验证等,最后就课程设计本身提交一篇课程设计报告。

4、简易密码锁设计内容及要求设计一个4位串行数字锁。

单片机60分钟倒计时秒表

单片机60分钟倒计时秒表

60分钟倒计时秒表功能:1.带有启动键Start,暂停键Pause,停止键Stop,复位键Reset;2.4位数码管显示分(两位)秒(两位);3.按启动键启动从60分开始倒计时,按暂停键暂停,显示保持原来计时时间,再次按启动键继续计时,按停止键停止计时,复位键复位,到零停止计时.4.按停止键后,可按中间的4个键,分别对应分的十位(2键),个位(4键),和秒的十位(5键),个位(9键),按动一下,相应的位增1,并保证时间的正确值,再按一次停止键,保存设置值,按其它键则放弃设置时间值,恢复原来的时间.电路图:计时器工作模式:编码(54H单元) 当前工作模式00H Reset01H Start02H Pause03H Stop主程序流程:主程序代码段:ORG 0000HLJMP MAINORG 000BHLJMP TIMER0ORG 1000HMAIN: ACALL INIT ;初始化定时器SETB EA ;开总中断SETB ET0 ;开定时器0中断MOV A, #03H ;设置8155的工作模式, PA, PB输出, PC输入.MOV DPTR, #7F00HMOVX @DPTR, ABEGIN: ACALL DISACALL CLEARACALL CCSCANJNZ INK1AJMP BEGININK1: ACALL DISACALL CLEARACALL CCSCANJNZ INK2AJMP BEGININK2: MOV R2, #7FH ;从最左边列开始扫描MOV R4, #00HCOLUM: MOV DPTR, #7F02HMOV A, R2MOVX @DPTR, AINC DPTRMOVX A, @DPTRJB ACC.2, LONEMOV A, #00HAJMP KCODELONE: JB ACC.1, NEXTMOV A, #04HKCODE: ADD A, R4ACALL PUTBUFKON: ACALL DISACALL CLEARACALL CCSCANJNZ KONNEXT: INC R4MOV A, R2JNB ACC.4, KERRRR AMOV R2, AAJMP COLUMKERR: AJMP BEGINCCSCAN: MOV DPTR, #7F02HMOV A, #00HMOVX @DPTR, AINC DPTRMOVX A, @DPTRCPL AANL A, #03HRETCLEAR: MOV DPTR, #7F01HMOV A, #00HMOVX @DPTR, ARETINIT: MOV 53H, #06H ;分十位MOV 52H, #00H ;分个位MOV 51H, #00H ;秒十位MOV 50H, #00H ;秒个位MOV 54H, #00H ;存放当前工作模式, 00:Reset, 01 Start, 02 Pause, 03 StopMOV 55H, #0AH ;定时计数用, 定时器每次中断0.1s, 计数10次, 定时1sCLR TR0MOV TMOD, 01H ;定时器工作在方式1, 16位定时器MOV TH0, #3CHMOV TL0, #0B0HRETDIS: PUSH ACCPUSH 00HPUSH 03HMOV A, #03HMOV DPTR, #7F00HMOVX @DPTR, AMOV R0, #50HMOV R3, #0EFHMOV A, 54HCJNE A, #03H, DIS0MOV R0, #60HDIS0: MOV A, R3AGAIN: MOV DPTR, #7F02HMOVX @DPTR, AMOV A, @R0MOV DTPR, DAT ASMOVC A, @A+DPTRMOV DPTR, #7F01HMOVX @DPTR, AACALL DL1MSINC R0MOV A, R3JNB ACC.0, OUTRL AMOV R3, AAJMP AGAINOUT: POP 03HPOP 00HPOP ACCRETDAT AS: DB 03FH, 06H, 05BH, 04FH, 066H, 06DH, 07DH DB 07H, 7FH, 6FH, 77H, 7CH, 39H, 5EH, 79H, 71HDL1MS: MOV R7, #01HDL0: MOV R6, #0FFHDL1: DJNZ R6, DL1DJNZ R7, DL0RETPUTBUF: MOV R1, AJNZ CHKSTAR TACALL RESETFUNCSJMP GOBACKCHKSTAR T: CJNE R1, #03H, CHKPAUSEACALL STAR TFUNCSJMP GOBACKCHKPAUSE: CJNE R1, #04H, CHKSTOPACALL PAUSEFUNCSJMP GOBACKCHKSTOP: CJNE R1, #07H, CHKOTHERACALL STOPFUNCSJMP GOBACKCHKOTHER: ACALL OTHERFUNCGOBACK: RETRESETFUNC: MOV R0, 54HCJNE R0, #00H, RESET0RETCJNE R0, #01H, RESET0RETRESET0: ACALL INITMOV 54H, #00HRETSTAR TFUNC: MOV R0, 54HCJNE R0, #01H, STAR T0RETSTAR T0: MOV 54H, #00HSETB TR0RETPAUSEFUNC: MOV R0, 54HCJNE R0, #01H, PAUSE0CLR TR0MOV 54H, #02HSJMP PAUSE1PAUSE0: CJNE R0, #02H, PAUSE1SETB TR0MOV 54H, #01HPAUSE1: RETSTOPFUNC: MOV R0, 54HCJNE R0, #03H, STOP0MOV 54H, #02HMOV R0, #50HMOV R1, #60HSTOP1: MOV A, @R1MOV @R0, AINC R0INC R1CJNE R0, #54H, STOP1RETSTOP0: CLR TR0MOV 54H, #03HMOV R0, #60HMOV R1, #50HSTOP2: MOV A, @R1MOV @R0, AINC R0INC R1CJNE R1, #54H, STOP2RETOTHERFUNC: MOV R0, 54HCJNE R0, #03H, OTHER0CJNE R1, #01H, OTHER1MOV R0, #63HINC @R0CJNE @R0, #06H, OTHER0MOV @R0, #00HSJMP OTHER0OTHER1: CJNE R1, #02H, OTHER2MOV R0, #62HINC @R0CJNE @R0, #0AH, OTHER0MOV @R0, #00HSJMP OTHER0OTHER2: CJNE R1, #05H, OTHER3MOV R0, #61HINC @R0CJNE @R0, #06H, OTHER0MOV @R0, #00HSJMP OTHER0OTHER3: CJNE R1, #06H, OTHER0MOV R0, #60HINC @R0CJNE @R0, #0AH, OTHER0MOV @R0, #00HSJMP OTHER0OTHER0: RET;使用定时器0, 工作模式1, 定时0.1s, 晶振频率为6MHz;定时器初值X = 65536 –50000 = 15536 = 3CB0HTIMER0: MOV TH0, #3CHMOV TL0, #0B0HDJNZ 55H, EXIT0 ;判断是否已定时中断10, 即1秒MOV 55H, #0AHMOV R0, #50HGOON0: DEC @R0CJNE @R0, #0FFH, EXIT0MOV @R0, #09HINC R0DEC @R0CJNE @R0, #0FFH, EXIT0MOV @R0, #05HINC R0DEC @R0CJNE @R0, #0FFH, EXIT0MOV @R0, #09HINC R0DEC @R0CJNE @R0, #0FFH, EXIT0 ; 倒计时结束, 停止计时, 显示全”0”ACALL INITMOV 53H, #00HMOV 54H, #03HEXIT0: RET。

秒表-六位数码管有效显示2

秒表-六位数码管有效显示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.}。

6位数码管显示

6位数码管显示

6位数码管显示2008年03月29日下午 07:48/******************************************************************** *公司名称:智佳精控技术小组模块名称:segment_led.c功能:六位七段数码管显示模块说明:程序设计:kaixinlaohe设计时间:2008.03.29版本号: 20080329程序说明: 使用环境为AT89S52,兼容51型单片机,晶振12M使用方法:定义一个6位的数组,将数组首地址作参数调用Display_LED(dsi[]) ********************************************************************* /#ifndef SEGMENT_MACRO#define SEGMENT_MACRO#include<reg52.h>#define uchar unsigned char//段码的端口#define Segment_Port P0 //端口从高到低定义为:dp,g,f,e,d,c,b,a//位码的端口,第一位在最左边,在程序中左到右依次显示sbit Segment_Bit1=P2^2;sbit Segment_Bit2=P2^3;sbit Segment_Bit3=P2^4;sbit Segment_Bit4=P2^5;sbit Segment_Bit5=P2^6;sbit Segment_Bit6=P2^7;//延时10msvoid delay();//用数码管显示数据void Display_LED(unsigned char dis[6]);#endif//--------------------------------------------------------------end///////////////////////////////////////////////////////////////////// ////////////////////////******************************************************************** *公司名称:智佳精控技术小组模块名称:segment_led.c功能:六位七段数码管显示模块说明:支持0-F的显示及全开能和全关断的显示程序设计:kaixinlaohe设计时间:2008.03.29版本号: 20080329程序说明: 使用环境为AT89S52,兼容51型单片机,晶振12M使用方法:定义一个6位的数组,将数组首地址作参数调用Display_LED(dsi[]) 若要显示1,则在数组中直接写入1即可若要显示A,则在数组中写入10或0xA若要开通和关断,在数组中写入16,17********************************************************************* /#include <reg52.h>#include "segment_LED.h"//共阳数码管的段码,若为共阳型,将数值取反code ucharled_code[18]={0xC0,0x0F9,0xA4,0xB0,0x99,0x92, //0,1,2,3,4,50x82,0x0F8,0x80,0x90,0x88,0x83, //6,7,8 ,9,A,b0xC6,0xA1,0x86,0x8E,0xFF,0x00}; //C,d,E,f,全关断,全通/********************************************************************函数名:delay()功能:延时10ms说明:入口参数:无返回值:元设计:kaixinlaohe 日期:2008-03-29修改:日期:********************************************************************* **/void delay(){uchar x,y;for (x=0;x<22;x++){for (y=0;y<30;y++){;}}}/********************************************************************函数名:Display_LED(display_data[])功能:用数码管显示数据说明:入口参数:6位数组的首地址返回值:元设计:kaixinlaohe 日期:2008-03-29修改:日期:********************************************************************* **/void Display_LED(unsigned char display_data[]){unsigned char l;for(l=0;l<83;l++){Segment_Port=led_code[display_data[5]]; //**查显示码*******Segment_Bit1=0; //**置显示位*******delay(); //**延时10ms*******Segment_Bit1=1; //**清显示位*******Segment_Port=led_code[display_data[4]];Segment_Bit2=0;delay();Segment_Bit2=1;Segment_Port=led_code[display_data[3]];Segment_Bit3=0;delay();Segment_Bit3=1;Segment_Port=led_code[display_data[2]];Segment_Bit4=0;delay();Segment_Bit4=1;Segment_Port=led_code[display_data[1]];Segment_Bit5=0;delay();Segment_Bit5=1;Segment_Port=led_code[display_data[0]];Segment_Bit6=0;delay();Segment_Bit6=1;}}//--------------------------------------------------- end。

6位LED显示时钟计时器

6位LED显示时钟计时器

时钟计时器的设计目录1. 引言, (2)1.1. 设计意义 (2)1.2. 系统功能要求 (2)1.3. 本组成员所做的工作 (2)2. 方案设计 (2)3. 硬件设计 (3)4. 软件设计 (5)5. 系统调试 (7)6. 设计总结 (8)7. 附录A;源程序 ....................... 错误!未定义书签。

8. 附录B;作品实物图片.................. 错误!未定义书签。

9. 参考文献.............................. 错误!未定义书签。

时钟计时器的设计1.引言1.1. 设计意义时钟计时器在现在应用场合非常的广泛,近年来,随着科学技术的进步和时代的发展,人们对时钟的功能和精度提出了越来越高的要求,各种时钟的设计也越来越重要。

秒表/时钟计时器是在一种计时器上实现两种基本功能的一种器件。

它广泛应用于各种场所,同时,它以其小巧,价格低廉,走时精度高,使用方便,功能多,便于集成化,而受到广大消费者的喜爱引言近年来随着计算机技术的飞速发展,计算机也正式形成了通用计算机系统和嵌入式计算机系统二个分支。

单片机作为最典型的嵌入式系统,由于其微小的体积和极低的成本,广泛应用于家用电器、仪器仪表、工业控制单元以及通信产品中,成为现代电子系统中最重要的智能化工具。

同时数模电技术、微电子技术也快速发展使得大量集成芯片出现,从而实现很多简单功能代替了原来的模拟电路。

这样利用单片机、集成芯片和电子电路就可以很方便的进行设计,其中最典型、现在应用也很多的就是电子产品的设计。

本设计就是利用单片机技术将秒表和时钟两种计时器的功能集中到一种计时装置上,从而实现计时器功能的集成化,使其使用起来更加方便。

本设计的一大特点就是在硬件设计中采用实时时钟芯片来实现计时,大大简化了硬件电路,从而使设计更加简便易行。

1.2. 系统功能要求时钟计时器要求用单片机及6位数码管显示时,分,秒,以24小时计时方式运行,能整点提醒(但蜂鸣器,次数代表整点时间),使用按键开关可实现时,分调整,秒表|时钟功能转换,省电(关闭显示)及定时设定提醒(蜂鸣器)的歌功能。

单片机6个数码管上显示时分秒

单片机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;}}。

6位数码管时钟

6位数码管时钟
bitshanshuo_s=0;
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;

单片机 电子时钟 6位数码管

单片机 电子时钟 6位数码管

org 00h;显示缓冲单元在70H—75H,70H—71H显示秒,72H—73H显示分,74H—75H显示时;时间计数单元在70H—71H(秒)、76H—77H(分)、78H—79H (时),7AH单元放熄灭符(#0AH);计数单元采用BCD码计数,定时器T0设置为50MS溢出中断,为秒计数用,定时器T1为调整时闪烁用;P3.2为调整按钮,P1口为字符输出口,采用共阳显示管。

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 中断入口程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ORG 0000HLJMP STARTORG 0003HRETIORG 000BHLJMP INTT0ORG 0013HRETIORG 001BHLJMP INTT1ORG 0023HRETIORG 002BHRETI; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 主程序;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;START: MOV R0, #70HMOV R7, #0BHMOV 20H, #00H CLEARDISP: MOV @R0, #00H INC R0DJNZ R7,CLEARDISP MOV 7AH,#0AHMOV TMOD,#11HMOV TL0, #0B0HMOV TH0, #3CHMOV TL1, #0B0HMOV TH1, #3CHSETB EASETB ET0SETB TR0MOV R4,#14Hstart1: LCALL DISPLAY JNB P3.2,SETMM1 SJMP Start1SETMM1: LJMP SETMM ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 1秒定时程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;INTT0: PUSH ACCPUSH PSWCLR ET0CLR TR0MOV A,#0B7H ;中断同步修正ADD A,TL0MOV TL0,AMOV A,#3CHADD A,TH0MOV TH0,ASETB TR0DJNZ R4, OUTT0 ADDSS: MOV R4,#14H MOV R0,#71HACALL ADD1 ;加1程序MOV A,R3CLR CCJNE A,#60H,ADDMM ADDMM: JC OUTT0 ACALL CLR0MOV R0,#77H ACALL ADD1MOV A,R3CLR CCJNE A,#60H,ADDHH ADDHH: JC OUTT0 ACALL CLR0MOV R0,#79H ACALL ADD1MOV A,R3CLR CCJNE A,#24H,HOUR HOUR: JC OUTT0 ACALL CLR0OUTT0: MOV 72H,76H MOV 73H,77HMOV 74H,78HMOV 75H,79HPOP PSWPOP ACCSETB ET0RETI; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 闪动调时程序;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;INTT1: PUSH ACC PUSH PSWMOV TL1, #0B0HMOV TH1, #3CHDJNZ R2,INTT1OUTCPL 02HJB 02H,FLASH1MOV 72H,76HMOV 73H,77HMOV 74H,78HMOV 75H,79HINTT1OUT: POP PSW POP ACCRETIFLASH1: JB 01H,FLASH2 MOV 72H,7AHMOV 73H,7AHMOV 74H,78HMOV 75H,79HAJMP INTT1OUT FLASH2: MOV 72H,76H MOV 73H,77HMOV 75H,7AHAJMP INTT1OUT;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 加1程序;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;ADD1: MOV A,@R0 DEC R0SWAP AORL A,@R0ADD A,#01HDA AMOV R3,AANL A,#0FHMOV @R0,AMOV A,R3INC R0SWAP AANL A,#0FHMOV @R0,ARET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 清零程序;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;CLR0: CLR AMOV @R0,ADEC R0MOV @R0,ARET; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 时钟调整程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;SETMM: cLR ET0CLR TR0LCALL DL1SJB P3.2,CLOSEDISMOV R2,#06HSETB ET1SETB TR1SET2: JNB P3.2,SET1 SETB 00HSET4: JB P3.2,SET3 LCALL DL05SJNB P3.2,SETHHMOV R0,#77H ;加1分程序LCALL ADD1MOV A,R3CLR CCJNE A,#60H,HHH HHH: JC SET4LCALL CLR0CLR CAJMP SET4 CLOSEDIS: SETB ET0 SETB TR0CLOSE: JB P3.2,CLOSE LCALL DISPLAYJB P3.2,CLOSE WAITH: JNB P3.2,WAITH LJMP START1 SETHH: CLR 00H SETHH1: JNB P3.2,SET5 SETB 01HSET6: JB P3.2,SET7 LCALL DL05SJNB P3.2,SETOUTMOV R0,#79HLCALL ADD1MOV A,R3CLR CCJNE A,#24H,HOUU HOUU: JC SET6LCALL CLR0AJMP SET6SETOUT: JNB P3.2,SETOUT1 LCALL DISPLAYJNB P3.2,SETOUTCLR 01HCLR 00HCLR 02HCLR TR1CLR ET1SETB TR0SETB ET0LJMP START1SET1: LCALL DISPLAY AJMP SET2SET3: LCALL DISPLAY AJMP SET4SET5: LCALL DISPLAY AJMP SETHH1SET7: LCALL DISPLAY AJMP SET6SETOUT1: LCALL DISPLAY AJMP SETOUT; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 显示程序;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;DISPLAY: MOV R1,#70H MOV R5,#0BFHPLAY: MOV A,R5MOV P2,AMOV A,@R1MOV DPTR,#TABMOVC A,@A+DPTRMOV P0,ALCALL DL1MSINC R1MOV A,R5JNB ACC.1,ENDOUTRR AMOV R5,AAJMP PLAYENDOUT: SETB P2.1MOV P0,#0FFHRETTAB: DB 28h,7eh,0a2h,62h,74h,61h,21h,7ah,20h,60h ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 延时程序;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;DL1MS: MOV R6,#14HDL1: MOV R7,#19HDL2: DJNZ R7,DL2DJNZ R6,DL1RET;DS20MS: ACALL DISPLAY ACALL DISPLAYACALL DISPLAYRETDL1S: LCALL DL05S LCALL DL05SRETDL05S: MOV R3,#20HDL05S1: LCALL DISPLAY DJNZ R3,DL05S1RETEND。

多功能6位电子钟说明书

多功能6位电子钟说明书

多功能6位电子钟说明书一、原理说明:1、显示原理:显示部分主要器件为2位共阳红色数码管,驱动采用PNP型三极管驱动,各端口配有限流电阻,驱动方式为扫描,占用P1.0~P1.6端口。

冒号部分采用4个Φ3.0的红色发光,驱动方式为独立端口驱动,占用P1.7端口。

2、键盘原理:按键S1~S3采用复用的方式与显示部分的P3.5、P3.4、P3.2口复用。

其工作方式为,在相应端口输出高电平时读取按键的状态并由单片机支除抖动并赋予相应的键值。

3、迅响电路及输入、输出电路原理:迅响电路由有源蜂鸣器和PNP型三极管组成。

其工作原理是当PNP型三极管导通后有源蜂鸣器立即发出定频声响。

驱动方式为独立端口驱动,占用P3.7端口。

输出电路是与迅响电路复合作用的,其电路结构为有源蜂鸣器,4.7K定值电阻R16,排针J3并联。

当有源蜂鸣器无迅响时J3输出低电平,当有源蜂鸣器发出声响时J3输出高电平,J3可接入数字电路等各种需要。

驱动方式为迅响复合输出,不占端口。

输入电路是与迅响电路复合作用的,其电路结构是在迅响电路的PNP型三极管的基极电路中接入排针J2。

引脚排针可改变单片机I/O口的电平状态,从而达到输入的目的。

驱动方式为复合端口驱动,占用P3.7端口。

4、单片机系统:本产品采用AT89C2051为核心器件(AT89C2051烧写程序必须借助专用编程器,我们提供的单片机已经写入程序),并配合所有的必须的电路,只具有上电复位的功能,无手动复位功能。

二、使用说明:1、功能按键说明: S1为功能选择按键,S2为功能扩展按键,S3为数值加一按键。

2、功能及操作说明:操作时,连续短时间(小于1秒)按动S1,即可在以上的6个功能中连续循环。

中途如果长按(大于2秒)S1,则立即回到时钟功能的状态。

1、时钟功能:上电后即显示10:10:00 ,寓意十全十美。

2、校时功能:短按一次S1,即当前时间和冒号为闪烁状态,按动S2则小时位加1,按动S3则分钟位加1,秒时不可调。

C52单片机6位数码管时钟

C52单片机6位数码管时钟
case 8: P0=duan[num2]; dula=1; dula=0; delayms(2); break;
case 9: P0=duan[num2]; dula=1; dula=0; delayms(2); break;
}
}
/*数码管显示子函数--带小数点*/
void display2 (int a,int b) // a为显示的位置,b为要显示的数字0.-9.
display (5,W5) ;
display2 (6,W6) ;
}
}
P0=wei[num1-1];
wela=1;
wela=0;
switch(num2)
{
case 0: P0=duan[num2]; dula=1; dula=0; delayms(2); break;
case 1: P0=duan[num2]; dula=1; dula=0; delayms(2); break;
case 3: P0=duan[b]; dula=1; dula=0; delayms(2); break;
case 4: P0=duan[b]; dula=1; dula=0; delayms(2); break;
case 5: P0=duan[b]; dula=1; dula=0; delayms(2); break;
/*延时子函数*/
void delayms(uint time)
{
uint i;
for(;time>0;time--)
{
for(i=0;i<124;i++)
{;}
}
}
/*数码管显示子函数--不带小数点*/
void display (int num1,int num2) // num1为显示的位置,num2为要显示的数字0-9

实验二(六位数码管动态显示实验)

实验二(六位数码管动态显示实验)

实验二: 6位数码管动态显示器实验一、实验目的a)在实践中加深理解数码管的内部结构和特点以及使用方法;b)熟悉数码管动态显示实验电路的工作原理;c)理解和掌握数码显示字符的编程方法;d)掌握用数码管显示字符代码的计算方法。

二、实验器材a)一台PC机b)一套MPLAB-IDE和Proteus仿真教学系统三、实验原理a)硬件原理图b)电路功能:把要显示的数据5,4,3,2,1,0先放入以DISHC单元开始的显示缓冲区,然后取出送数码管动态显示。

c)软件设计思路与参考程序清单程序设计流程图如下:参考程序如下:/**************************************************************实现的功能:使数码管从左到右各显示0-5芯片PIC16F877XT:4MHZ***************************************************************/#include <pic.h> //包含单片机内部资源预定义//定义数组display_numb[10],用于存放数字0~9的段码unsigned char display_numb[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};// 0 , 1 2 3 4 5 6 7 8 9//定义数组display_data[6],用于存放显示的数字,0:L 5:Runsigned char display_data[6];unsigned char y=0x00;/**************************************************************端口初始化PORTD作为数码管段驱动(高有效)PORTE作为数码管位选择驱动(低有效)***************************************************************/void init_port(void){PORTD=0x00; //D口输出低电平TRISD=0; //D口当作数码管段,设置成输出ADCON1=0x07; //使A口,E口全为数字I/O口TRISE=0; //A口当作数码管位选择控制脚,设置成输出PORTE=0x00; //E口输出低电平}/**************************************************************1毫秒延迟程序程序***************************************************************/void delay_1ms(void){unsigned int n;for(n=0;n<50;n++){NOP();}}/**************************************************************若干毫秒延迟程序程序***************************************************************/void delay_ms(unsigned int time){for(;time>0;time--){delay_1ms();}}/**************************************************************主程序从左到右显示0-5***************************************************************/void main(void){unsigned char n; //定义变量ninit_port(); //端口初始化display_data[0]=display_numb[0]; //将“0”的段码送入display_data[0]display_data[1]=display_numb[1]; //将“1”的段码送入display_data[1]display_data[2]=display_numb[2]; //将“2”的段码送入display_data[2]display_data[3]=display_numb[3]; //将“3”的段码送入display_data[3]display_data[4]=display_numb[4]; //将“4”的段码送入display_data[4]display_data[5]=display_numb[5]; //将“5”的段码送入display_data[5]while(1){PORTE=0x00;for(n=0;n<=5;n++){PORTD=display_data[n];delay_ms(5);PORTE++;}}}四、实验步骤a)建立PICC 工程项目b)建立一个C语言源程序c)把C语言源程序添加到项目中d)编辑和编译C语言程序e)画出硬件仿真电路图f)运行Proteus仿真软件,将目标代码加入到单片机中g)用Proteus软件仿真,观察数码管显示状态五、实验思考题(写实验报告)a)总结动态数码显示的工作原理并与静态数码显示相比较。

(完整word版)六位LED八段数码管显示(精)

(完整word版)六位LED八段数码管显示(精)

八段数码管显示1. 实验目的 :(1了解数码管动态显示的原理。

(2了解 74LS164 扩展端口的方法。

2. 实验内容 :利用实验仪提供的显示电路 , 动态显示一行数据。

3. 实验线路 :PB 0 数据输入PB 1 时钟输入说明:这里只是显示草图,详细原理参见 " 8155 接口实验 "4. 实验器材:(1 QTH2008下载式综合实验仪 1 台 (2 QTH2008仿真器 1 台(3计算机 1 台5. 实验说明 :(1 本实验仪提供了 8 段码 LED 显示电路, 学生只要按地址输出相应数据, 就可以实现对显示器的控制。

显示共有 6 位, 用动态方式显示。

8 段码是由 8155 的PB0、 PB1 经74LS164“串转并” 后输出得到。

6 位位码由 8155(或 8255 的 PA0-5口输出,经 uA2003 反向驱动后,选择相应显示位。

74LS164 是串行输入并行输出转换电路,串行输入的数据位由 8155 的 PB0 控制, 时钟位由 8155 的 PB1 控制输出。

写程序时, 只要向数据位地址输出数据, 然后向时钟位地址输出一高一低两个电平就可以将数据位置到 74LS164 中, 并且实现移位。

向显示位选通地址输出高电平就可以点亮相应的显示位。

本实验仪中数据位输出地址为 0e102H , 时钟位输出地址为 0e102H , 位选通输出地址为 0e101H 。

本实验涉及到了 8155 I0/RAM 扩展芯片的工作原理以及74LS164 器件的工作原理。

7. 参考程序 (SY10.ASM:OUTBIT equ 0e101h ; 位控制口CLK164 equ 0e102h ; 段控制口 (接 164 时钟位 DAT164 equ 0e102h ; 段控制口(接 164 数据位 IN equ 0e103h ; 键盘读入口LEDBuf equ 60h ; 显示缓冲Num equ 70h ; 显示的数据DelayT equ 75horg 0000hljmp StartLEDMAP: ; 八段管显示码db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h Delay: ; 延时子程序mov r7, #0DelayLoop:djnz r7, DelayLoopdjnz r6, DelayLoopretDisplayLED:mov r0, #LEDBufmov r1, #6 ; 共 6 个八段管mov r2, #00100000b ; 从左边开始显示 Loop:mov dptr, #OUTBITmov a, #00hmovx @dptr, a ; 关所有八段管mov a, @r0mov B, #8 ; 送 164DLP:rlc amov r3, amov acc.0, cANL A, #0FDHmov dptr, #DAT164movx @dptr, amov dptr, #CLK164orl a,#02hmovx @dptr, aanl a,#0fDhmovx @dptr, amov a, r3djnz B, DLPmov dptr, #OUTBITmov a, r2movx @dptr, a ; 显示一位八段管 mov r6, #1 call Delaymov a, r2 ; 显示下一位rr amov r2, ainc r0djnz r1, Loopmov dptr, #OUTBITmov a, #0movx @dptr, a ; 关所有八段管retStart: mov dptr,#0e100hmov a,#03hmovx @dptr,amov sp, #40hmov Num, #0MLoop:inc Nummov a, Nummov b, amov r0, #LEDBufFillBuf:mov a, banl a, #0fhmov dptr, #LEDMapmovc a, @a+dptr ; 数字转换成显示码mov @r0,a ; 显示在码填入显示缓冲inc r0inc bcjne r0, #LEDBuf+6, FillBufmov DelayT,#30DispAgain:call DisplayLED ; 显示djnz DelayT,DispAgainljmp MLoopEND八位数码管显示:8155控制参考程序 2:对 8155初始化,使 I/O口控制 LED 的显示情况。

六位数码管显示时分秒-推荐下载

六位数码管显示时分秒-推荐下载

WS=0x01;
LED=tab[hour_shi];
delay(1);
} //----------------------------调时子程序-------------------------------
void time_modify()
{ if(time_change==0)
{ delay(5);
//如果分为60,则清零,时加1
min_shi=min/10; hour_ge=hour%10; //时的个位和十位
hour_shi=hour/10;
WS=0x20; //循环扫描 LED=tab[sec_ge]; delay(1);
WS=0x10; LED=tab[sec_shi]; delay(1);
WS=0x08; LED=tab_dp[min_ge]; delay(1);
WS=0x04; LED=tab[min_shi]; delay(1);
WS=0x02; LED=tab_dp[hour_ge]; delay(1);
//如果时为24,则清零
//秒的个位和十位
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,系电通,力1根保过据护管生高线产中0不工资仅艺料可高试以中卷解资配决料置吊试技顶卷术层要是配求指置,机不对组规电在范气进高设行中备继资进电料行保试空护卷载高问与中题带资2负料2,荷试而下卷且高总可中体保资配障料置2试时32卷,3各调需类控要管试在路验最习;大题对限到设度位备内。进来在行确管调保路整机敷使组设其高过在中程正资1常料中工试,况卷要下安加与全强过,看度并25工且52作尽22下可护都能1关可地于以缩管正小路常故高工障中作高资;中料对资试于料卷继试连电卷接保破管护坏口进范处行围理整,高核或中对者资定对料值某试,些卷审异弯核常扁与高度校中固对资定图料盒纸试位,卷置编工.写况保复进护杂行层设自防备动腐与处跨装理接置,地高尤线中其弯资要曲料避半试免径卷错标调误高试高等方中,案资要,料求编试技5写、卷术重电保交要气护底设设装。备备置管4高调、动线中试电作敷资高气,设料中课并技3试资件且、术卷料中拒管试试调绝路包验卷试动敷含方技作设线案术,技槽以来术、及避管系免架统不等启必多动要项方高方案中式;资,对料为整试解套卷决启突高动然中过停语程机文中。电高因气中此课资,件料电中试力管卷高壁电中薄气资、设料接备试口进卷不行保严调护等试装问工置题作调,并试合且技理进术利行,用过要管关求线运电敷行力设高保技中护术资装。料置线试做缆卷到敷技准设术确原指灵则导活:。。在对对分于于线调差盒试动处过保,程护当中装不高置同中高电资中压料资回试料路卷试交技卷叉术调时问试,题技应,术采作是用为指金调发属试电隔人机板员一进,变行需压隔要器开在组处事在理前发;掌生同握内一图部线纸故槽资障内料时,、,强设需电备要回制进路造行须厂外同家部时出电切具源断高高习中中题资资电料料源试试,卷卷线试切缆验除敷报从设告而完与采毕相用,关高要技中进术资行资料检料试查,卷和并主检且要测了保处解护理现装。场置设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。

基于单片机的电子时钟6位LED数码管显示

基于单片机的电子时钟6位LED数码管显示

数码管显示电子时钟设计一.功能要求1.数字电子时钟最主要是LED数码管显示功能,以24小时为一个周期,显示时间时、分、秒。

2.具有校时功能,可以对时、进行单独校对,使其校正到标准时间。

二.方案论证1.数字时钟方案数字时钟是本设计的最主要的部分。

根据需要,可利用两种方案实现。

方案一:本方案采用Dallas公司的专用时钟芯片DS12887A。

该芯片内部采用石英晶体振荡器,其芯片精度不大于10ms/年,且具有完备的时钟闹钟功能,因此,可直接对其以用于显示或设置,使得软件编程相对简单。

为保证时钟在电网电压不足或突然掉电等突发情况下仍能正常工作,芯片内部包含锂电池。

当电网电压不足或突然掉电时,系统自动转换到内部锂电池供电系统。

而且即使系统不上电,程序不执行时,锂电池也能保证芯片的正常运行,以备随时提供正确的时间。

方案二:本方案完全用软件实现数字时钟。

原理为:在单片机内部存储器设三个字节分别存放时钟的时、分、秒信息。

利用定时器与软件结合实现1秒定时中断,每产生一次中断,存储器内相应的秒值加1;若秒值达到60,则将其清零,并将相应的分字节值加1;若分值达到60,则清零分字节,并将时字节值加1;若时值达到24,则将十字节清零。

该方案具有硬件电路简单的特点。

但由于每次执行程序时,定时器都要重新赋初值,所以该时钟精度不高。

而且,由于是软件实现,当单片机不上电,程序不执行时,时钟将不工作。

基于硬件电路的考虑,本设计采用方案二完成数字时钟的功能。

2.数码管显示方案方案一:静态显示。

所谓静态显示,就是当显示器显示某一字符时,相应的发光二极管恒定的导通或截止。

该方式每一位都需要一个8 位输出口控制。

静态显示时较小的电流能获得较高的亮度,且字符不闪烁。

但当所显示的位数较多时,静态显示所需的I/O口太多,造成了资源的浪费。

方案二:动态显示。

所谓动态显示就是一位一位的轮流点亮各个位,对于显示器的每一位来说,每隔一段时间点亮一次。

数字式秒表实验报告

数字式秒表实验报告

数字式秒表实验报告摘要本次设计任务是设计一个数字式秒表经查阅资料后我把实验分为1.脉冲产生部分。

2.电路控制部分。

3.计数部分4.译码部分。

5显示部分。

脉冲产生部分我选择555多谐振荡器,产生100Hz的脉冲。

经参考资料,电路控制部分:启动和暂停控制开关使用由RS触发器组成的无抖动开关。

使用74ls160计数器计数,7447译码器驱动共阳极七段显示器。

实验要求1.秒表最大计时值为99分59.99秒;2. 6位数码管显示,分辨率为0.01秒;3 .具有清零,启动计时,暂停及继续计数等控制功能;4.控制操作间不超过二个。

实验分析数字式秒表,所以必须有一个数字显示。

按设计要求,须用七段数码管来做显示器。

题目要求最大记数值为99,59,99,那则需要六个数码管。

要求计数分辨率为0.01秒,并且需要相应频率的信号发生器。

选择信号发生器时,有两种方案:一种是用晶体震荡器,另一种方案是采用集成电路555定时器与电阻和电容组成的多谐振荡器。

经过查询资料,555多谐振荡器性能稳定,故采用555多谐振荡器。

数字式秒表是一个频率(100HZ)进行计数的计数电路。

由于数字式秒表计数的需要,故需要在电路上加一个控制电路,该控制电路清零、启动计时、暂停及继续计数等控制功能,同时100HZ的时间信号必须做到准确稳定。

数字电子钟的总体图如图所示。

由图可见,数字电子钟由以下几部分组成:555振荡器秒脉冲发生器,防抖开关;秒表控制开关;一百进制秒、分计数器、六十进制秒计数器;以及秒、分的译码显示部分等七段显示器译码器译码器译码器1005551. 555构成的多谐振荡器555构成的多谐振荡器电路图555多谐振荡器工作波形多谐振荡器工作波形周期计算2.多谐振荡器仿真图根据设计要求,需要产生一个频率为100HZ的信号,由于f=1/T,带入可以算出R1=R1=4.7KΩ,在仿真软件上仿真的时候可以设置电阻为4.7KΩ,加上一个50Ω的电位器来调节脉冲信号的精确度。

可调式六位倒计时秒表的设计

可调式六位倒计时秒表的设计

陕西理工学院毕业设计可调式六位倒计时秒表的设计王诗蓉(陕西理工学院物电学院电子信息科学与技术专业电信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世纪以来,电子科技技术十分迅速的的发展,现代电子产品的性能变得越来越好,产品更新换代的节奏也日益变快。

用汇编语言编写的秒表计时器

用汇编语言编写的秒表计时器

实验报告十课程名称:微机原理与接口技术指导老师:李素敏学生姓名:向春霞学号:1243013 专业:通信工程日期:6月地点:理工603实验九矩阵键盘检测一、实验目的和要求1.掌握利用单片机定时器实现定时。

2.熟悉单片机与数码管的接口技术及数码管动态显示的控制过程。

3.熟悉单片机与键盘的接口技术及按键识别过程。

4.学会如何编制含数码管显示,定时器中断及按键控制等多种功能的综合程序,体会大型程序的编制和调试技巧。

>二、主要仪器设备电脑,Keil软件三、实验内容1、实验要求:要求其实现的功能如下(其中定时要求采取中断方式):(1)、用6位数码管显示秒表时间,最左边2位显示分,中间2位显示秒,最右边2位显示秒的小数位(~秒),秒与小数位之间要显示小数点。

(2)、两个按键:①计时/停止按键:首次按下从0开始计时,再次按下暂停计时,之后每次按下按键实现‘继续计时、暂停计时,继续计时、暂停计时……’。

(继续计时即从上次暂停时的时间开始继续计时)②复位按键:按下后全部清0,等待下次按下‘计时/停止按键’时重新开始计时。

2.设计思路:,(1)、采用内部脉冲定时,实现计时,最低显示位为10ms记一次数显示一次,即—秒。

100个10ms是1秒,所以当低位计满100次,(当50H为10时,把50H 单元清零,向51H进1)即得到秒计时,然后把51H单元清零,给52H单元加1.当52H为10时,清零,给53H加1,当53H为6时秒计时达到60次,则向分计时,即给54H加1,再给53H清零,当54H计满10时,清零,给55H加1,直到55H为6时给55H清零。

50H,51H放最低位计数52-53H放秒位次数54-55H放分位计数(2)、S2键,用扫描S2:当为低电平时,让TR0为0,即暂停计数。

当再次为低电平时继续计数,让TR0=1.(3)、S 3键,T1计数模式实现中断响应,复位按键S3:当F0为0时,给50-55H单元清零;然后按S2开始计数3.源程序:ORG 0000H·AJMP MAINORG 000BHLJMP TIME ;定时ORG 001BHLJMP S3 ;暂停ORG 0030HMAIN:CLR AMOV 50H,A ;最低位次数MOV 51H,A-MOV 52H,A ; 秒位次数MOV 53H,AMOV 54H,A ;分位计数MOV 55H,ADS1:MOV TMOD,#61H ;定时0模式1,计数1模式2MOV TH0,#0D8H ;初值定时10msMOV TL0,#0F0HMOV TH1,#0FFH ;初值,溢出中断MOV TL1,#0FFHSETB EA—SETB ET1SETB ET0SETB TR0SETB TR1XS: MOV R1,#50HMOV R2,#0DFHMOV R3,#2MOV R4,#4JNB ,STOPAJMP NEXT¥STOP:CPL TR0WAIT:JB ,NEXTSJMP WAITNEXT:MOV A,@R1INC R1MOV DPTR,#DUANMOVC A,@A+DPTRSETBMOV P0,ACLR.SETBMOV A,R2MOV P0,ACLR ;位选置位MOV A,R2RR AMOV R2,ALCALL DELDJNZ R3,NEXTXSD: MOV DPTR,#XDUAN$MOV A,@R1MOVC A,@A+DPTRSETBMOV P0,ACLRSETBMOV A,R2MOV P0,ACLR ;位选置位MOV A,R2'RR ALCALL DELAGA:MOV A,@R1INC R1MOV DPTR,#DUANMOVC A,@A+DPTRSETBMOV P0,ACLRSETB;MOV A,R2MOV P0,ACLR ;位选置位MOV A,R2RR AMOV R2,ALCALL DELDJNZ R4,AGALJMP XS:TIME:MOV TH0,#0D8H ;定时中断MOV TL0,#0F0HINC 50HMOV A,50HCJNE A,#10,RETUNT ;50H满10给51H单元+1MOV 50H,#00HINC 51HMOV A,51HCJNE A,#10,RETUNT ;51H满10给52H单元+1 \MOV 51H,#00HINC 52HMOV A,52HCJNE A,#10,RETUNT ;52H满10给53H单元+1MOV 52H,#00HINC 53HMOV A,53HCJNE A,#6,RETUNT ;53H满10给54H单元+1MOV 53H,#00HINC 54H—MOV A,54HCJNE A,#10,RETUNT ;54H满10给55H单元+1MOV 54H,#00HINC 55HMOV A,55HCJNE A,#6,RETUNTMOV 55H,#00HRETUNT:RETI;S3: CLR TR0CLR AMOV 50H,A ;最低位次数MOV 51H,AMOV 52H,A ; 秒位次数MOV 53H,AMOV 54H,A ;分位计数MOV 55H,ARETIDEL:MOV R6,#2 ;延时1msDEL1:MOV R7,#248NOPDEL2:DJNZ R7,DEL2DJNZ R6,DEL1RETDUAN:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;段选地址表XDUAN:DB 0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH ;带小数点的段码END(。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

秒表-六位数码管有效显示 C51单片机
1.#include <reg51.h>
2.#include <intrins.h>
3.#define uchar unsigned char
1.void delay_ms(uchar ms); // 延时毫秒@12M,ms最大值255
2.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; // 按键次数,初始为0
23.
24.sbit K = P1^4; // K键与P1.4相连
25.
26.void main()
27.{
28. P2 = 0xff; // 关所有数码管
29. P1 = 0xff; // p1为准双向口,作输入时先写1
30. dis[2] = 10; // '-'在段码表中偏移量为10
31. dis[5] = 10; // '-'在段码表中偏移量为10
32. dis_b = 0x7f; // 初始选通P2.7口数码管
33. dis_r = 0; // 初始化偏移量为0
34.
35. TMOD = 0x11; // 定时/计数器0,1工作于方式1
36. 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; // 关闭定时/计数器0
44. TR1 = 1; // 启动定时/计数器1
45. 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++; // 按键次数加1
61. if(key_t == 1) // 第一次按下
62. TR0 = 1; // 启动定时器0
63. else
64. {
65. if(key_t == 2) // 第二次按下
66. TR0 = 0; // 关闭定时器0
67. else
68. {
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++; // 百分之一秒计数器加1
83. if(dot == 100) // 计数值到100
84. {
85. dot = 0; // 清零
86. sec++; // 秒计数器加1(进位
10ms*100=1s)
87. if(sec == 60) // 秒计数值到60
88. {
89. sec = 0; // 秒计数器清零
90. min++; // 分计数器加1(进位60s=1m)
91. if(min == 100) // 分计数到100
92. 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最大值255
120.{
121.uchar i;
122.while(ms--)
123.for(i = 0; i < 124; i++);
124.}。

相关文档
最新文档