zoukankan      html  css  js  c++  java
  • 基于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();//数码管显示刷新函数
       }
    }
  • 相关阅读:
    Python操作MySQL之SQLAlchemy
    mysql 中的视图详解。
    mysql终端下进行数据库备份与备份导入。
    python函数的特性。再后面再讲函数装饰器。
    序列解包(for x,y in zip(keys, values):)详解。
    jinja2.exceptions.TemplateAssertionError: no filter named 'zip'(这一类的问题的解决办法)
    flask
    网络基础知识
    测试用例设计要注意的问题
    使用tailf命令查看日志
  • 原文地址:https://www.cnblogs.com/AChenWeiqiangA/p/12891610.html
Copyright © 2011-2022 走看看