本次实验原理相对简单,主要就是通过编程读取P1.0和P1.1引脚的电平状态,然后通过多分支语句判断,再决定4个发光二极管的状态,开关状态与发光二极管状态之间关系如表4.2.1所示。
表4.2.1 开关状态与发光二极管状态之间关系
|
K2(P1.1) |
K1(P1.0) |
发光二极管状态 |
|
0 |
0 |
全灭 |
|
0 |
1 |
右转弯灯闪烁(L7、L10) |
|
1 |
0 |
左转弯灯闪烁(L1、L4) |
|
1 |
1 |
全灭 |
C51中多分支语句主要采用if-else-if语句,而另外还要注意P1口是准双向口,在输入数据之前要先写“1”。
程序如下:
#include <reg51.h> //包含头文件reg51.h,定义单片机特殊功能寄存器和特殊标志位
#define uchar unsigned char //宏定义无符号字符型
#define uint unsigned int //宏定义无符号整型
sbit K1=P1^0; //定义特殊标志位,K1接P10
sbit K2=P1^1; //定义特殊标志位,K2接P11
sbit L1=P1^4; //定义特殊标志位,L1接P14
sbit L4=P1^5; //定义特殊标志位,L4接P15
sbit L7=P1^6; //定义特殊标志位,L7接P16
sbit L10=P1^7; //定义特殊标志位,L10接P17
bit flag; //flag是状态标志位,控制发光二极管闪烁
void delay(); //软件延时函数delay声明
void main (void)
{
P1 = 0xff; //P1为准双向口,输入之前先写“1”
while(1) //无限循环
{
if((K1==0)&&(K2==1)) //K2=1且K1=0时,左转弯灯闪烁
{
if(flag==0) //flag为0时,左转弯灯亮
{
L1=0;
L4=0;
delay();
flag=1; //切换flag状态
}
else //flag为1时,左转弯灯灭
{
P1=0xff;
delay();
flag=0; //切换flag状态
}
}
else if((K1==1)&&(K2==0)) //K2=0且K1=1时,右转弯灯闪烁
{
if(flag==0) //flag为0时,右转弯灯亮
{
L7=0;
L10=0;
delay();
flag=1; //切换flag状态
}
else //flag为1时,右转弯灯灭
{
P1=0xff;
delay();
flag=0; //切换flag状态
}
}
else //K2、K1同为0或1时,灯全灭
{
P1=0xff;
}
}
}
void delay()//软件延时函数delay
{
uint dly;
for(dly=0;dly<10000;dly++);
}
这篇博客介绍了使用C51编程在Proteus环境中进行转弯灯实验的原理和步骤。实验核心是通过读取P1.0和P1.1引脚电平,利用if-else-if语句判断并控制4个LED的状态。在操作过程中,强调了P1口作为准双向口在输入前需先置为"1"的重要性。
1087

被折叠的 条评论
为什么被折叠?



