标题: [求助]数码管问题 [打印本页]

作者: ao笑红尘    时间: 2012-2-15 21:16
标题: [求助]数码管问题

#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;
}怎么数码管显示出来小数啊


作者: 志在四方    时间: 2012-2-15 22:44

你的运算有错误 应该改为

qian=num_2/1000;
 bai=(num_2%1000)/100;
 shi=((num_2%1000)%100)/10;
 ge=((num_2%1000)%100)%10;

还有#include<intrins.h> 可以不要啦


作者: ahshmj    时间: 2012-2-16 10:00

数码管的小数点,大部分是最高位控制,比如0x7F是不带小数点的“8”,而0XFF就是带小数点的“8”。

可以把带小数的数字字模另列一个表,也可以把不带小数的码+(0x80)(共阴极)

对于你的表中的数据,应该是共阳极的,{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}将表中的每个数-0x80即可;
 

[此贴子已经被作者于2012-2-16 10:05:07编辑过]

作者: 志在四方    时间: 2012-2-16 15:25

是你的运算有错误 应该改为

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 这时就出错啦


作者: ao笑红尘    时间: 2012-2-16 16:45
谢谢了 本来还要加个定时器做流水灯的 发现数码管有些问题就没做了




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1