#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;
}怎么數(shù)碼管顯示出來(lái)小數(shù)啊
你的運(yùn)算有錯(cuò)誤 應(yīng)該改為
qian=num_2/1000;
bai=(num_2%1000)/100;
shi=((num_2%1000)%100)/10;
ge=((num_2%1000)%100)%10;
還有#include<intrins.h> 可以不要啦
數(shù)碼管的小數(shù)點(diǎn),大部分是最高位控制,比如0x7F是不帶小數(shù)點(diǎn)的“8”,而0XFF就是帶小數(shù)點(diǎn)的“8”。
可以把帶小數(shù)的數(shù)字字模另列一個(gè)表,也可以把不帶小數(shù)的碼+(0x80)(共陰極)
對(duì)于你的表中的數(shù)據(jù),應(yīng)該是共陽(yáng)極的,{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}將表中的每個(gè)數(shù)-0x80即可;
是你的運(yùn)算有錯(cuò)誤 應(yīng)該改為
qian=num_2/1000;
bai=(num_2%1000)/100;
shi=((num_2%1000)%100)/10;
ge=((num_2%1000)%100)%10;
昨天我試過(guò)了 換過(guò)來(lái)就可以了 運(yùn)算錯(cuò)誤導(dǎo)致機(jī)器找不到這個(gè)數(shù)就出錯(cuò)了 比如你的 shi=num_2/10%100;num_2=4321 時(shí) shi=32 這時(shí)就出錯(cuò)啦
歡迎光臨 (http://www.torrancerestoration.com/bbs/) | Powered by Discuz! X3.1 |