打印

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

[复制链接]
1267|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。

使用特权

评论回复
5
samlianxing|  楼主 | 2015-8-30 17:20 | 只看该作者
dirtwillfly 发表于 2015-8-30 16:34
把高位置零吗?
while (1) /
  {


师傅!我是初学的,还是不明怎改变x的值,x不是巳设了按键改变吗?能给个实例吗,改变x就能高位置零,谢!

使用特权

评论回复
6
samlianxing|  楼主 | 2015-8-30 17:20 | 只看该作者
dirtwillfly 发表于 2015-8-30 16:34
把高位置零吗?
while (1) /
  {

是高位0取消,即0010只显示10。

使用特权

评论回复
7
datouyuan| | 2015-8-31 09:19 | 只看该作者
本帖最后由 datouyuan 于 2015-8-31 09:34 编辑

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


//从高位开始显示简单些
void Display(unsigned int x)
{
        unsigned char a[4];
        bit bBit=0;
        a[0]=x%10; a[1]=x/10%10;
        a[2]=x/100%10; a[3]=x/1000%10;
        if(bBit || a[3])
        {
                bBit=1;
                P1=0xfe;
                P0=0xff;
                P0=Tab[a[3]];
                delay1ms(1);
        }
        if(bBit || a[2])
        {
                bBit=1;
                P1=0xfd;
                P0=0xff;
                P0=Tab[a[2]];
                delay1ms(1);
        }
        if(bBit || a[1])
        {
                bBit=1;
                P1=0xfb;
                P0=0xff;
                P0=Tab[a[1]];
                delay1ms(1);
        }
        P1=0xf7;
        P0=0xff;
        P0=Tab[a[0]];   
        delay1ms(1);
}


使用特权

评论回复
8
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除个位外其余的都比较暗,是正常吗?

使用特权

评论回复
9
datouyuan| | 2015-8-31 10:48 | 只看该作者
要想一样亮,个位显示后要关显示。
P1=0xff;

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

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
samlianxing + 2 很给力!
10
samlianxing|  楼主 | 2015-8-31 10:56 | 只看该作者
datouyuan 发表于 2015-8-31 10:48
要想一样亮,个位显示后要关显示。
P1=0xff;

改好了老师,谢!:handshake

使用特权

评论回复
11
datouyuan| | 2015-8-31 10:56 | 只看该作者




//从高位开始显示简单些
void Display(unsigned int x)
{
        unsigned char a[4];
        bit bBit=0;
        a[0]=x%10; a[1]=x/10%10;
        a[2]=x/100%10; a[3]=x/1000%10;
        if(bBit || a[3])
        {
                bBit=1;
                P1=0xfe;
                P0=0xff;
                P0=Tab[a[3]];
                //delay1ms(1);
        }
        delay1ms(1);
        if(bBit || a[2])
        {
                bBit=1;
                P1=0xfd;
                P0=0xff;
                P0=Tab[a[2]];
                //delay1ms(1);
        }
        delay1ms(1);
        if(bBit || a[1])
        {
                bBit=1;
                P1=0xfb;
                P0=0xff;
                P0=Tab[a[1]];
                //delay1ms(1);
        }
        delay1ms(1);
        P1=0xf7;
        P0=0xff;
        P0=Tab[a[0]];   
        delay1ms(1);
        
        P0=0xff;P1=0xff;
}


使用特权

评论回复
12
rogerliu1104| | 2015-8-31 15:19 | 只看该作者
不错!:loveliness:

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

24

帖子

0

粉丝