微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 用8个发光管演示出8位二进制数累加过程

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

时间:10-02 整理:3721RD 点击:
#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赋值吗?新手,很困惑,望高手解答!

uchar a;  定义a时如果不给变量赋值 默认赋值0   a=1时为0x01 开发板上开机默认所有引脚为高电平 所以要取反 按16进制为0xfe  第一脚为低电平 使led亮  其他数值依次类推

至于a的值和编译器有关你可以试试你的编译器默认值是不是0

请教一下一轮8位二进制数累加完成后,怎么实现循环的了?

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

有一定道理,先谢谢再说、、、

a是uchar类型,范围0到255,255等于1111 1111,a=0,~a=1111 1111;
a=1,~a=1111 11110;a=2,~a=1111 1101。以此类推

a是uchar类型,范围0到255,255等于1111 1111,a=0,~a=1111 1111;此时都是高电平,不亮
a=1,~a=1111 11110,此时只有p01口低电平才亮;a=2,~a=1111 1101,只有p02口低电平才亮。以此类推

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

网站地图

Top