求教,单片机高位消零,下列程序怎改。

[复制链接]
1792|11
 楼主| samlianxing 发表于 2015-8-30 14:52 | 显示全部楼层 |阅读模式
#include <reg52.h>
sbit P33=P3^3;
unsigned char code Tab[] = { 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff };
unsigned long int x;
void delay1ms(unsigned int i)
{
  unsigned char j;
  while(i--)
  {
   for (j=0;j<115;j++)//1ms基准廷时
   {
    ;
   }
  }
}
void Display(unsigned long int x)
{
   P1=0xf7;         
   P0=0xff;         
   P0=Tab[x%10];     
   delay1ms(1);     

   P1=0xfb;        
   P0=0xff;         
   P0=Tab[x/10%10];   
   delay1ms(1);      

   P1=0xfd;         
   P0=0xff;         
   P0=Tab[x/100%10];  
   delay1ms(1);     

   P1=0xfe;         
   P0=0xff;         
   P0=Tab[x/1000%10];
   delay1ms(1);     
}

void main(void)
{
EA=1;
EX1=1;
IT1=1;//INT1

while (1) /
  {
   Display(x);
  }
}

void Key_counter()interrupt 2
{
if(P33==0){
delay1ms(5);  
if(P33==0){
x=(x+1)%10000;
}
}
}
dirtwillfly 发表于 2015-8-30 16:34 | 显示全部楼层
把高位置零吗?
while (1) /
  {
   Display(x);     //只要你改变x的值,显示的数据自然就变了
  }
}
 楼主| samlianxing 发表于 2015-8-30 17:04 | 显示全部楼层
师傅!我是初学的,还是不明怎改变x的值,x不是巳设了按键改变吗?能给个实例吗,改变x就能高位置零,谢!
 楼主| samlianxing 发表于 2015-8-30 17:07 | 显示全部楼层
是高位0取消,即0010只显示10。
 楼主| samlianxing 发表于 2015-8-30 17:20 | 显示全部楼层
dirtwillfly 发表于 2015-8-30 16:34
把高位置零吗?
while (1) /
  {


师傅!我是初学的,还是不明怎改变x的值,x不是巳设了按键改变吗?能给个实例吗,改变x就能高位置零,谢!
 楼主| samlianxing 发表于 2015-8-30 17:20 | 显示全部楼层
dirtwillfly 发表于 2015-8-30 16:34
把高位置零吗?
while (1) /
  {

是高位0取消,即0010只显示10。
datouyuan 发表于 2015-8-31 09:19 | 显示全部楼层
本帖最后由 datouyuan 于 2015-8-31 09:34 编辑

void Display(unsigned long int x)
你的显示只有4位,应改成void Display(unsigned int x)


  1. //从高位开始显示简单些
  2. void Display(unsigned int x)
  3. {
  4.         unsigned char a[4];
  5.         bit bBit=0;
  6.         a[0]=x%10; a[1]=x/10%10;
  7.         a[2]=x/100%10; a[3]=x/1000%10;
  8.         if(bBit || a[3])
  9.         {
  10.                 bBit=1;
  11.                 P1=0xfe;
  12.                 P0=0xff;
  13.                 P0=Tab[a[3]];
  14.                 delay1ms(1);
  15.         }
  16.         if(bBit || a[2])
  17.         {
  18.                 bBit=1;
  19.                 P1=0xfd;
  20.                 P0=0xff;
  21.                 P0=Tab[a[2]];
  22.                 delay1ms(1);
  23.         }
  24.         if(bBit || a[1])
  25.         {
  26.                 bBit=1;
  27.                 P1=0xfb;
  28.                 P0=0xff;
  29.                 P0=Tab[a[1]];
  30.                 delay1ms(1);
  31.         }
  32.         P1=0xf7;
  33.         P0=0xff;
  34.         P0=Tab[a[0]];   
  35.         delay1ms(1);
  36. }


 楼主| samlianxing 发表于 2015-8-31 10:37 | 显示全部楼层
datouyuan 发表于 2015-8-31 09:19
void Display(unsigned long int x)
你的显示只有4位,应改成void Display(unsigned int x)

老师可以了,谢!还有点小问题是led除个位外其余的都比较暗,是正常吗?
datouyuan 发表于 2015-8-31 10:48 | 显示全部楼层
要想一样亮,个位显示后要关显示。
P1=0xff;

还有我给你代码要改,
把delay1ms(1); 放到if外,这样就不会在只显示个位时亮度比显示4位亮。

评分

参与人数 1威望 +2 收起 理由
samlianxing + 2 很给力!

查看全部评分

 楼主| samlianxing 发表于 2015-8-31 10:56 | 显示全部楼层
datouyuan 发表于 2015-8-31 10:48
要想一样亮,个位显示后要关显示。
P1=0xff;

改好了老师,谢!:handshake
datouyuan 发表于 2015-8-31 10:56 | 显示全部楼层




  1. //从高位开始显示简单些
  2. void Display(unsigned int x)
  3. {
  4.         unsigned char a[4];
  5.         bit bBit=0;
  6.         a[0]=x%10; a[1]=x/10%10;
  7.         a[2]=x/100%10; a[3]=x/1000%10;
  8.         if(bBit || a[3])
  9.         {
  10.                 bBit=1;
  11.                 P1=0xfe;
  12.                 P0=0xff;
  13.                 P0=Tab[a[3]];
  14.                 //delay1ms(1);
  15.         }
  16.         delay1ms(1);
  17.         if(bBit || a[2])
  18.         {
  19.                 bBit=1;
  20.                 P1=0xfd;
  21.                 P0=0xff;
  22.                 P0=Tab[a[2]];
  23.                 //delay1ms(1);
  24.         }
  25.         delay1ms(1);
  26.         if(bBit || a[1])
  27.         {
  28.                 bBit=1;
  29.                 P1=0xfb;
  30.                 P0=0xff;
  31.                 P0=Tab[a[1]];
  32.                 //delay1ms(1);
  33.         }
  34.         delay1ms(1);
  35.         P1=0xf7;
  36.         P0=0xff;
  37.         P0=Tab[a[0]];   
  38.         delay1ms(1);
  39.         
  40.         P0=0xff;P1=0xff;
  41. }


rogerliu1104 发表于 2015-8-31 15:19 | 显示全部楼层
不错!:loveliness:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

24

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部