求52单片机汇编程序,简单的电子钟实现59到0循环显示,倒计时秒表

两位数码管,P2.0 p2.1位选,P1口段选。麻烦附上简单注释

第1个回答  2014-06-10
ORG 0000H
JMP BEGIN
ORG 000BH
LJMP T0INT
ORG 001BH
LJMP T1INT
LEDD EQU 30H
LEDC EQU 36H
SECC EQU 37H
TCNT EQU 3AH
ORG 0030H
;---------------------------------------
TABLE: ; 共阴极数码管显示代码表
DB 3FH,06H,5BH,4FH,66H ;12345
DB 6DH,7DH,07H,7FH, ;6789
;---------------------------------------
DELAY:
MOV R6,#25
DLY01:
MOV R7,#100
DJNZ R7,$
DJNZ R6,DLY01
RET
;---------------------------------------
BEGIN:
MOV SP,#5FH
MOV TMOD,#11H
MOV TH0,#3CH
MOV TL0,#0B0H
MOV TH1,#0F4H
MOV TL1,#48H
MOV LEDC,#6
MOV R0,#LEDD
CLR A
INIT:
MOV @R0,A
INC R0
DJNZ LEDC,INIT
SETB ET1
SETB TR1
MOV P2,#0
MOV TCNT,#0
MOV SECC,#0
SETB ET0
SETB EA
MOV SECC,#59
LCALL DISSEC
SETB TR0
SETB TR1
LOOP:
SJMP $
;---------------------------------------
T1INT:
PUSH ACC
CLR TR1
MOV TH1,#0F4H
MOV TL1,#48H
SETB TR1
MOV DPTR,#TABLE
MOV R0,#LEDD
MOV A,LEDC
T1INT0:
JNZ T1INT1
MOV P2,#01H
MOV A,@R0
MOVC A,@A+DPTR
CPL A
MOV P1,A
SJMP T1INTD
T1INT1:
MOV P2,#02H
INC R0
MOV A,@R0
MOVC A,@A+DPTR
CPL A
MOV P1,A
T1INTD:
INC LEDC
MOV A,LEDC
CJNE A,#2,T1INT6
T1INT6:
JC T1INTE
MOV LEDC,#0
T1INTE:
POP ACC
RETI
;---------------------------------------
HBCD:
MOV B,#10
DIV AB
SWAP A
ORL A,B
RET
;---------------------------------------
T0INT:
PUSH ACC
CLR TR0
MOV TH0,#3CH
MOV TL0,#0B0H
SETB TR0
INC TCNT
MOV A,TCNT
CJNE A,#20,T0INT1
T0INT1:
JC T0INTE
MOV TCNT,#0
MOV A,SECC
DEC A
MOV SECC,A
JNZ T0INT2
MOV SECC,#59
T0INT2:
LCALL DISSEC
T0INTE:
POP ACC
RETI
;---------------------------------------
DISSEC:
MOV A,SECC
LCALL HBCD
PUSH ACC
ANL A,#0FH
MOV 30H,A
POP ACC
SWAP A
ANL A,#0FH
MOV 31H,A
RET
;---------------------------------------
END追问

感觉有点复杂啊
LEDD EQU 30H
LEDC EQU 36H
SECC EQU 37H
TCNT EQU 3AH这些我都不懂,你能给讲下思路吗

追答

LEDD EQU 30H ;定义的是显示的数据变量
LEDC EQU 36H ;定义的是显示的数码管位控变量
SECC EQU 37H ;定义的是秒变量
TCNT EQU 3AH 定义的是中断次数计数变量

追问

MOV SP,#5FH
MOV TMOD,#11H 这两句什么意思 这个11怎么来的

追答

MOV SP,#5FH ;设置堆栈栈顶为5FH(这个你可以在07H到7F之间随意设置)
MOV TMOD,#11H ;设置定时器1和0工作于模式1

本回答被提问者和网友采纳

求52单片机汇编程序,简单的电子钟实现59到0循环显示,倒计时秒表
SETB TR1 MOV P2,#0 MOV TCNT,#0 MOV SECC,#0 SETB ET0 SETB EA MOV SECC,#59 LCALL DISSEC SETB TR0 SETB TR1 LOOP:SJMP ;--- T1INT:PUSH ACC CLR TR1 MOV TH1,#0F4H MOV TL1,#48H SETB TR1 MOV DPTR,#TABLE MOV R0,#LEDD MOV A,LEDC T1INT0:JNZ T1INT1 MOV P2,#01H...

