level 7
一挽弓
楼主
就是动态显示100以内的自加,
不知为什么显示函数放在中断中数码管闪烁,但能实现功能,但放在主程序中就不闪
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
uchar code Table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uint num,n,bai,shi,ge;
void init();
void display(uint bai,uint shi,uint ge);void delay(uint z);
void main()
{
init();
while(1)
{
/*
bai=n/100;
shi=n%100/10;
ge=n%10;
display(bai,shi,ge);
*/
}
}
void init()
{
n=0;
num=1;
TMOD=0x01;
TL0=(65536-45872)%256;
TH0=(65536-45872)/256;
EA=1;
ET0=1;
TR0=1;
wela=1;
P0=0xf8;
wela=0;
dula=1;
P0=0x3f;
dula=0;
}
void timer() interrupt 1
{
TR0=0;
TL0=(65536-45872)%256;
TH0=(65536-45872)/256;
if(num++==20)
{
num=1;
bai=n/100;
shi=n%100/10;
ge=n%10;
display(bai,shi,ge);
n++;
if(n==100)
n=0;
}
TR0=1;
}
void display(uint bai,uint shi,uint ge)
{
wela=1;
P0=0xfe;
wela=0;
dula=1;
P0=Table;
dula=0;
delay(5);
wela=1;
P0=0xfd;
wela=0;
dula=1;
P0=Table[shi];
dula=0;
delay(5);
wela=1;
P0=0xfb;
wela=0;
dula=1;
P0=Table[ge];
dula=0;
delay(5);
}
void delay(uint z)
{uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}