• 基于51单片机按键短按长按的项目工程


    #include<reg52.h>
    #include<stdio.h>
    #define uchar unsigned char
    #define uint unsigned int
    uchar code Duan[]={0x3F, 0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//共阴极数码管0-9段码表,高电平导通数码管段显示,低电平导通数码管位显示。
    uchar Data_Buffer[8]={0,0,0,0,0,0,0,0};//声明数据缓存变量
    sbit led0=P1^4;//位定义启停led指示灯
    sbit AddSpeed=P3^0;//位定义加速按键端口
    sbit SubSpeed=P3^2;//位定义减速按键端口
    sbit qiting=P3^4;//位定义启停按键端口
    uchar qitingnum;//声明启停次数变量
    uint SetSpeed=0;//声明设定速度变量
      void delay(uchar x)//延时函数
    {
       uint i,j;
       for(i=x;i>0;i--)
        for(j=110;j>0;j--);
      }
      void SpeedSet()//设定速度函数
    {
       if(qiting==0)
     {
        delay(5);
        if(qiting==0)
      {
         qitingnum++;
         while(qiting==1);
        }
       }
       if(qitingnum==1)
    {
        led0=0;
        if(AddSpeed==0)//判断加速键是否按下
      {
         delay(5);//延时
         if(AddSpeed==0)//再次判断加速键是否按下
       {
          SetSpeed+=1;//设定速度变量每次加10
          if(SetSpeed>3500)//判断设定速度变量是否大于3500
        {
           SetSpeed=3500;//设定速度变量归为3500
          }
         }
        }
        if(SubSpeed==0)//判断减速键是否按下
      {
         delay(5);//延时
         if(SubSpeed==0)//再次判断减速键是否按下
       {
          SetSpeed-=1;//设定速度变量每次减10
          if(SetSpeed<0)//判断设定速度变量是否小于0
          SetSpeed=0;//设定速度变量归0
         }
        }
       }
       if(qitingnum==2)
     {
        qitingnum=0;
        led0=1;
       }
      }
      void SegRefre()//数码管显示刷新函数
    {
       Data_Buffer[0]=SetSpeed/1000;//设定速度变量千位数
       Data_Buffer[1]=SetSpeed%1000/100;//设定速度变量百位数
       Data_Buffer[2]=SetSpeed%100/10;//设定速度变量十位数
       Data_Buffer[3]=SetSpeed%10;//设定速度变量个位数
      }
      void SystemInit()//系统初始化函数
    {
       TMOD=0X01;//定时器0方式1,定时器1方式2。  
       TH0=0xf8;//初装定时器0高八位寄存器定时数值
       TL0=0x50 ;//初装定时器0低八位寄存器定时数值,即2毫秒。
       EA=1;//开总中断
       ET0=1;//开定时器0中断允许
       TR0=1;//开定时器0中断
      }
     void Time0() interrupt 1//定时器0中断服务函数
    {
       static uchar Bit=0;//数码管位码静态变量,退出程序,其数值保留。
    //   static uint time=0;//转速测量周期变量
       TH0=0xf8;//重装定时器0高八位寄存器计数值
       TL0=0x50 ;//重装定时器0低八位寄存器计数值,即2毫秒。
       Bit++;//数码管位码选择位变量
       if(Bit>4)//判断数码管位码选择位变量是否大于8
       Bit=0;//数码管位码选择位变量归0
       P2=0xff;//数码管位码显示关闭
       P0=Duan[Data_Buffer[Bit]];//数码管段码显示
       switch(Bit)//数码管位码变量选择位
     {
        case 0:
               P2=0Xfe;//实际速度变量千位
               break;
        case 1:
               P2=0Xfd;//实际速度变量百位
               break;
        case 2:
               P2=0Xfb;//实际速度变量十位
               break;
        case 3:
               P2=0Xf7;//实际速度变量个位
               break;
       }
      }
    /**************主函数************/
      void main()
    {
       SystemInit();//系统初始化函数
       while(1)
    {
        SpeedSet();//设定速度函数
        SegRefre();//数码管显示刷新函数
       }
    }
  • 相关阅读:
    CentOS中文件夹基本操作命令
    Apache和Nginx下禁止访问特定的目录或文件
    自适应网页设计(Responsive Web Design)
    使用Google Https搜索
    AMD 3600+ X2 CPU配合昂达A69T主板超频教程
    dedecms上传图片相对路径改成绝对路径方法
    安装ecshop默认安装后的错误解决方案
    动态加载JS脚本的4种方法
    Java虚拟机(二)对象的创建与OOP-Klass模型
    Android系统启动流程(四)Launcher启动过程与系统启动流程
  • 原文地址:https://www.cnblogs.com/AChenWeiqiangA/p/12891610.html
Copyright © 2020-2023  润新知