利用51单片机,通过两位数码管显示秒,按键实现计时和停止计时 具体内容内详

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-07-10
使用51单片机实现,两位数码管实现秒计时,显示秒,能用独立按键控制开始、暂停。求单片机程序

KEYVAL EQU 30HDAT EQU 33HSCANLED EQU 39HCLK EQU 77HSEC EQU 78HSEC1 EQU 79HSEC2 EQU 7AHDOT BIT 00HORG 0000HLJMP MAINORG 0003HLJMP EXTINT0ORG 000BHLJMP T0ISR ;50ms定时ORG 001BHLJMP T1ISR ;扫描显示ORG 0030HMAIN:MOV SP,#5FHMOV TMOD,#11HMOV TH0,#03CHMOV TL0,#0B0HMOV TH1,#0ECHMOV TL1,#078HMOV KEYVAL,#2MOV 33H,#10HMOV 34H,#10HMOV 35H,#10HMOV 36H,#10HMOV CLK,#0SETB IT0SETB EX0CLR TR0CLR ET0MOV R2,#0SETB TR1SETB ET1SETB EALOOP:MOV A,KEYVALLOOP1:JNZ LOOP2 ;启动SETB TR0SETB ET0SJMP LOOPLOOP2:DEC AJNZ LOOP3 ;暂停CLR TR0CLR ET0SJMP LOOPLOOP3:DEC AJNZ LOOP ;清零MOV 36H,#0MOV 35H,#0MOV 34H,#0MOV 33H,#0SJMP LOOPEXTINT0:PUSH ACCINC KEYVALMOV A,KEYVALCJNE A,#3,EXT00EXT00:JC EXT01MOV KEYVAL,#0EXT01:POP ACCRETIT0ISR:PUSH ACCCLR TR0MOV TH0,#3CHMOV TL0,#0B0HSETB TR0INC CLKMOV A,CLKCJNE A,#2,T0ISREMOV CLK,#0INC 36HMOV A,36HCJNE A,#10,T0ISREMOV 36H,#0INC 35HMOV A,35HCJNE A,#10,T0ISREMOV 35H,#0INC 34HMOV A,34HCJNE A,#6,T0ISREMOV 34H,#0INC 33HMOV A,33HCJNE A,#10,T0ISREMOV 33H,#0T0ISRE:POP ACCRETIT1ISR:PUSH ACCCLR TR1MOV TH1,#0ECHMOV TL1,#78HSETB TR1MOV DPTR,#LEDTABT100:MOV R0,#DATMOV A,SCANLEDADD A,R0MOV R0,AMOV A,SCANLEDJNZ T101MOV P2,#01HSETB DOTSJMP T1DIST101:DEC AJNZ T102MOV P2,#02HCLR DOTSJMP T1DIST102:DEC AJNZ T103MOV P2,#04HSETB DOTSJMP T1DIST103:MOV P2,#08HCLR DOTT1DIS:MOV A,@R0MOVC A,@A+DPTRJNB DOT,T1DIS1ORL A,#01HT1DIS1:CPL AMOV P0,AINC SCANLEDMOV A,SCANLEDCJNE A,#4,T1ENDMOV SCANLED,#0T1END:POP ACCRETILEDTAB: DB 0FCH ;"0" 00HDB 60H ;"1" 01HDB 0DAH ;"2" 02HDB 0F2H ;"3" 03HDB 66H ;"4" 04HDB 0B6H ;"5" 05HDB 0BEH ;"6" 06HDB 0E0H ;"7" 07HDB 0FEH ;"8" 08HDB 0F6H ;"9" 09HDB 0EEH ;"A" 0AHDB 3EH ;"B" 0BHDB 9CH ;"C" 0CHDB 7AH ;"D" 0DHDB 9EH ;"E" 0EHDB 8EH ;"F" 0FHDB 00H ;" " 10H

END

