用8个发光管演示出8位二进制数累加过程

2019-07-16 02:38发布

#include<reg52.h>  //52单片机头文件
#include <intrins.h> //包含有左右循环移位子函数的库
#define uint unsigned int    //宏定义
#define uchar unsigned char  //宏定义
void delay(uint z)  //延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时200ms.
{     //delay(500);大约延时500ms.
uint x,y;
for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}
void main()      //主函数
{
uchar a;
while(1)        //大循环
{
  a++;
  P1=~a;
  delay(200);
}
}
请问这个程序为什么能实现8个发光管演示出8位二进制数累加过程,而且在使用a++之前不用先给a赋值吗?新手,很困惑,望高手解答!


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
星期日LYR
1楼-- · 2019-07-16 19:19
a是uchar类型,范围0到255,255等于1111 1111,a=0,~a=1111 1111;此时都是高电平,不亮
a=1,~a=1111 11110,此时只有p01口低电平才亮;a=2,~a=1111 1101,只有p02口低电平才亮。。。以此类推
jiangxiaowenzsz
2楼-- · 2019-07-16 06:54
 精彩回答 2  元偷偷看……
gcxzhz
3楼-- · 2019-07-16 11:35
uchar a;  定义a时如果不给变量赋值 默认赋值0   a=1时为0x01 开发板上开机默认所有引脚为高电平 所以要取反 按16进制为0xfe  第一脚为低电平 使led亮  其他数值依次类推
U10024127
4楼-- · 2019-07-16 14:09
至于a的值和编译器有关你可以试试你的编译器默认值是不是0
芸芸众生3737
5楼-- · 2019-07-16 16:09
请教一下一轮8位二进制数累加完成后,怎么实现循环的了?
157442843
6楼-- · 2019-07-16 16:25
芸芸众生3737 发表于 2015-1-17 14:39
请教一下一轮8位二进制数累加完成后,怎么实现循环的了?


a定义的上一字符型量,只有8位,当a++到 1111 1111 时再a++就成了 1 0000 0000,字符型变量只有8位,所以第9位是会自动丢掉的,就成了 0000 0000 ,就一轮又开始了。个人理解,有误勿喷!

一周热门 更多>