一、 实验设计思路
利用四个独立按键实现开发板上的八颗led灯以六种不同的跑马灯样式呈现出来。
二、 实验仪器
- 电脑
- 51单片机及开发板
- KeilC51以及代码烧录软件
三、 实验原理
-
独立按键工作原理
按键是一种电子开关,使用时轻轻按开关按钮就可使开关接通,当松开手时,开关断开。按键未按下去时,GPIO 口有上拉电阻,所以默认检测到的为高电平。按键按下去时,GPIO口检测到的为低电平。通过判断检测到的高低电平,即可对单片机做出相应的控制。由于机械点的弹性作用,开关在闭合和断开的瞬间会产生一系列抖动,时间不超过 10ms。抖动会使电平十分不稳定,可能会使 CPU 误读很多次。因此需要进行消抖,当按键按下后,延时10ms 再判断按键的状态。
-
Led灯工作原理
Led 即发光二极管,具有单向导电性,通过 5mA 左右电流即可发光,电流越大,其亮度越强,但若电流过大,会烧毁二极管,一般我们控制在 3 mA-20mA 之间。
发光二级管正极又称阳极,负极称为阴极。只要给二极管两端合适的正向偏压,二极管即可导通发光。板上的 8 个 led 共阳极,且阳极为高电平。Led 的阴极连接单片机的 GPIO,只需给相应的 GPIO 一个低电平,二级管即可导通发光;给相应的 GPIO 一个高电平,二级管截止灯灭。通过调用延时函数,可控制 LED 导通和截止的时间以达到多种不同的效果。
该电路是集成的,LED 控制管脚直接连接到 51 单片机的 IO 上。LED 采用共阳接法,即所有 LED 阳极管脚接电源 VCC,阴极管脚通过一个 470 欧的限流电阻接到 P2 口上。
四、 实验流程图
五、 实验代码
#include "reg52.h"
#include <intrins.h> //这个头文件中包含左移函数_crol_()和右移函数_cror_()的定义
typedef unsigned int u16; //定义无符号整型
typedef unsigned char u8; //定义无符号字符型
unsigned char k; //全局变量k
//对led灯和按键的定义
sbit led_D1 = P2^0;
sbit led_D2 = P2^1;
sbit led_D3 = P2^2;
sbit led_D4 = P2^3;
sbit K1 = P3^1; //按键1
sbit K2 = P3^0; //按键2
sbit K3 = P3^2; //按键3
sbit K4 = P3^3; //按键4
sbit beep