51proteus仿真:7段数码管显示小数

51proteus仿真:7段数码管显示小数

这个51单片机的proteus仿真实现无符号浮点数的显示。

具体说,显示个位和小数点后三位

数码管的显示一定要注意消隐的问题,每次显示数字之前要先关一次数码管。否则会出现显示混乱。

 

仿真电路图如下:

51proteus仿真:7段数码管显示小数_第1张图片

C程序如下:

 

#include
#include
sbit duan=P3^0;
sbit wei=P3^1;
unsigned char code table[] = {
 0x3f,0x06,0x5b,0x4f,
 0x66,0x6d,0x7d,0x07,
 0x7f,0x6f,0x77,0x7c,
 0x39,0x5e,0x79,0x71 };

void delay(void)
{
  unsigned char i,j;
for(i=0;i<10;i++)
  for(j=0;j<110;j++);


}


void show6led(float num)
{
unsigned char i;

 
 i=num;
 duan=1;
 P2=table[i]+0x80;  //显示个位和小数点
 duan=0;
 P2=0xff;   //先关闭led
 wei=1;
 P2=0xfb;             //段选3
 wei=0;
 delay();
 

 
   P2=0xff; 
 P3=0xff;  //这两句非常重要,主要是清屏消隐
 num=num-i;
 num=num*10;
 i=num;
 duan=1;
 P2=table[i];
 duan=0;
  P2=0xff;
  wei=1;
 P2=0xf7;          //段选4,十分位
 wei=0;
 delay();

 
    P2=0xff;
 P3=0xff;
  num=num-i;
 num=num*10;
 i=num;
 duan=1;
 P2=table[i];
 duan=0;
 P2=0xff;
 wei=1;
 P2=0xef;          //段选5,百分位
 wei=0;
 delay();

 
 
  P2=0xff;
 P3=0xff;
 num=num-i;
 num=num*10;
 i=num;
 duan=1;
 P2=table[i];
 duan=0;
 P2=0xff;
 wei=1;
 P2=0xdf;          //段选6,千分位
 wei=0;
 delay();
   P2=0xff;
 P3=0xff;
 
 }

 main()
 {
  float number;
  number=3.718;
  
  while(1)
  {
   show6led(number);
 
  }


 }

 

 

转载于:https://www.cnblogs.com/proteus/archive/2011/10/27/2227075.html

你可能感兴趣的:(51proteus仿真:7段数码管显示小数)