找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3208|回复: 3
收起左侧

求if语句详细解释,51单片机

[复制链接]
ID:95778 发表于 2015-11-14 21:16 | 显示全部楼层 |阅读模式
#include<reg52.h>
unsigned char wei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//位选P2口 低电平有效
unsigned char duan[]={0Xc0,0Xf9,0Xa4,0Xb0,0X99,0X92,0X82,0Xf8,0X80,0X90};//段选0-9 P0口低电平有效
sbit key1=P1^4;        //P1.4端口一个按键
void main()
{
        P2=0x00;        //让P2口输出低电平(位选),8个数码管 共阳极,阳极由9012PNP管驱动,所以当P2口为低电平时 才有效
        while(1)
        {                                //把P2=0x00;写到到10行时也就是while(1)下面程序会报错.没弄懂
                char a;
                if(key1==0)                //判断key1是否等于0(P1^4端口是否为低电平)
                {
                        a++;                //如果key1等于0,a就+1
                        if(a==10)   //如果a=10,超过10数码管不能显示
                        a=0;            //就让a=0
                        while(!key1);//松手程序,
                }
                else                        //否则
                P0=duan[a];                //让P0口取duan中的元素.
        }
}


以上是对照视频中写的程序,现在程序可以执行,只是没加入反复判断按键是否按下这条语句,
我想说的是,这个if语句我没弄懂.
1, if(key1==0)  //判断key1是否等于0 也是是判断按键是否按下去了,这句我懂
2, a++;            //如何按键按下去了,为低电平,那么a就+1 这句我也懂
3 if(a==10)      //由于数码管只能显示0-9 单位 超过10就显示不出,所以再次判断a是否等于10
4 a=0;             //结合上面那条语句 如果a等于10 就让a置0
5 while(!key1)   //送手程序,我似乎听懂了,就是单片机执行速度快,我按下去有可能执行了很多次了,所以数码管上会随机显示0-9
6 slse               //这条我知道是否则的意思,可与上面又什么关系呢? if不是判断吗?判断{}里面的内容是否为真,不是真就执行下面的语句
也就是我送开的时候会执行 P0=duan[a];
不管按下不按下数码管是长亮的.
那么我假设 我按下 一个按键 需要一个二极管长亮 又或者我按下一个按键,一个二极管亮,再按一下又熄灭,if应该怎么写.
谢谢!

回复

使用道具 举报

ID:96072 发表于 2015-11-17 13:43 | 显示全部楼层
if后面加else来做
回复

使用道具 举报

ID:96117 发表于 2015-11-17 17:22 | 显示全部楼层
你这问题 有点那个啥 感觉你没搞明白 这个数码管的发光工作原理
先搞清楚再来问吧
回复

使用道具 举报

ID:96131 发表于 2015-11-17 18:49 | 显示全部楼层
if判断的条件通常都是二值的,if选择其中一个值,else选择另一个值。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表