关于按键问题,新手求教!

[复制链接]
 楼主| chuangbao 发表于 2016-12-1 20:04 | 显示全部楼层 |阅读模式
以下是我写的程序, 有个很大的漏洞,num,会无限地++或--,且按下灯也会一直在++或--,现在我想改一改,让led+到8就不加了且蜂鸣器响两下表示加到尽头了,同样让led减到1就不往下减且蜂鸣器响一下表示减完了,,我想了很久,请问这要怎么写呢?各位高手给点思路。。。谢谢,谢谢!


#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit s2=P3^0;
sbit s3=P3^1;
void delay(uint x)                //延时子函数
{
        uint i,j;
        for(i=x;i>0;i--)
                for(j=110;j>0;j--);
}
void main()                           //主函数
{
        uchar num;
        while(1)
        {
                if(s2==0)
                {
                        delay(2);                                                       
                                if(s2==0)       
                                {       
                                        num++;                                                                                                                 
                                        while(!s2);                               
                                }                                                       
                }                                  //按键s2


                if(s3==0)
                {
                        delay(2);                                                       
                                if(s3==0)       
                                {       
                                        num--;                                                                                                                 
                                        while(!s3);                               
                                }                                                       
                }                                 //按键s3


                switch(num)                          //case按下选择8个led灯,
                {
                        case 1 :P1=0xfe;break;
                        case 2 :P1=0xfd;break;
                        case 3 :P1=0xfb;break;
                        case 4 :P1=0xf7;break;
                        case 5 :P1=0xef;break;
                        case 6 :P1=0xdf;break;
                        case 7 :P1=0xbf;break;
                        case 8 :P1=0x7f;break;
                }
        }
}
NE5532 发表于 2016-12-2 08:19 | 显示全部楼层
画了流程图再来写。
yichunshan 发表于 2016-12-2 09:10 | 显示全部楼层
按照你的思路,可以试试这样:

                switch(num)                          //case按下选择8个led灯,
                {      case 0 : num = 1;蜂鸣器;break;
                        case 1 :P1=0xfe;break;
                        case 2 :P1=0xfd;break;
                        case 3 :P1=0xfb;break;
                        case 4 :P1=0xf7;break;
                        case 5 :P1=0xef;break;
                        case 6 :P1=0xdf;break;
                        case 7 :P1=0xbf;break;
                        case 8 :P1=0x7f;break;
                        case 9 : num = 8;  蜂鸣器 ;break;
                        default:break;
                               
                }
songchenping 发表于 2016-12-2 14:41 | 显示全部楼层
还有一个方法,写一句,注释一句,就不会乱了。
cws7030 发表于 2016-12-2 15:27 | 显示全部楼层
加一个按健标置位,按下置1,松手清0
 楼主| chuangbao 发表于 2016-12-2 18:21 | 显示全部楼层
yichunshan 发表于 2016-12-2 09:10
按照你的思路,可以试试这样:

                switch(num)                          //case按下选择8个 ...

谢谢!
 楼主| chuangbao 发表于 2016-12-2 18:43 | 显示全部楼层
cws7030 发表于 2016-12-2 15:27
加一个按健标置位,按下置1,松手清0

按键标置位怎么用?能说明下吗?
 楼主| chuangbao 发表于 2016-12-2 19:05 | 显示全部楼层
songchenping 发表于 2016-12-2 14:41
还有一个方法,写一句,注释一句,就不会乱了。

谢谢!
lihui567 发表于 2016-12-2 20:13 | 显示全部楼层
num++;
if(num==8)
{nun=0;}应该加上这个语句啊
皈依 发表于 2016-12-3 09:01 | 显示全部楼层
num++;
if(num>8)
{
  beep = 1; //蜂鸣器响一下
  num=0;
}
dirtwillfly 发表于 2016-12-4 18:44 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

20

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部