數碼管是共陰的,在板子上能顯示00,但是不會變化。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6; //U1鎖存端
sbit wela=P2^7; //U2鎖存端
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delayms(uint);
void display(uchar shi,uchar ge)
{
dula=1;
P0=table[shi];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delayms(5);
dula=1;
P0=table[ge];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delayms(5);
}
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
uint read()
{
uchar t1,th1,th2;
uint val;
while(1)
{
th1=TH0;
t1=TL1;
th2=TH0;
if(th1==th2)
break;
}
val=th1*256+t1;
return val;
}
void main()
{
uchar a,b;
uint num;
TMOD=0x05;
TH0=0;
TL0=0;
TR0=1;
while(1)
{
num=read();
if(num>=100)
{
num=0;
TH0=0;
TL0=0;
}
a=num/10;
b=num%10;
display(a,b);
}
}
然后我用proteus仿真,數碼管居然都不能正常顯示,求指教。
uj5u.com熱心網友回復:
while(1){
th1=TH0;
t1=TL1;
th2=TH0;
if(th1==th2)
break;
}
你的這段代碼是什么意思
uj5u.com熱心網友回復:
val=th1*256+t1;這段代碼怎么用TH0加TL1
uj5u.com熱心網友回復:
感覺代碼比較混亂,建議樓主寫代碼后面帶上注釋,C語言模塊化程式更直觀uj5u.com熱心網友回復:
抱歉,看不懂是如何計算的,有高位0有高位1的,感覺就是一個亂。定時器賦值都是0?通常定時器作為計時用都回定一個值,然后高位和低位都要賦值,通常不會是賦值0.
uj5u.com熱心網友回復:
我不知道你的原理圖但是顯示函式應該這么寫
(好久沒寫,不知道對不對)
dula=1;
wela=0;
P0=table[shi];
delayms(5);
dula=0;
wela=1;
P0=table[ge];
delayms(5);
uj5u.com熱心網友回復:
既然你的數碼管只有0-99TMOD=0x05 那么你用的應該是計數器2
那么只需要讀低位TH1就行能計數0-255
uj5u.com熱心網友回復:
這個是確認TL0沒有向TH0進位吧,不過用不上
uj5u.com熱心網友回復:
哈哈哈,我太菜了,不過這是51計時器0,不是定時器,可能我寫的太亂了
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/57893.html
標籤:單片機/工控
上一篇:51單片初學者在線求助大佬
