微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 数码管显示疑惑

数码管显示疑惑

时间:10-02 整理:3721RD 点击:
程序原本设想是实现第一个数码管显示1,延时0.5s,然后第二个显示2,延时0.5s,一直到第八个数码管显示7,延时0.5s,然后再回来显示第一个数码管,一直这样循环下去。
但是实际上确变成了第一个数码管显示1,第一,二显示2,第一,二,三显示3,求解程序哪里出错呢
程序如下:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delayms(uint x)          //延时函数
{
uint i,j;
for(i=x;i>0;i--)
  for(j=110;j>0;j--);
}      
void main()
{
while(1)
{             //亮第一个数码管
  uint n,temp=0x7f;
  for(n=0;n<8;n++)
  {
   P2=temp;
   P0=table[n];
   delayms(500);
   temp=~temp;
   temp=temp>>1;
   temp=~temp;
  }
  n=0;         //清零
}
}

你那个TEMP赋值要放WHILE外面

应该是P2语句的问题

你那个右移是移动一位,左侧空位补0。所以移动一位就多一位0.所以问题出在了移动函数上。你用_CROR_函数就解决了

我知道用_cror_函数可以,我移动了之后有再取反啊,还会多一位0?

取反是所有位都反了一次,肯定有错误。你用或一置一的方法,就可以消除这个影响了。

我明白了,谢谢

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top