P1.0口接4个led和2个开关,编程实现汽车转向灯控制功能
如何给电路图输入文字呢?
点击右侧A,之后点击要输入的地方
还可以修改高度,我用的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;
}
}