用移位运算法将AT89C51单片机P1P2端口16个灯(P1.0P1.1P1.2P1.3全部点亮熄灭)(P1.4P1.5P1.6P1.7全部点亮熄灭)(P2.0P2.1P2.2P2.3全部点亮熄灭)(P2.4P2.5P2.6P2.7全部点亮熄灭)循环
时间: 2023-09-19 07:07:49 浏览: 35
#include<reg52.h>
void delay(unsigned int i)
{
while(i--);
}
void main()
{
unsigned char a,b,c,d;
while(1)
{
for(a=0;a<16;a++)
{
P1=0xff;
P2=0xff;
b=a<<4;
c=b>>4;
d=b|c; //P1.0-P1.3控制的灯
P1=~d;
b=a>>4;
d=b|c; //P2.0-P2.3控制的灯
P2=~d;
delay(50000);
}
}
}
相关问题
用移位运算法将AT89C51单片机P1P2端口16个灯(P1.0P1.1P1.2P1.3)点亮
以下是用移位运算法将AT89C51单片机P1P2端口16个灯(P1.0P1.1P1.2P1.3)点亮的代码:
```c
#include <reg51.h>
void main()
{
unsigned char i, j;
while (1) {
for (i = 0; i < 16; i++) {
j = 1 << i;
P1 = j;
P2 = j >> 4;
// 延时
for (j = 0; j < 100; j++);
}
}
}
```
这段代码利用了移位运算符的左移和右移操作,将1按位左移i位,然后根据高低4位分别输出到P1和P2端口,实现了16个灯的循环点亮效果。同时,在每个灯点亮后都加入了一个简单的延时来控制灯的亮灭速度。
用移位运算法将AT89C51单片机P1P2端口16个灯(P1.0P1.1P1.2P1.3点亮熄灭)(P1.4P1.5P1.6P1.7点亮熄灭)(P2.0P2.1P2.2P2.3点亮熄灭)(P2.4P2.5P2.6P2.7点亮熄灭)循环
以下是用移位运算法实现的代码:
```c
#include <reg51.h>
void delay(unsigned int t)
{
unsigned int i, j;
for (i = 0; i < t; i++)
for (j = 0; j < 1000; j++);
}
void main()
{
unsigned char i, j;
while (1)
{
// 点亮P1.0-P1.3
for (i = 0; i < 16; i++)
{
P1 = ~(1 << i);
delay(500);
}
// 熄灭P1.0-P1.3
for (i = 0; i < 16; i++)
{
P1 = ~(1 << i);
delay(500);
}
// 点亮P1.4-P1.7
for (i = 4; i < 8; i++)
{
P1 = ~(1 << i);
delay(500);
}
// 熄灭P1.4-P1.7
for (i = 4; i < 8; i++)
{
P1 = ~(1 << i);
delay(500);
}
// 点亮P2.0-P2.3
for (i = 0; i < 4; i++)
{
P2 = ~(1 << i);
delay(500);
}
// 熄灭P2.0-P2.3
for (i = 0; i < 4; i++)
{
P2 = ~(1 << i);
delay(500);
}
// 点亮P2.4-P2.7
for (i = 4; i < 8; i++)
{
P2 = ~(1 << i);
delay(500);
}
// 熄灭P2.4-P2.7
for (i = 4; i < 8; i++)
{
P2 = ~(1 << i);
delay(500);
}
}
}
```
注:以上代码中的 `delay` 函数用于延时,将会在后续的内容中讲解。