zoukankan      html  css  js  c++  java
  • 51单片机 | 实现按键查询并灯闪烁时间实验

    ————————————————————————————————————————————

    实现功能:

    功能模块:

    • 初始化变量
    • 主体功能(循环)
      • 按键查询
      • 对应LED状态及延时参数
      • 改变LED状态

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    思路分析:

    流程分析:

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    伪代码分析:

    • 初始化变量:

    • 按键查询

    • LED初始化

    • LED改变

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    完整流程:

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    代码实现:

      1 #include "reg52.h"
      2 typedef unsigned char uchar;
      3 typedef unsigned int uint;
      4 int KEY_Detect(void);
      5 void Delay(uint m);
      6 void main(void)
      7 {
      8     uchar ledStatus;
      9     uchar curDelay = 0;
     10     uchar maxDelay = 20;
     11     uchar keyStatus = 0xff;
     12     uchar keyData = 0;
     13     P3 = 0xff;
     14     while(1)
     15     {
     16         keyData = KEY_Detect();
     17         switch (keyData)
     18         {
     19         case 1:
     20             P1 = 0x7f;
     21             ledStatus = 0;
     22             maxDelay = 10;
     23             curDelay = 0;
     24             keyStatus = keyData;
     25             break;
     26         case 2:
     27             P1 = 0xff;
     28             keyStatus = keyData;
     29             if (maxDelay < 250)
     30                 maxDelay += 5;
     31             curDelay = maxDelay;
     32             break;
     33         case 3:
     34             P1 = 0xff;
     35             keyStatus = keyData;
     36             if (maxDelay > 5)
     37                 maxDelay -= 5;
     38             curDelay = maxDelay;
     39             break;
     40         default:
     41             Delay(2000);
     42             break;
     43         }
     44         if(curDelay == maxDelay)
     45         {
     46             switch(keyStatus)
     47             {
     48             case 1:
     49                 P1 >>= 1;
     50                 ledStatus++;
     51                 if (ledStatus == 8)
     52                 {
     53                     ledStatus = 0;
     54                     P1 = 0x7f;
     55                 }
     56                 break;
     57             case 2:
     58             case 3:
     59                 P1 = ~P1;
     60                 break;
     61             default:
     62                 break;
     63             }
     64             curDelay = 0;
     65         }
     66         curDelay ++;
     67     }
     68 }
     69 void Delay(unsigned int m)
     70 {
     71     while(m--);
     72 }
     73 int KEY_Detect(void)
     74 {
     75     uchar ucTemp = P3;
     76     uchar key = 0xff;
     77     if (ucTemp != 0xff)
     78     {
     79         Delay(2000);
     80         ucTemp = P3;
     81         if(ucTemp != 0xff)
     82         {
     83             switch(ucTemp)
     84             {
     85             case 0xFE:
     86                 key = 1;
     87                 break;
     88             case 0xFD:
     89                 key = 2;
     90                 break;
     91             case 0xFB:
     92                 key = 3;
     93                 break;
     94             case 0xF7:
     95                 key = 4;
     96                 break;
     97             case 0xEF:
     98                 key = 5;
     99                 break;
    100             case 0xDF:
    101                 key = 6;
    102                 break;
    103             case 0xBF:
    104                 key = 7;
    105                 break;
    106             case 0x7F:
    107                 key = 8;
    108                 break;
    109             default:
    110                 break;
    111             }
    112         }
    113     }
    114     while(ucTemp != 0xff)
    115         ucTemp = P3;
    116     return key;
    117 }
  • 相关阅读:
    Android 中Service生命周期
    Android开发中退出程序几种方法
    FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_REORDER_TO_FRONT用法
    【Java并发编程实战】-----synchronized
    The specified child already has a parent错误
    使用Ant打包工具 基本介绍
    what's WSDL
    XFire WebService demo
    jws webservice code
    axis、xfire、CXF 、JWS
  • 原文地址:https://www.cnblogs.com/hughdong/p/6848620.html
Copyright © 2011-2022 走看看