我的电路板采用C8051f340,利用max7219驱动4位8段数码管,可是总是点不亮!
不知道是怎么回事,请高人指点。
附显示子程序:
sbit DIN_7219=P1^5;
sbit LOAD_7219=P1^6;
sbit CLK_7219=P1^7;
void init7219(void);
void write_7219(uchar addr,uchar dat);
void displayU(int data1);
void displayD(int data2);
void init7219(void)
{
write_7219(0x0f, 0x00); // display test or no, 0 for no test.
write_7219(0x0b, 0x07); // scan limit, 7 for using all 8 LED
write_7219(0x0a, 0x0f); // brightnes, 0--f old :04
write_7219(0x09, 0xff); // decode mode, B code
write_7219(0x0c, 0x01); // stop or work, 1 for normal work status
}
void write_7219(char addr,char dat)
{
char i, j;
LOAD_7219=0;
for(i=8; i>=1; i--){
CLK_7219=0;
if(addr & 0x80) DIN_7219=1; else DIN_7219=0;//&是按位与的意思!
for(j=0;j<5;j++);
addr = addr<<1;
CLK_7219=1;
for(j=0;j<5;j++);
}
for(i=8; i>=1; i--){
CLK_7219=0;
if(dat & 0x80) DIN_7219=1; else DIN_7219=0;
dat = dat <<1;
for(j=0;j<5;j++);
CLK_7219=1;
for(j=0;j<5;j++);
}
LOAD_7219=1;
for(j=0;j<5;j++);
CLK_7219=0;
}
void displayD(int data2)
{
uchar Nstr2[5];
/*if(data2 < 0){
Nstr2[3]=0x3A;
data2 = 0 - data2;
}
else*/
Nstr2[3]=(char)(data2/1000);
Nstr2[2]=(char)((data2%1000)/100);
Nstr2[1]=(char)(((data2%1000)%100)/10);
Nstr2[0]=(char)(((data2%1000)%100)%10);
write_7219(0x04, Nstr2[3]);
write_7219(0x03, Nstr2[2]);
//write_7219(0x05,0x3A); //显示'-'号 //中间一段为G是D0控制
write_7219(0x02, Nstr2[1]); // + 0x80是为了显示小数点,小数点是D7最高位,要求赋值1.
write_7219(0x01, Nstr2[0]);
}
void displayU(int data1)
{
uchar Nstr1[5];
Nstr1[3]=(char)(data1/1000);
Nstr1[2]=(char)((data1%1000)/100);
Nstr1[1]=(char)(((data1%1000)%100)/10);
Nstr1[0]=(char)(((data1%1000)%100)%10);
write_7219(0x08, Nstr1[3]);
write_7219(0x07, Nstr1[2]);
write_7219(0x06, Nstr1[1] + 0x80); //显示小数点
write_7219(0x05, Nstr1[0]);
}
我就在主程序while里面调用displayU程序,但是电路没什么反应。
请高人指点!!
此帖出自
小平头技术问答
一周热门 更多>