標題:
數(shù)碼管有鬼影問題
[打印本頁]
作者:
WANG....
時間:
2017-10-15 11:22
標題:
數(shù)碼管有鬼影問題
那個老師知道;蛘吣莻大佬明白給我講解一下謝謝。為什么數(shù)碼管輸入5678顯示6785;5還有鬼影。
#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);
}
unsigned char 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 //???
};
unsigned char 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;
du = 1;
P0 = leddata[q];
du = 0;
delay(10);
we = 1;
P0 = 0xfe;
we = 0;
P0 = 0xff;
du = 1;
P0 = leddata[b] ;
du = 0;
delay(5);
we = 1;
P0 = 0xfd
we = 0;
P0 = 0xff;
du = 1;
P0 = leddata[s];
du = 0;
delay(5);
we = 1;
P0 = 0xfb;
we = 0;
P0 = 0xff;
du = 1;
P0 = leddata[g];
du = 0;
delay(5);
we = 1;
P0 = 0xf7;
we = 0;
P0 = 0xff;
}
void main()
{
while (1)
{
display(5678);
}
}
復制代碼
作者:
小潘哥
時間:
2017-10-15 18:28
這個用定時器定時1ms,然后每ms對一個數(shù)碼管進行一次刷新,這樣更好吧
要去除鬼影,在刷新下一個數(shù)碼管之前,先P0=0xFF可P0=0x00吧,程序就不細看了,,,,,
作者:
yzwzfyz
時間:
2017-10-15 23:56
掃描時序未合理規(guī)劃安排。
作者:
wulin
時間:
2017-10-16 09:08
本帖最后由 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);
}
}
作者:
hello1314
時間:
2017-10-16 13:19
刷新問題
作者:
WANG....
時間:
2017-10-22 13:14
wulin 發(fā)表于 2017-10-16 09:08
你的顯示程序延時位置不對,另外集中分解數(shù)據(jù)會耽誤時間使個位亮度大于其他位。給你改了一下,你試試。
#i ...
謝謝
作者:
admin
時間:
2017-10-23 00:59
這是我6年前些的 單片機數(shù)碼消隱問題的的解決方案:
http://www.torrancerestoration.com/bbs/dpj-10971-1.html
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1