用单片机端口连接 8 个发光二极管和两路开关量输入,编制程序实现通过开关量控制的四种花型显示,并可工 进行花型的切换。提示:注意延时。 (1) 00000001 左循环 (2) 00000001 右循环 (3) 按 00000001,00000011,00000111,……,11111111 规律递增,然后递减。 (4) 01010101 与 10101010 交替闪烁
时间: 2024-03-08 17:49:54 浏览: 50
下面是使用单片机的C语言编写的代码,可以实现上述要求:
```c
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit K1 = P3^0; //定义开关1为P3.0口
sbit K2 = P3^1; //定义开关2为P3.1口
sbit LED = P2^0; //定义发光二极管为P2.0口
uchar flag = 0; //标志位
void delay(uint xms) //延时函数
{
uint i, j;
for(i=xms; i>0; i--)
for(j=112; j>0; j--);
}
void main()
{
uchar flower[4] = {0x01, 0x80, 0x00, 0x55}; //四种花型
uchar i = 0; //循环计数器
while(1)
{
if(K1 == 0) //判断开关1是否按下
{
flag++; //标志位加1
if(flag > 3) flag = 0; //标志位超过3时重置为0
while(K1 == 0); //等待按键释放
}
if(K2 == 0) //判断开关2是否按下
{
LED = !LED; //发光二极管状态取反
while(K2 == 0); //等待按键释放
}
switch(flag)
{
case 0: //左循环
for(i=0; i<8; i++)
{
P2 = ~(1 << i); //点亮当前位
delay(500); //延时500毫秒
}
break;
case 1: //右循环
for(i=7; i>=0; i--)
{
P2 = ~(1 << i); //点亮当前位
delay(500); //延时500毫秒
}
break;
case 2: //递增递减
for(i=0; i<255; i++)
{
P2 = ~i; //显示当前值
delay(100); //延时100毫秒
}
for(i=254; i>0; i--)
{
P2 = ~i; //显示当前值
delay(100); //延时100毫秒
}
break;
case 3: //交替闪烁
for(i=0; i<10; i++)
{
LED = !LED; //交替闪烁
delay(100); //延时100毫秒
}
P2 = flower[0]; //显示01010101
delay(500); //延时500毫秒
P2 = flower[1]; //显示10101010
delay(500); //延时500毫秒
break;
}
}
}
```
在此代码中,我们使用P2口连接了8个发光二极管,使用P3.0和P3.1口连接了两个开关量输入。程序通过轮询检测开关量输入状态,根据不同的状态控制发光二极管的显示效果。其中,延时函数`delay()`用于控制花型的切换速度和发光二极管的亮灭时间。
阅读全文