找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机独立按键源程序与电路图

[复制链接]
跳转到指定楼层
楼主


三个独立按键S2/S3/S4手动设置报警距离,S4是设置键,S2是加键,S3是减键;按一下S4可以进行报警距离设置,按一次S2报警距离就会增加1cm,按一次S3报警距离就会减小1cm。下面是有关按键的程序,没有看懂,希望指教

/********************独立按键程序*****************/
uchar key_scan;         //按键值

void key()         //独立按键程序
{
        static uchar key_new;
        key_can = 20;                   //按键值还原
        P2 |= 0x07;
        if((P2 & 0x07) != 0x06)                //按键按下
        {
                delay_1ms(1);                     //按键消抖动
                if(((P2 & 0x07) != 0x07) && (key_new == 1))
                {                                                //确认是按键按下
                        key_new = 0;
                        switch(P2 & 0x07)
                        {
                                case 0x05: key_can = 1; break;           //得到k2键值
                                case 0x04: key_can = 2; break;           //得到k3键值
                                case 0x02: key_can = 3; break;           //得到k4键值
                        }
                }                        
        }
        else
                key_new = 1;        
}

/****************按键处理显示函数***************/
void key_with()
{
        if(key_can == 1)                //设置键
        {
                menu_1 ++;
                if(menu_1 >= 2)
                {
                        menu_1 = 0;
                        smg_i = 3;                //只显示3位数码管
                }
                if(menu_1 == 1)
                {
                        smg_i = 4;            //只显示4位数码管
                }
        }
        if(menu_1 == 1)                        //设置报警
        {
                if(key_can == 2)
                {
                        set_d ++ ;                //加1
                        if(set_d > 400)
                                set_d = 400;
                }
                if(key_can == 3)
                {
                        set_d -- ;                //减1
                        if(set_d <= 1)
                                set_d = 1;
                }
                dis_smg[0] = smg_du[set_d % 10];                   //取小数显示
                dis_smg[1] = smg_du[set_d / 10 % 10] ;         //取个位显示
                dis_smg[2] = smg_du[set_d / 100 % 10] & 0xdf ; //取十位显示
                dis_smg[3] = smg_du[10];                //a
        }        
}  

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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