仿真电路
- 元件:
| 英文名 | 中文名 | 属性 |
|---|---|---|
| LED-GREN | 绿色LED | - |
| RX8 | 8位电阻排 | 元件值设置为1k |
| BUTTON | 按键 | - |
| RES | 电阻 | 元件值设置为10K |
-
电路图:

-
仿真图:

按键1 上移点亮的LED
按键2 下移点亮的LED
程序设计
main.c:#include <AT89X51.H> #define uchar unsigned char #define uint unsigned int //延时函数 t为毫秒(不准) void delay(uint t) { uint i; while (t--) { for (i = 120; i; i--) ; } } //主程入口 void main() { char n = 0; //用来标记哪一个LED亮 P2 = 0xff; //让P2所有引脚输出高电平 for (;;) //死循环,和while(1)等价 { if (P2 & 0x03) //判断P2的1,2脚是不是高电平 { delay(10); //延时消除抖动 if (!(P2 & 0x01)) //P2.0相连的按键被按下 { if (--n < 0) { n = 7; } } if (!(P2 & 0x02)) //P2.1相连的按键被按下 { if (++n > 7) { n = 0; } } } P1 = ~(1 << n); //控制P1输出 delay(400); //粗略延时 } }
注解
-
两个按键一端连接到电源和P2,另一端接地
当按键松开时,P2某一脚与电源相连,为高电平
当按键按下时,P2某一脚接地,为低电平 -
"按键消抖"
按键按下的时候会有一段时间电位不稳定
一般要等10ms左右再判断一次