Proteus仿真之转弯灯实验

C51 Proteus 转弯灯实验与多分支语句
这篇博客介绍了使用C51编程在Proteus环境中进行转弯灯实验的原理和步骤。实验核心是通过读取P1.0和P1.1引脚电平,利用if-else-if语句判断并控制4个LED的状态。在操作过程中,强调了P1口作为准双向口在输入前需先置为"1"的重要性。

本次实验原理相对简单,主要就是通过编程读取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++);
}

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术小咖龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值