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 }
时间: 2024-10-13 11:43:59

51单片机实现按键查询并灯闪烁时间实验的相关文章

[51单片机学习笔记ONE]-----LED灯的多种使用方法

一.交替闪烁8个LED灯,时间间隔为1s 1 /****************************************************** 2 实验名称: 交替闪烁8个LED灯,时间间隔1s 3 实验时间: 2014年12月2日 4 ******************************************************/ 5 6 #include <reg51.h> 7 8 void delay(unsigned char a); 9 10 void m

51单片机点亮双向流水灯

#include <reg51.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char sfr P0M0 = 0x94; sfr P0M1 = 0x93; void delay(uint ms){ uint i,j; for(i = 0 ;i < ms ; i++) for (j = 0;j < 121;j++); } void display(){ uint i,j;

51单片机学习笔记【九】——红外通信实验

一.红外通信基础 1.红外线原理 红外线是波长在760nm~1mm之间的非可见光.红外通信装置由红外发射管和红外接受管组成,红外发射管是能发射出红外线的发光二极管,发射强度随着电流的增大而增大:红外接受管是一个具有红外光敏感特征的PN节的光敏二极管,只对红外线有反应,产生光电流. 2.信号调制原理 基带信号:从信号源发出没有经过调制的原始信号,特点是频率较低,信号频率从0开始,频谱较宽. 调制:就是用待传送信号去控制某个高频信号的幅度.相位.频率等参量变化的过程,即用一个信号去装载另一个信号.

51单片机学习笔记【六】——串口通信实验

一.串口通信基础 1.串行通信 串行通信将数据字节分成一位一位的形式在一条传输线上逐个传送.单片机采用串行通信.特点是:传输线少,长距离传送成本低,但数据传送控制复杂. 串行通信的传输的传输方向:单工(数据传输只能沿一个方向),办双工(传输数据和接受数据分布进行),全双工(传输和接受同步进行). 单片机采用异步通信,发送和接受设备使用各自的时钟频率,容易实现,但传输效率不高,数据格式 2.MAX232 实验通过MAX232电平转换芯片,可把计算机串口电平(-12V~+12V)转换为单片及TTL电

STM32GPIO口8种模式细致分析(类比51单片机)

关于STM32GPIO口的8种工作模式,我们先引出一些问题? STM32GPIO口如果既要输入又要输出怎么办? 1.浮空输入模式 上图红色的表示便是浮空输入的过程,外部输入时0读出的就是0,外部输入时1读出的就是1,外部没有输入IO处于阻塞读不出电平状态. 用处:感觉在信号处理方面用的比较好,比如在读取一段一段的波形,可以清晰的知道什么时候是0信号,什么时候是1信号,什么时候是没有信号的. 类比:51单片机找不到类似的输入模式   2.上拉输入 上拉输入和浮空输入的区别是,上拉电阻的开关关闭了,

[51单片机] nRF24L01 无线模块 测试 按键-灯-远程控制

哈哈,穷吊死一个,自己做的一个超简单的板还没有电源提供,只得借助我的大开发板啦.其实这2个模块是完全可以分开的,无线嘛,你懂得!进入正题,这个实验的功能就是一个发送模块(大的那个板)连接4个按键,通过按动这4个不同的按键来发送4种不同的命令,来控制接收端(小的板)点亮4个不同的灯. >_<!首先是发送模块: 1 void main() 2 { 3 uchar Tx_Buf1[]={1}; //发送的信息1 4 uchar Rx_Buf[32]; //接收到的数据暂存器,最多32字节数据 5 i

[51单片机] nRF24L01 无线模块 串口法命令 通过无线控制另一个的灯

>_<!概述: 这是在上一个的基础上通过按键发送4种不同命令来控制接收端的LED灯亮的改进版(上一个:http://www.cnblogs.com/zjutlitao/p/3840013.html),这里俺把按键发命令给去掉,然后加入一个串口通信的功能,PC通过串口给发送端发送命令,然后发送端通过无线将命令发给接收端来实现控制,这里接收端和上一个例程中的一样,只是在发送端的代码里去除了按键控制,变成了串口控制. >_<!发送端电路: >_<!接收电路图: >_&l

使用51单片机点亮我们的点阵灯

通过前面我们都知道点亮我们的不管是点阵,数码管,还是LED灯,不仅要熟悉我们的代码还要会看我们的原理图和真值表,所以我们如果真的要写代码倒是其次的,首先我们得学会看我们的原理图和真值表,但是认识那个我们可以在网上找教程的,所以啊我这里就不去重诉别人的话了.那么我们今天要讨论什么问题勒!?我们今天讲一下点阵吧,点阵说实话对于单片机来说虽然并不是最重要的,但是点阵却是我们单片机中花样最多的之一.可能说到这么有人会说了,学了单片机我们有什么用呢,那么我们可以留意一下我们身边的一些物品,比如我们常在街上

[51单片机学习笔记FIVE]----独立按键

一.8个按键控制8个LED灯 1 /******************************************************************************* 2 实验名称: 8个独立按键控制8盏LED灯(按下哪个键,那个键对应的LED亮) 3 实验时间: 2015/1/20 4 *******************************************************************************/ 5 #include