并用一个按键啥? 51单片机我没设计过电路,用的学习板是现成的,对着电路图。 那个学习板上没有锁存器啥的,只能靠扫描来显示2个数字(就是两个数码管轮流显示数字,因为轮流速度非常快人眼看不出来一次其实只有一个在显示) 思路的话,按键和计时器都用中断控制会比较方便, 1个全局变量代表当前剩余秒数,一个全局变量代表当前剩余分钟数(或者你要一个16位变量代表秒数也行) 因为计时器无法定时1秒所以还要一个变量来辅助计时器实现每1秒引发一次事件的操作。 加上按键,这样就有2个事件:一个是1秒引发一次,一个是按钮引发 按钮作用是什么我不知道,你自己看着办 计时器就是全局变量的秒数减去1 这两个事件实现以后,主程序逻辑就是一开始启用中断、启用定时器、初始化全局变量, 然后就开始死循环,循环里的功能是把全局变量里的数字显示到数码管上,只管显示不管别的的话还是很容易的,别的(计时、按钮)全部交给中断去完成,即可。

ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0ISR
ORG 0030H
MAIN:
    MOV TMOD,#01H
    MOV TH0,#HIGH(65536-10000)
    MOV TL0,#LOW(65536-10000)
    SETB ET0
    SETB EA
 MOV R0,#0
 MOV R1,#0
 MOV R2,#0
 MOV R3,#9
 CLR 00H
 CLR 01H
LOOP:
 JB P1.0,LP01
 JNB P1.0,$
 SETB TR0
 CLR 01H
 SJMP LOOP0
LP01:
 JB P1.1,LP02
 JNB P1.1,$
 SETB 01H
 SJMP LOOP0
LP02:
 JB P1.2,LOOP0
 JNB P1.1,$
 CLR TR0
 MOV P3,#0FDH
 MOV P2,#0
 MOV P3,#0FEH
 MOV P2,#0
 SJMP MAIN
LOOP0:
 JB 00H,LOOP1
 MOV A,R0
 SJMP LOOP2
LOOP1:
 MOV A,R1
LOOP2:
 MOV DPTR,#TABLE
 MOVC A,@A+DPTR
 MOV R3,A
 SJMP LOOP
T0ISR:
    CLR TR0
    MOV TH0,#HIGH(65536-10000)
    MOV TL0,#LOW(65536-10000)
    SETB TR0
 JB 01H,T0C
 INC R2
T0C:
 CPL 00H
 MOV A,R3
 JB 00H,T001
 MOV P3,#0FDH
 MOV P2,A
 SJMP T002
T001:
 MOV P3,#0FEH
 MOV P2,A
T002:
 MOV A,R2
 CJNE A,#100,T0E
 MOV R2,#0
 INC R0
 CJNE R0,#10,T0E
 MOV R0,#0
 INC R1
 CJNE A,#10,T0E
 MOV R1,#0
T0E:
 RETI
T004:
 CLR TR0
 RETI
TABLE:      ; 共阴极数码管显示代码表
    DB    3FH,06H,5BH,4FH,66H ;01234
    DB    6DH,7DH,07H,7FH,6FH ;56789

 END



可以参考:

http://hi.baidu.com/do_sermon/item/a30d88dbc3404148ddf9be99

空间中,还有多种不同类型的时钟、秒表,正、倒计时的,都有。

