#include
#define
uint
unsigned
int
#define
uchar
unsigned
char
sbit
p27=P2^7//数码管位选端定义
uchar
c,i
//数码管译码表
unsigned
char
code
NumDecode[]
=
{
0XC0,//0
0XF9,//1
0XA4,//2
0XB0,//3
0X99,//4
0X92,//5
0X82,//6
0XF8,//7
0X80,//8
0X90,//9
}
void
main()
{
i=0//10秒计时设置
c=0//中断次数计数
p27=1//数码管位选端关闭
TMOD=1//设置定时器0为工作方式1
TH0=(65536-46080)/256//定时50ms高8位求模
TL0=(65536-46080)%256//定时50ms低8位求余
EA=1//开总中断
ET0=1//定时器0中断
TR0=1//启动定时器0
while(1)
{
if(c==20)//50ms中断20次
{
c=0
i++//倒计时总数每秒减1
}
if(i<10)
{
p27=0//数码管位选选通
P0=NumDecode[i]//显示数据
}
else
//循环计时设置
{
i=0
}
}
}
void
timer0()
interrupt
1//定时器0中断入口
{
TH0=(65536-46080)/256//定时器重新赋初值
TL0=(65536-46080)%256
c++//中断次数
}
ORG 0000HLJMP MAIN
ORG 000BH
LJMP T0ISR
ORG 0030H
MAIN:
MOV TMOD,#01H
MOV TH0,#HIGH(65536-10000)
MOV TL0,#LOW(65536-10000)
SETB TR0
SETB ET0
SETB EA
MOV R0,#99
MOV R1,#0
LOOP:
JB P1.0,LOOP1
JNB P1.0,$
INC R0
CJNE R0,#100,LOOP
MOV R0,#99
SJMP LOOP
LOOP1:
JB P1.1,LOOP
JNB P1.1,$
CJNE R0,#0,LOOP11
SJMP LOOP
LOOP11:
DEC R0
SJMP LOOP
T0ISR:
CLR TR0
MOV TH0,#HIGH(65536-10000)
MOV TL0,#LOW(65536-10000)
SETB TR0
INC R1
CJNE R1,#100,T0E
DEC R0
MOV R1,#0
DEC R0
CJNE R0,#0,T00
CLR P3.0
SJMP T0E
T00:
SETB P3.0
MOV A,R0
MOV B,#10
DIV AB
MOV DPTR,#TABLE
JB 00H,T001
MOV P2,#0FEH
MOVC A,@A+DPTR
MOV P0,A
SJMP T0E
T001:
MOV P2,#0FDH
MOV A,B
MOVC A,@A+DPTR
MOV P0,A
T0E:
RETI
---------------------------------------
TABLE: 共阴极数码管显示代码表
DB3FH,06H,5BH,4FH,66H 01234
DB6DH,7DH,07H,7FH,6fh 56789
END
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)