打印

单片机按键问题

[复制链接]
483|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
栩栩如生|  楼主 | 2015-9-11 19:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
想达到的效果是,按一次按键k,数码管显示0到8随着按键增加,就是按一次按键,数码管加1,按下按键
        led-p2亮,松开熄灭    大神帮忙看看为啥效果达不到
沙发
栩栩如生|  楼主 | 2015-9-11 19:03 | 只看该作者

#include<reg52.h>   //头文件
#define led P0                         //led代替P0
#define uint unsigned int
#define uchar unsigned char
void ys(uint p);    //延时函数
sbit a=P2^2;
sbit b=P2^3;   //138译码器控制端口abc
sbit c=P2^4;
sbit k=P3^3;    //独立按键
sbit p2=P2^6;  //led发光二极管
uint z=0;
uint h=0;
uchar e[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void main()
{
        a=0;
        b=0;   //138译码器端口全置0,控制数码器位
        c=0;
        while(1)
        {
                if(k==0)  //判断按键是否按下
                {
                        ys(5);  //延时消抖
                        if(k==0);   //再次判断
                        {
                                p2=0;  //led亮
                                h++;  //数组下标自增
                                if(h==8)  //判断数组下标是否为8
                                h=0; //到了8,就置0
                                led=e[h];  //给数码管位选赋值
                                while(!k);        //判断按键是否松手
                                ys(5); //延时
                                while(!k);  //再次判断是否松手
                        }
                }
                else
                {
                         p2=1;  //led熄灭
                }
        }
         
}
void ys(uint p)
{
        uint i,f;
        for(i=p;i>0;i--)
                for(f=110;f>0;f--);
}

使用特权

评论回复
板凳
pangb| | 2015-9-11 19:03 | 只看该作者
换了端口按键呢

使用特权

评论回复
地板
chenjunt| | 2015-9-11 19:03 | 只看该作者
你这程序写得,真是不知道怎么看啊,怎么在该加括弧的地方什么都没有呢

使用特权

评论回复
5
ousj| | 2015-9-11 19:04 | 只看该作者
消抖的时间是不是太长了。你能按那么长时间吗

使用特权

评论回复
6
zyf部长| | 2015-9-11 19:04 | 只看该作者
设断点调试,看按下按键能不能跑到按键处理里面,逐步排查就能找出原因了。

使用特权

评论回复
7
栩栩如生|  楼主 | 2015-9-11 19:04 | 只看该作者
好吧,我再看看

使用特权

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

本版积分规则

310

主题

2657

帖子

0

粉丝