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 }
  • 相关阅读:
    Java实现 LeetCode 30 串联所有单词的子串
    Java实现 LeetCode 29 两数相除
    Java实现 LeetCode 29 两数相除
    Java实现 LeetCode 29 两数相除
    Java实现 LeetCode 28 实现strStr()
    Java实现 LeetCode 28 实现strStr()
    Java实现 LeetCode 28 实现strStr()
    Java实现 LeetCode 27 移除元素
    Java实现 LeetCode 27 移除元素
    字符编码终极笔记:ASCII、Unicode、UTF-8、UTF-16、UCS、BOM、Endian
  • 原文地址:https://www.cnblogs.com/hughdong/p/6848620.html
Copyright © 2011-2022 走看看