好像我有你這板子,所以我有現(xiàn)成的程序。
看看我寫的(呵呵——得意的笑——新手的表現(xiàn))
#include<reg51.h>
#define SMG P0//數(shù)碼管
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數(shù)碼管顯示碼
unsigned char code WEI[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//控制哪一位數(shù)碼管顯示
//一次一位,對應(yīng)最左位→最右位
unsigned char DisplayData[8];//用來存放要顯示的8位數(shù)的值,一個管分配一位數(shù)組,叫顯示緩存
void DigDisplay()//數(shù)碼管動態(tài)顯示函數(shù)
{
unsigned char i,j;
for(i=0;i<8;i++)//只有8個數(shù)碼管
{
switch(i) //位選,選擇點亮的數(shù)碼管,并賦值顯示內(nèi)容
{
case(0):
SMG=WEI[i];//先選位0(最左邊),后選段
WEI1=1;
WEI1=0;
SMG=DisplayData[i];//發(fā)送段碼
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;//顯示一段時間,再消隱,可以得到穩(wěn)定的顯示
while(j--);
SMG=0xff;
WEI1=1;
WEI1=0;
SMG=0x00;//消隱
DUAN=1;
DUAN=0;//關(guān)閉段碼
}
}
void XSHCFZ (unsigned long j)//顯示緩存賦值
{
DisplayData[0]=ZF[j/10000000];//將十進制數(shù)換算為可顯示字符
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();//顯示
}
}
好像和你的板子有點區(qū)別:兩個鎖存器的控制端接的口 不一樣,你自己改一下試試。 |