好像我有你这板子,所以我有现成的程序。
看看我写的(呵呵——得意的笑——新手的表现)
#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();//显示
}
}
好像和你的板子有点区别:两个锁存器的控制端接的口 不一样,你自己改一下试试。 |