好像我有你這板子,所以我有現成的程序。
看看我寫的(呵呵——得意的笑——新手的表現)
#include<reg51.h>
#define SMG P0//數碼管
sbit DUAN=P2^6;
sbit WEI1=P2^7;
unsigned char code ZF[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77
,0x7c,0x39,0x5e,0x79,0x71,0x00};//標準0~F數碼管顯示碼
unsigned char code WEI[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//控制哪一位數碼管顯示
//一次一位,對應最左位→最右位
unsigned char DisplayData[8];//用來存放要顯示的8位數的值,一個管分配一位數組,叫顯示緩存
void DigDisplay()//數碼管動態顯示函數
{
unsigned char i,j;
for(i=0;i<8;i++)//只有8個數碼管
{
switch(i) //位選,選擇點亮的數碼管,并賦值顯示內容
{
case(0):
SMG=WEI[i];//先選位0(最左邊),后選段
WEI1=1;
WEI1=0;
SMG=DisplayData[i];//發送段碼
DUAN=1;
DUAN=0;
break;
case(1):
SMG=WEI[i];
WEI1=1;
WEI1=0;
SMG=DisplayData[i];
DUAN=1;
DUAN=0;
break;
case(2):
SMG=WEI[i];
WEI1=1;
WEI1=0;
SMG=DisplayData[i];
DUAN=1;
DUAN=0;
break;
case(3):
SMG=WEI[i];
WEI1=1;
WEI1=0;
SMG=DisplayData[i];
DUAN=1;
DUAN=0;
break;
case(4):
SMG=WEI[i];
WEI1=1;
WEI1=0;
SMG=DisplayData[i];
DUAN=1;
DUAN=0;
break;
case(5):
SMG=WEI[i];
WEI1=1;
WEI1=0;
SMG=DisplayData[i];
DUAN=1;
DUAN=0;
break;
case(6):
SMG=WEI[i];
WEI1=1;
WEI1=0;
SMG=DisplayData[i];
DUAN=1;
DUAN=0;
break;
case(7):
SMG=WEI[i];
WEI1=1;
WEI1=0;
SMG=DisplayData[i];
DUAN=1;
DUAN=0;
break;
}
j=20;//顯示一段時間,再消隱,可以得到穩定的顯示
while(j--);
SMG=0xff;
WEI1=1;
WEI1=0;
SMG=0x00;//消隱
DUAN=1;
DUAN=0;//關閉段碼
}
}
void XSHCFZ (unsigned long j)//顯示緩存賦值
{
DisplayData[0]=ZF[j/10000000];//將十進制數換算為可顯示字符
DisplayData[1]=ZF[(j%10000000)/1000000];
DisplayData[2]=ZF[(j%1000000)/100000];
DisplayData[3]=ZF[(j%100000)/10000];
DisplayData[4]=ZF[(j%10000)/1000];
DisplayData[5]=ZF[(j%1000)/100];
DisplayData[6]=ZF[(j%100)/10];
DisplayData[7]=ZF[(j%10)/1];
}
void main(void)
{
DUAN=0;WEI1=0;
XSHCFZ(76543210);
while(1)
{
DigDisplay();//顯示
}
}
好像和你的板子有點區別:兩個鎖存器的控制端接的口 不一樣,你自己改一下試試。 |