|
本帖最后由 wulin 于 2017-10-16 10:22 編輯
你的顯示程序延時位置不對,另外集中分解數(shù)據(jù)會耽誤時間使個位亮度大于其他位。給你改了一下,你試試。
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
//#define AT24C02_ADDR 0xa0
//#define PCF8591_ADDR 0X90
#define MAIN_Fosc 11.0592
sbit we = P2^7;
sbit du = P2^6;
//sbit SDA = P2^0;
//sbit SCL = P2^1;
/*
void delay_5us()
{
_nop_();
}
*/
void delay(uint ms)
{
uchar i;
do
{
i = MAIN_Fosc / 9600;
while(--i);
}
while(--ms);
}
uchar leddata[]={
0x3F, //"0"
0x06, //"1"
0x5B, //"2"
0x4F, //"3"
0x66, //"4"
0x6D, //"5"
0x7D, //"6"
0x07, //"7"
0x7F, //"8"
0x6F, //"9"
0x77, //"A"
0x7C, //"B"
0x39, //"C"
0x5E, //"D"
0x79, //"E"
0x71, //"F"
0x76, //"H"
0x38, //"L"
0x37, //"n"
0x3E, //"u"
0x73, //"P"
0x5C, //"o"
0x40, //"-"
0x80, //??
0x00 //???
};
uchar ledbit[]={
0xfe, //w1
0xfd, //w2
0xfb, //w3
0xf7, //w4
0xef, //w5
0xdf, //w6
0xbf, //w7
0x7f, //w8
};
void display(uint i)
{
// uint b,s,g,q;
// q = i/1000;
// b = i%1000/100;
// s = i%100/10;
// g = i%10;
P0 = leddata[i/1000];
du = 1;
du = 0;
P0 = 0xfe;
we = 1;
we = 0;
P0 = 0xff;
delay(1);
P0 = leddata[i%1000/100] ;
du = 1;
du = 0;
P0 = 0xfd;
we = 1;
we = 0;
P0 = 0xff;
delay(1);
P0 = leddata[i%100/10];
du = 1;
du = 0;
P0 = 0xfb;
we = 1;
we = 0;
P0 = 0xff;
delay(1);
P0 = leddata[i%10];
du = 1;
du = 0;
P0 = 0xf7;
we = 1;
we = 0;
P0 = 0xff;
delay(1);
}
void main()
{
while(1)
{
display(5678);
}
}
|
|