找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4714|回复: 7
打印 上一主题 下一主题
收起左侧

at89c52单片机用独立按键控制数码管加减

[复制链接]
跳转到指定楼层
楼主
ID:245302 发表于 2017-11-2 13:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用独立按键控制数码管加减,s2一直按着数码管就一直加,怎么做?

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:245339 发表于 2017-11-2 15:22 | 只看该作者
单片机反应速度很快要想做到一直按着一直加,应该加上适当的延时。s2一按下触发延时函数延时0.5秒就加一这样就可以了
回复

使用道具 举报

板凳
ID:245340 发表于 2017-11-2 15:26 | 只看该作者
去掉松手检测程序,加上延时程序,就可以实现一直加了
回复

使用道具 举报

地板
ID:245302 发表于 2017-11-2 17:07 来自手机 | 只看该作者
1377231861 发表于 2017-11-2 15:26
去掉松手检测程序,加上延时程序,就可以实现一直加了

能发程序给我看一下吗
回复

使用道具 举报

5#
ID:245302 发表于 2017-11-2 17:09 来自手机 | 只看该作者
1377231861 发表于 2017-11-2 15:26
去掉松手检测程序,加上延时程序,就可以实现一直加了

有具体程序给我借鉴一下吗
回复

使用道具 举报

6#
ID:213173 发表于 2017-11-2 17:53 | 只看该作者
//短按+/-,长按连续+/-示例,按键和LED端口按你的实际电路定义。变量num按实际需要设限。宏定义延时计数按实际需要修改。
#include <REG51.H>
#define uint unsigned int                         //宏定义数据类型uint
#define uchar unsigned char                 //宏定义数据类型uchar
#define key_S 1000                                        //宏定义短按(约20ms)
#define key_L 30000                                        //宏定义长按(约2/3s)
#define key_M 20000                                        //宏定义长按(约1/3s)
sbit key1=P3^6;                                                //加键
sbit key2=P3^7;                                                //减键
uchar num=1;

void keyscan()                                                        //按键扫描
{
        static uint count1=0,count2=0;//计数变量
        if(!key1)   
        {  
                count1++;  
                if(count1>=key_L)                                //长按
                {
                        if(num<255)
                                num++;        
                        count1=key_M;
                }
        }  
        else                                                                        //按键抬起
        {  
                if(count1>key_S && count1<key_L)//短按
                {
                        if(num<255)
                                num++;
                }
                count1=0;                                                        //count清0
        }   
        if(!key2)   
        {  
                count2++;  
                if(count2>=key_L)                                //长按
                {
                        if(num>0)
                                num--;        
                        count2=key_M;
                }
        }  
        else                                                                        //按键抬起
        {  
                if(count2>key_S && count2<key_L)//短按
                {
                        if(num>0)
                                num--;
                }
                count2=0;                                                        //count清0
        }
}

void main()
{
        while(1)
        {
                keyscan();                                //按键扫描
                P1=~num;                                        //LED显示低电平显示
        }
}
回复

使用道具 举报

7#
ID:245403 发表于 2017-11-2 18:24 | 只看该作者
可能程序错了
回复

使用道具 举报

8#
ID:245473 发表于 2017-11-2 20:48 | 只看该作者
去掉松手检测程序,加上延时程序,就可以实现一直加了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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