项目一彩灯控制器 任务1-4转向灯控制器

本文介绍了使用单片机通过P1.0口控制4个LED和2个开关实现汽车转向灯功能。在Proteus环境下进行电路设计,详细讲解了独立按键的硬件连接和编程原理,强调了按键状态检测与switch开关的电平状态。文章还提到,该设计限制了按键数量不超过4个,并提出增加双闪功能的拓展任务。
摘要由CSDN通过智能技术生成

 P1.0口接4个led和2个开关,编程实现汽车转向灯控制功能

0e652b1406b44281beb827400c14c22c.png

6513a455d3cc444184b45e95fd3b0f9e.png

4e4a4e1aa4a2439485fef0511b75956f.png

如何给电路图输入文字呢?

1f83d854979c4ae89d73cb909c1a2fdd.png

点击右侧A,之后点击要输入的地方

9c6dce67352c4a94ac49b9adf6190eb9.png

还可以修改高度,我用的0.2in

 

 

独立按键:

硬件连接时每个按键的一端占单片机的一根接口线,另一端一般接地,当按键按下时,接口线变为低电平,(闭合0),释放时接口线悬空变为高电平。(断开1)
编程时利用位变量定义,每个按键有单独的变量名,检测时可利用if语句直接检测按键变量的电平状态,就可判断按键是按下还是释放。
优点是连线和编程简单,缺点是占用接口线太多,一般不超过4个。

 

同时我们还需要注意switch 开关断开,悬空对单片机来说就是高电平。
//在图中蓝点代表低电平,红点代表高电平(悬空),灰点未接线。

/*************************
项目名称:项目一彩灯控制器
任务名称:任务1-4转向灯控制器
任务描述:P1.0口接4个led和2个开关,编程实现汽车转向灯控制功能
*************************/

/*独立按键:硬件连接时每个按键的一端占单片机的一根接口线,另一端一般接地,
当按键按下时,接口线变为低电平,(闭合)
释放时接口线悬空变为高电平。(断开)
编程时利用位变量定义,每个按键有单独的变量名,
检测时可利用if语句直接检测按键变量的电平状态,就可判断按键是按下还是释放。
优点是连线和编程简单,缺点是占用接口线太多,一般不超过4个*/

//switch 开关断开,悬空对单片机来说就是高电平
//蓝点代表低电平,红点代表高电平(悬空),灰点未接线
#include<reg51.h>
//51单片机寄存器定义头文件
sbit k1=P1^0;//定义左转开关,闭合左转灯闪烁
sbit k2=P1^1;//定义右转开关,闭合右转灯闪烁
void delay(int i){
	int j,k;
	for(k=0;k<i;k++)
		for(j=0;j<100;j++);
}
/***********************************************/
void main()
{
	while(1)//持续判断开关,保证开关随时有效
	{
	if(k1==0 && k2==1)//左开关闭合,右开关断开,0为闭合,1为断开,接地一定为0
	{
		P1=0xf3;//左灯亮
		delay(500);
		P1=0xff;//左灯灭
		delay(500);
	}
	if(k1==1 && k2==0)//右开关闭合,左开关断开
	{
		P1=0xcf;//右灯亮
		delay(500);
		P1=0xff;//右灯灭
		delay(500);
	}
	if(k1==k2)//开关同时等于1或者0
		P1=0xff;
}
}

注意开关闭合为0,断开为1,接地一定为0。

 

 

 任务拓展:增加双闪功能

//任务拓展:增加双闪功能
#include<reg51.h>
//51单片机寄存器定义头文件
sbit k1=P1^0;//定义左转开关,闭合左转灯闪烁
sbit k2=P1^1;//定义右转开关,闭合右转灯闪烁
void delay(int i){
	int j,k;
	for(k=0;k<i;k++)
		for(j=0;j<100;j++);
}
/***********************************************/
void main()
{
	while(1)//持续判断开关,保证开关随时有效
	{
	if(k1==0 && k2==1)//左开关闭合,右开关断开,0为闭合,1为断开,接地一定为0
	{
		P1=0xf3;//左灯亮
		delay(500);
		P1=0xff;//左灯灭
		delay(500);
	}
	if(k1==1 && k2==0)//右开关闭合,左开关断开
	{
		P1=0xcf;//右灯亮
		delay(500);
		P1=0xff;//右灯灭
		delay(500);
	}
	if(k1==0 && k2==0)//开关同时等于0,双闪
	{
		P1=0x00;//四灯亮
	  delay(500);
		P1=0xff;//四灯灭
	  delay(500);
	}
	if(k1==1 && k2==1)//两个开关都断开,直行
		P1=0xff;
}
}

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

快乐的甲方

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

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

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

打赏作者

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

抵扣说明:

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

余额充值