标题: 单片机按键+ -操作程序源代码 [打印本页]

作者: hsy2966    时间: 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]; //在数码管中显示一个数字
        }
}





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1