【042】四位数码管对外部中断0响应计数2007-05-05 16:29:00
【评论】
【打印】
【字体:大 中 小】
本文链接:http://blog.pfan.cn/wentao/25596.html
org 0000h
ajmp start
org 0003h
ljmp int_0
org 0030h
start: mov 30h,#0
mov 31h,#0
mov 32h,#0
mov 33h,#0
mov p2,#0xff
mov dptr,#table
setb it0
setb ea
setb ex0
lop: lcall display
ajmp lop
int_0:
inc 30h
mov a,30h
cjne a,#10,over
mov 30h,#0
inc 31h
mov a,31h
cjne a,#10,over
mov 31h,#0
inc 32h
mov a,32h
cjne a,#10,over
mov 32h,#0
inc 33h
mov a,33h
cjne a,#10,over
mov 33h,#0
over: reti
display:
mov r0,#50
d_lop:
mov a,30h
movc a,@a+dptr
mov p0,a
mov p2,#0x7f
lcall d_1ms
mov a,31h
movc a,@a+dptr
mov p0,a
mov p2,#0xbf
lcall d_1ms
mov a,32h
movc a,@a+dptr
mov p0,a
mov p2,#0xdf
lcall d_1ms
mov a,33h
movc a,@a+dptr
mov p0,a
mov p2,#0xef
lcall d_1ms
djnz r0,d_lop
ret
d_1ms:
mov r7,#250
temp: nop
nop
djnz r7,temp
ret
table: db 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90
end
#include <reg51.h>
#define uchar unsigned char
void delay_ms(uchar ms);
void display();
uchar code dis_code[10] = {0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90};
uchar data dis_0 = 0;
uchar data dis_1 = 0;
uchar data dis_2 = 0;
uchar data dis_3 = 0;
void main()
{
P2 = 0xff;
IT0 = 1;
EA = 1;
EX0 = 1;
while(1)
{
display();
}
}
void int_0() interrupt 0
{
dis_0++;
if(dis_0 == 10)
{
dis_0 = 0;
dis_1++;
if(dis_1 == 10)
{
dis_1 = 0;
dis_2++;
if(dis_2 == 10)
{
dis_2 = 0;
dis_3++;
if(dis_3 == 10)
dis_3 = 0;
}
}
}
}
void display()
{
uchar data i = 50;
while(i--)
{
P0 = dis_code[dis_0];
P2 = 0x7f;
delay_ms(1);
P0 = dis_code[dis_1];
P2 = 0xbf;
delay_ms(1);
P0 = dis_code[dis_2];
P2 = 0xdf;
delay_ms(1);
P0 = dis_code[dis_3];
P2 = 0xef;
delay_ms(1);
}
}
void delay_ms(uchar ms)
{
uchar i;
while(ms--)
for(i = 0; i < 124; i++);
}
阅读(6303) | 评论(0)
版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!
评论