#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.51hei.com/bbs/) | Powered by Discuz! X3.1 |