找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机按键+ -操作程序源代码

[复制链接]
跳转到指定楼层
楼主
ID:11064 发表于 2015-11-3 19:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

sbit KEY_UP =P3^3;  //该按键按一次加1
sbit KEY_DOWN =P3^4; //该按键按1次减1

unsigned char code SHU[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9

/*------------------------------------------------
uS延时函数,含有输入参数 unsigned char t,无返回值
unsigned char 是定义无符号字符变量,其值的范围是
0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
长度如下 T=tx2+5 uS
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{   
        while(--t);
}
/*------------------------------------------------
mS延时函数,含有输入参数 unsigned char t,无返回值
unsigned char 是定义无符号字符变量,其值的范围是
0~255 这里使用晶振12M,精确延时请使用汇编
------------------------------------------------*/
void DelayMs(unsigned char t)
{
        while(t--)
        {
                //大致延时1mS
            DelayUs2x(245);
                DelayUs2x(245);
        }
}

/*-- 主函数 --*/
void main (void)
{
        unsigned char num=0;                  
        KEY_UP=1; //按键输入端口电平置高
        KEY_DOWN=1;
        while (1)         //主循环
          {
                  if(!KEY_UP)  //如果检测到低电平,说明按键按下
            {
                         DelayMs(10); //延时去抖,一般10-20ms
                     if(!KEY_UP)     //再次确认按键是否按下,没有按下则退出
                           {
                        while(!KEY_UP);//如果确认按下按键等待按键释放,没有释放则一直等待
                               {
                                           if(num<9)    //加操作
                                          num++;
                                 }
                           }
                }
                if(!KEY_DOWN)  //如果检测到低电平,说明按键按下
            {
                         DelayMs(10); //延时去抖,一般10-20ms
                     if(!KEY_DOWN)     //再次确认按键是否按下,没有按下则退出
                           {
                        while(!KEY_DOWN);//如果确认按下按键等待按键释放,没有释放则一直等待
                               {
                                       if(num>0)  //减操作
                                  num--;
                                 }
                           }
                }
                   P2=0xfe; //数码管的位码,只有先选通,才能够显示,第一位数码管选通,即二进制1111 1110
            P0=SHU[num%10]; //在数码管中显示一个数字
        }
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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