2、拔河游戏 P2口接一组8个LED小灯,P3.1、P3.0接两个按键。编写程序: (1)开始时中间2个小灯点亮不动; (2)第1个按键按下,小灯向左移1位,第2个按键按下,小灯向右移1位,用小灯模拟拔河效果;
时间: 2024-02-25 07:52:09 浏览: 184
以下是基于8051单片机的C语言代码实现拔河游戏:
```
#include<reg51.h>
sbit LED = P2^0; // LED灯连接的引脚
sbit left_button = P3^0; // 左侧按键连接的引脚
sbit right_button = P3^1; // 右侧按键连接的引脚
void delay(unsigned int count) // 延时函数
{
unsigned int i,j;
for(i=0; i<count; i++)
for(j=0; j<120; j++);
}
void main()
{
unsigned char light = 0b00110000; // 初始状态,中间2个灯亮
while(1)
{
if(left_button == 0) // 按下左侧按键
{
delay(10); // 延时去抖动
if(left_button == 0) // 确认按键按下
{
light <<= 1; // 灯左移1位
if(light == 0b00000001) // 到达最左侧,回到最右侧
light = 0b10000000;
}
}
if(right_button == 0) // 按下右侧按键
{
delay(10); // 延时去抖动
if(right_button == 0) // 确认按键按下
{
light >>= 1; // 灯右移1位
if(light == 0b10000000) // 到达最右侧,回到最左侧
light = 0b00000001;
}
}
LED = light; // 控制灯的亮灭
}
}
```
在程序中,我们使用了一个变量`light`来表示灯的状态,初始值为`0b00110000`,即中间2个灯亮。然后在程序的主循环中不断检测按键的状态,如果左侧按键按下,则将灯左移1位,如果右侧按键按下,则将灯右移1位,移动到最左侧或最右侧时,需要回到对面继续移动。最后,将`light`的值赋给LED引脚,控制灯的亮灭即可。
阅读全文