打印

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

[复制链接]
836|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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 | 只看该作者
还有一个方法,写一句,注释一句,就不会乱了。

使用特权

评论回复
5
cws7030| | 2016-12-2 15:27 | 只看该作者
加一个按健标置位,按下置1,松手清0

使用特权

评论回复
6
chuangbao|  楼主 | 2016-12-2 18:21 | 只看该作者
yichunshan 发表于 2016-12-2 09:10
按照你的思路,可以试试这样:

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

谢谢!

使用特权

评论回复
7
chuangbao|  楼主 | 2016-12-2 18:43 | 只看该作者
cws7030 发表于 2016-12-2 15:27
加一个按健标置位,按下置1,松手清0

按键标置位怎么用?能说明下吗?

使用特权

评论回复
8
chuangbao|  楼主 | 2016-12-2 19:05 | 只看该作者
songchenping 发表于 2016-12-2 14:41
还有一个方法,写一句,注释一句,就不会乱了。

谢谢!

使用特权

评论回复
9
lihui567| | 2016-12-2 20:13 | 只看该作者
num++;
if(num==8)
{nun=0;}应该加上这个语句啊

使用特权

评论回复
10
皈依| | 2016-12-3 09:01 | 只看该作者
num++;
if(num>8)
{
  beep = 1; //蜂鸣器响一下
  num=0;
}

使用特权

评论回复
11
dirtwillfly| | 2016-12-4 18:44 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

20

帖子

1

粉丝