基于51单片机,lcd1602怎么显示倒计时秒表? - 知乎
基于单片机的数字秒表设计,核心使用51系列的STC89C52单片机,结合LCD12864显示模块、语音播报模块及输入模块,实现功能如下:系统中控部分由STC89C52单片机负责,它接收输入信息并处理,控制输出。输入模块包括三个部分:DS1302时钟模块,用于获取时间、实现计时与倒计时;四个独立按键,用于设置时间、倒计时时间、控...

单片机编程制作电子秒表能显示分(0-99),秒(0-59)
上周单片机实验课的内容是编一个秒表,在4位数码管中分别显示分和秒还有分秒,即最多可显示“9:59.9”。这里我用两个键实现了秒表的启动\/暂停和清零功能,

单片机编程制作电子秒表能显示分(0-99),秒(0-59)
上周单片机实验课的内容是编一个秒表,在4位数码管中分别显示分和秒还有分秒,即最多可显示“9:59.9”。这里我用两个键实现了秒表的启动\/暂停和清零功能,

求编程实现倒计时的秒表,2位LED数码管显示,延时采用硬件延时的方法_百 ...
display();\/\/调显示子程序 if(k1==0)\/\/按键按下 { if(TR0==0){ TR0=1;\/\/启动开始计时 second=60;\/\/从60秒开始倒计时 } else TR0=0;while(k1==0);\/\/等待按键释放 } } } \/\/T0中断程序 void T0_int() interrupt 1 { TH0 =0x3C;TL0 =0xB0;t0n++;if(t0n>=20)\/\/1秒到 ...

单片机程序 根据电路图,请编写程序,使前两个数码管实现00到59的秒表...
请设计一个2位静态数码管从00到59显示的程序 include <reg51.h> unsigned char show[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};int n, j;qc()interrupt 1 using 3 {TH0=(65336-10000)\/256;TL0=(65336-10000)%256;n++;if (n>=100){n=0;j++;if (j>=60)j=...

51单片机驱动八位数码管电子钟
void delay(uint z)\/\/延时程序 { uint i,j;for (i=z;i>0;i--)for (j=110;j>0;j--);} void display1() \/\/P2为位选,P0为段选,显示格式为 23小时59分59.99秒 { uchar s,g;s=shi\/10;g=shi%10;P2=wei[0];P0=duan[s]; delay(1);P2=wei[1];P0=duan[g]; delay(1)...

『求助』用51单片机定时器实现99秒表倒计时
65536-10000) MOV TL0,#LOW(65536-10000) SETB TR0MOV DPTR,#TABLET0C:CPL 00HJB 00H,T001MOV P3,#0FDHMOV A,R1MOVC A,@A+DPTRMOV P2,ASJMP T002T001:MOV P3,#0FEHMOV A,R0MOVC A,@A+DPTRMOV P2,AT002:JNB 01H,T0EINC R2MOV A,R2CJNE A,#100,T0EMOV R2,#0MOV A...

如何用单片机做一个简单的倒计时器?
ET0=1;\/\/打开定时器0中断允许 EA=1;\/\/打开总中断 TR0=1;\/\/打开定时器-->启动定时器中断!ET1=1;TR1=1;TH1=(65536-250)\/256; \/\/FC TL1=(65536-250)%256;} \/ 函 数 名 : DigDisplay 函数功能 : 数码管动态扫描函数,循环扫描8个数码管显示 \/ void DigDisplay(){ u8 i;for...

求大神写一下单片机at89c52控制秒表电路循环显示0到99的程序
include <reg52.h> defineuint unsigned int defineuchar unsigned char define duan P2 define stime 50 \/\/LED交替闪烁间隔时间 void init();void pause();sbit wei1=P3^0;sbit wei2=P3^1;sbit s2=P1^4;sbit s3=P1^6;\/\/共阳极 void delay(uint xms);uint g=0;uint s=0;uint count=0...

相似回答