这个很简单的 你QQ好友吧 我班全部的资料传给你 我的是C语言 25502840 这样 和你交谈 有利于你的学习 照搬照抄 没意思

  • 51单片机中用两位数码管现实显示控制,用汇编语言编程序段
    答:MOV 31H,#00H MOV 32H,#00H MOV 33H,#01H MOV 34H,#06H MOV 35H,#03H MOV 36H,#02H ACALL D0 JMP $-2 D0: MOV R0,#31H MOV R2,#11111110B MOV DPTR,#TAB D1: ORL P1,#00111111B MOV A,@R0 MOVC A,@A+DPTR MOV R3,#8 D2...
  • 使用51单片机实现,两位数码管实现秒计时,显示秒,能用独立按键控制开始...
    答:KEYVAL EQU 30HDAT EQU 33HSCANLED EQU 39HCLK EQU 77HSEC EQU 78HSEC1 EQU 79HSEC2 EQU 7AHDOT BIT 00HORG 0000HLJMP MAINORG 0003HLJMP EXTINT0ORG 000BHLJMP T0ISR ;50ms定时ORG 001BHLJMP T1ISR ;扫描显示ORG 0030HMAIN:MOV SP,#5FHMOV TMOD,#11HMOV TH0,#03CHMOV TL0,...
  • 51单片机设计一个秒表,用两个数码管(任意相邻的两个)显示。
    答:ORG 0000H JMP BEGIN ORG000BH LJMPT0INT ORG001BH LJMPT1INT LEDDEQU30H LEDCEQU 36H SECCEQU 37H TCNTEQU 3AH ORG 0030H ;--- TABLE: ; 共阴极数码管显示代码表 DB 0FCH;"0"00H DB 60H;"1"01H DB 0DAH;"2"02H DB 0F2H;"3"03H DB 66H;"4"04H DB 0B6H;"5"...
  • 求汇编51单片机接两个数码管从00显示到99,外部中断0接一开关用于复位...
    答:CJNEA,#100,UENRET;比较=这里因为只有两位数码管 MOVCNT,#00H;意思跟上面20 的一样,UENRET:POPACC;弹出A保护的值 POPPSW;弹出状态寄寄原值 RETI;中断返回 ;外总中断复位 INT00:PUSHPSW PUSHACC MOVCOUNT,#00H;清COUNT寄存器 MOVCNT,#00H;清CNT寄存器 CALLDELAY POPACC;弹出保护数据 POPPSW ...
  • 单片机两位数码管显示数字
    答:uchar number,dat=29;void t0isr() interrupt 1 case 0:P2=0x02;P0=distab[dat/10];break;case 1:P2=0x01;P0=distab[dat%10];TMOD=0x01;TH0=(65536-5000)/256;TL0=(65536-5000)%256;TR0=1;ET0=1;EA=1;while(1);} 分类 数码管也称LED数码管,不同行业人士对数码管的称呼不一样...
  • 用89C51单片机设计一个可以让串口控制两个数码管正常工作,补充电路图...
    答:帮你分析一下:该题是用单片机的串口,传送数据送给2位数码管显示,串口要选择工作在方式0,即做同步移位寄存器使用,工作在发送状态,用RXD做数据线,TXD做同步时钟使用。然后可以编程,发送如上数据为11111110B,测试数码管a段是否正常能亮。程序就不帮你写了,做为学生要自己动手,考试题要自己答才行...
  • 51单片机两位数码管交替123456789
    答:main(){ a=1;b=2;while(1){ for(c;c<5;c++){ aa=0; //打开第一个数码管 P0=table[a];delay(20);P0=0xff;aa=1;bb=0; //打开第二个数码管 P0=table[b];delay(20);P0=0xff;bb=1;a++;b++;} a=1;b=2;c=0;} } ...
  • 51单片机数码管怎样才能同时在两个数码管上面显示不同的数字??_百度...
    答:是因为人眼的视觉暂留效应,实际上两个数码管是交替显示的,但是因为交替的速度十分快,所以会有因为视觉暂留效应而看到两个数码管都是同时现实的。视觉暂留现象即视觉暂停现象(Persistence of vision,Visual staying phenomenon,duration of vision)又称“余晖效应”,1824年由英国伦敦大学教授皮特.马克....
  • ...AT89C51单片机,利用定时器设计一个两位数码管显示电路。 设计要求...
    答:这个我仿真过了 是有用的,,,是从00开始显示 到了99会从新开始从00开始加 include<reg51.h> define uchar unsigned char define uint unsigned int uchar code disp[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};uchar code bit_tab[]={0xfe,0xfd};uchar disp_buf[...
  • ...AT89C51单片机,利用定时器设计一个两位数码管显示电路。 设计要求...
    答:为您推荐: 单片机原理及应用 单片机有什么用 51单片机 单片机是什么 单片机和plc的区别 单片机编程 单片机论坛 单片机原理及接口技术 单片机$ 废物利用手工制作大全 其他类似问题2012-10-02 基于AT89C51单片机,利用定时器设计一个两位数码管显示电... 2012-04-25 基于AT89C51单片机,利用定时器设计一个...