#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uint i,num,num_1,num_2,a,b,c;
uint qian,bai,shi,ge;
void display(uint qian,uint bai,uint shi,uint ge);
void delay(uint);
void main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
num_2=4221;
while(1)
{
display(qian,bai,shi,ge);
}
}
void delay(uint i)
{
int x,y;
for(i=x;i>0;i--)
for(y=110;y>0;y--);
}
void T0_timer() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num++;
if(num==2)
{
num=0;
num_2--;
}
}
void display(uint qian,uint bai,uint shi,uint ge)
{
qian=num_2/1000;
bai=num_2/100%10;
shi=num_2/10%100;
ge=num_2%10;
P1=0XFE;
P0=table[qian];
delay(1);
P1=0XFF;
P0=0XFF;
P1=0XFD;
P0=table[bai];
delay(1);
P1=0XFF;
P0=0XFF;
P1=0XFB;
P0=table[shi];
delay(1);
P1=0XFF;
P0=0XFF;
P1=0XF7;
P0=table[ge];
delay(1);
P1=0XFF;
P0=0XFF;
}怎么數碼管顯示出來小數啊
你的運算有錯誤 應該改為
qian=num_2/1000;
bai=(num_2%1000)/100;
shi=((num_2%1000)%100)/10;
ge=((num_2%1000)%100)%10;
還有#include<intrins.h> 可以不要啦
數碼管的小數點,大部分是最高位控制,比如0x7F是不帶小數點的“8”,而0XFF就是帶小數點的“8”。
可以把帶小數的數字字模另列一個表,也可以把不帶小數的碼+(0x80)(共陰極)
對于你的表中的數據,應該是共陽極的,{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}將表中的每個數-0x80即可;
是你的運算有錯誤 應該改為
qian=num_2/1000;
bai=(num_2%1000)/100;
shi=((num_2%1000)%100)/10;
ge=((num_2%1000)%100)%10;
昨天我試過了 換過來就可以了 運算錯誤導致機器找不到這個數就出錯了 比如你的 shi=num_2/10%100;num_2=4321 時 shi=32 這時就出錯啦
歡迎光臨 (http://www.zg4o1577.cn/bbs/) | Powered by Discuz! X3.1 |