“動態數碼管掃描”
用定時器,1秒一個數走到256然后清0從新走。基本這個意思。
下面是我寫的程序:
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar a,num,temp,ge,shi,bai;
uchar code duan[]={ //段數組編碼 0、1、2、3、4、5、6、7、8、9、0、A、B、C、D、E、F
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
//uchar code wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //位數組編碼 個、十、百、千。。。
void init();
void display(uchar);
void delay(uint);
//void timer0();
void main()
{
init();
while(1)
{
if(a==50)
{
a=0;
if(num>256);
num=0;
num++;
}
display(num); //輸入數字(0~255)
}
}
void init() //初始化程序
{
TMOD=0x01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
EA=1;
ET0=1;
TR0=1;
P1=0xff;
P0=0x00;
num=0;
}
void timer0() interrupt 1 //中斷計時器
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
a++;
}
void display(uchar temp)
{
bai=temp/100; //顯百位數
P1=0xfe; //百位應位左數第一個數
P0=duan[bai];
delay(2);
shi=temp%100/10; //顯十位數
P1=0xfd;
P0=duan[shi];
delay(2);
ge=temp%100%10; //顯個位數
P1=0xfb; //個位應為左數第三個數
P0=duan[ge];
delay(2);
}
void delay(uint x) //約為1ms延時.
{
uint i,j;
for(i=x;i>0;i--)
for(j=121;j>0;j--);
}
|