采用定时器T0定时10ms,60H为1s计数单元,计数100次为1sORG 0000H 程序从0地址开始
LJMP MAIN 跳到MAIN处执行
ORG 000BH 定时器T0
LJMP TIME0
ORG 0030H
MAIN:MOV TMOD,#01H 设置T0工作在模式1
MOV TH0,#0D8H 赋初值,定时10ms
MOV TL0,#0F0H
MOV IE,#82H 开CPU中断,开定时器0中断
MOV R3,#60
SETB TR0 启动T0定时器工作
MOV 60H,#100给60H单元赋初值
CLR 4FH 清零4FH单元
DISPLAY: 显示子程序
MOV DPTR,#TAB DPTR指向编码表位置
MOV A,R3 将R3的内容复制到A
MOV B,#10
DIV AB A除B,商给A,余数给B
MOVC A,@A+DPTR 根据A的值取出编码表中的编码
MOV P2,A 由P1口输出A的内容
CLR P3.0 清零P2.0
SETB P3.0 置位P2.0 MOV A,B
MOVC A,@A+DPTR 根据A的值取出编码表中的编码
MOV P2,A 由P1口输出A的内容
CLR P3.1 清零P2.1
SETB P3.1 置位P2.1
JNB 4FH,DISPLAY 判断1秒时间是否到,没有到,则跳转到DIAPLAY处
CLR 4FH 1秒到,清4FH
LJMP DISPLAY 调用显示子程序 TIME0:MOV TH0,#0D8H赋初值
MOV TL0,#0F0H
DJNZ 60H,TT 60H单元自减1,判断是否为0,不为0则跳转到TT处
MOV 60H,#100 60H单元为0,则重新给其赋值100
SETB 4FH 同时置位4FH单元
DEC R3R3自加1
CJNE R3,#00H,TT 判断R3是否为0,否则跳转TT处
CLR TR0
TT:RETI
TAB: 编码表
DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH 共阴
END程序结束
7SEG-COM-CATHODE 为共阴管
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar num=60,shi,ge
uchar code TAB[]={
0x3F,/*0*/
0x06,/*1*/
0x5B,/*2*/
0x4F,/*3*/
0x66,/*4*/
0x6D,/*5*/
0x7D,/*6*/
0x07,/*7*/
0x7F,/*8*/
0x6F,/*9*/
}
void T0INTinit()
{
TMOD=0x01
TH0=(65536-50000)/256
TL0=(65536-50000)%256
EA=1
ET0=1
TR0=1
}
void main()
{
T0INTinit()
while(1)
{
shi=num/10
ge=num%10
P0=TAB[shi]
P2=TAB[ge]
}
}
void T0INT() interrupt 1
{
uchar i
TH0=(65536-50000)/256
TL0=(65536-50000)%256
i++
if(i==20)
{
i=0
num--
if(num==0)
num=60
}
}
ORG 00HSJMP STAR
ORG 1BH
SJMP TIS 转T1中断服务程序
ORG 30H
STAR: MOV R2,#60H 倒计时初值
MOV R4,#20H 定时中断溢出计数器
MOV IE,#88H 开中断
MOV TMOD,#10H
MOV TH1,#3CH 定时初值
MOV TL1,#0B0H 定时初值
SETB TR1 启动
ACALL DIS 调用显示子程序
SJMP $
TIS: MOV TH1,#3CH
MOV TL1,#0B0H
DJNZ R4,T1S1 定时1S到否
MOV R4,#20 到1S,重置R4=20
DJNZ R2,T1S0 倒计时递减
CLR TR1 倒计时结束,关定时器
T1S0: ACALL DIS 调显示
T1S1: RETI 中断返回
SEG7: INC A A的值加一
MOVC A,@A+PC 取显示断段
RET
DB 0C0H,0F9H,0A4H,0B0H 0至3的共阳型显示码
DB 99H,92H,82H,0F8H 4至7的共阳型显示码
DB 80H,90H,88H,83H 8至B的共阳型显示码
DB 0C6H,0A1H,86H,8EH C至F的共阳型显示码
DIS: MOV A,R2 单字节十六进制数转为十进制数
MOV B,#10
DIV AB
ACALL SEG7
MOV P1,A 显示十位
MOV A,B
ACALL SEG7
MOV P2,A 显示个位
RET 子程序返回
END
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)