如何用单片机制作倒数计时器

来源:百度知道 编辑:UC知道 时间:2024/09/21 22:58:28
是从30秒开始计时

也就是倒计时30秒吗?
用内部定时器就可以,
以51为例
60ms*500=30s(每次定时60毫秒 循环500次)
60ms初值 TC=2^16-60000=5536=15A0(H)

ORG 0000H
LJMP MAIN
ORG 000BH
LJMP TO_INT
;
ORG 0100H
MAIN: MOV IE ,#00H
MOV PSW,#00H
MOV SP,#60H
MOV TMOD,#01H
MOV TH0,#15H
MOV TL0,#0A0H
SETB TR0
MOV IE ,#82H
MOV IP ,#02H
MOV R6,#100
MOV R7,#5 ;60S计时
SJMP $
;
ORG 0200H
TO_INT: MOV TH0,#15H
MOV TL0,#0A0H
DJNZ R6,T0_0 ;不到30S→跳
MOV R6 ,#100
DJNZ R7,T0_0 ;不到30S→跳
MOV R7 ,#5
MOV IE,#00H; 30S到关中断
TO_0: RETI
END

这个是C语言倒计60S的程序,TO用于60S加1.T1用于显示.P0接共阳数码管的段选.P2接数码管的位选.所有的接口低电平有效.经实验板调试,正确无误码.
//====声明区===============
#include <reg51.h>
#define SEG P0
#define count 50000//声明T0初值
#define TH_M1 (65536-count)/256
#define TL_M1 (65536-count)%256
#define count_M2 250
#define TH_M2 (256-count_M2)
#defi