独立按键控制LED的单片机实验
实验三 独立按键控制LED实验
一、实验目的
1.熟悉实验软件和硬件,进行正确的接线;
2.8个不同的按键对应不同的8个灯,按下按键对应的灯就会亮。
二、实验软硬件
1.Keil uVision4
2.PZISP自动下载软件
3.HC6800S开发板
三、实验原理
按键实物图
按键按下就会产生一个脉冲信号,检测脉冲信号就可以知道是否有按键被按下去。
按键原理图
按键之间相互独立,不会互相影响。因此,被叫做独立按键。
8个独立按键原理图
将按键值用于控制对应等的亮灭。
发光二极管
JP165跳线帽断开,JP8连接J12,JP5连接JP11,J21接左边Vcc。
单片机与外设连接图
单片机硬件连接如上,只用改变跳线帽的位置就可以实现。
四、软件流程图
独立按键程序流程图
五、实验代码
1.#include <reg51.h>
2.#include <intrins.h>
3.
4.#define GPIO_KEY P2 //独立键盘用P2口
5.#define GPIO_LED P1 //led使用P1口
6.
7.unsigned char Key_Scan()
8.{
9. unsigned char keyValue = 0 , i;
10. if (GPIO_KEY != 0xFF)
11. {
12. Delay10ms(1);
13. if (GPIO_KEY != 0xFF)
14. {
15. keyValue = GPIO_KEY;
16. i = 0;
17. while ((i<50) && (GPIO_KEY != 0xFF))
18. {
19. Delay10ms(1);
20. i++;
21. }
22. }
23. }
24. return keyValue;
25.}
26.
27.void Delay10ms(unsigned int c)
28.{
29. unsigned char a, b;
30. for (;c>0;c--)
31. {
32. for (b=38;b>0;b--){for (a=130;a>0;a--);}
33. }
34.}
35.
36.void main(void)
37.{
38. unsigned char ledValue, keyNum;
39. ledValue = 0x01;
40. while (1)
41. {
42. keyNum = Key_Scan();
43. switch (keyNum)
44. {
45. case(0xFE) :ledValue = 0x01;break;
46. case(0xFD) :ledValue = 0x02;break;
47. case(0xFB) :ledValue = 0x04;break;
48. case(0xF7) :ledValue = 0x08;break;
49. case(0xEF) :ledValue = 0x10;break;
50. case(0xDF) :ledValue = 0x20;break;
51. case(0xBF) :ledValue = 0x40;break;
52. case(0x7F) :ledValue = 0x80;break;
53. default: break;
54. }
55. GPIO_LED = ledValue;
56. }
57.}
六、实验步骤
1.连接试验相关模块连线
硬件接线图
2.编写独立按键程序
首先,不停进行扫描按键。有按键输入之后,进行防抖操作,之后返回反应独立按键状态的数据,主程序根据返回的数据,对相应的灯进行亮灭操作。
3.下载独立按键程序
程序下载界面
4.测试程序
分别按下不同的键,不同的灯变亮。可以用按键控制灯的暗灭,反应速度较快,没有明显逻辑错误。
七、实验思考
独立按键控制led灯,其实这个实验看起来非常简单。我以小学生的水平来看的话就是把灯接上电,然后接线的中间连上开关,开关按下线通了,灯亮了。
但是,这个实验确实不是这样简单的。需要单片机作为处理器,读入键值,根据输入键值控制相应灯的亮灭。对于实验来说,这并非多此一举。因为我们可以区分不同的输入,然后做出相应的动作。这些动作是灯的点亮也可是别的,比如说控制电机的速度或者方向。这是十分有意义的,对于进一步开发有着重大的意义。