项目2 汽车转向控制灯设计_第1页
项目2 汽车转向控制灯设计_第2页
项目2 汽车转向控制灯设计_第3页
项目2 汽车转向控制灯设计_第4页
项目2 汽车转向控制灯设计_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

汽车转向控制灯设计项目2任务+1.单键控制单灯设计;2.模拟汽车转向控制器设计

所谓独立式按键是指直接用I/0口线构成的单个按键电路,每个按键单独有一根I/O口线,且其工作状态不会影响其它I/O口线的工作状态。这种按键的电路配置灵活,软件结构简单,但每个按键必须占用一根I/O口线。跟我学1——独立式按键任务1单键控制单灯设计跟我学2——基本if语句

if语句有if、if-else和if-else-if三种不同的形式。基本if语句格式如下:if(表达式){语句组;}if语句执行的过程是:当表达式为真时,执行语句组,否则跳过该语句组,继续执行下面的语句。动手做1——画出硬件电路图

单片机有4个8位的I/O口P0、P1、P2、P3,任意一个I/O口都可以用来控制一个LED灯的亮灭显示(P0口要外接上拉电阻),该任务采用P1口的P1.0控制LED灯,P3.0连接按键,用按键控制一个LED灯电路如图所示。动手做2——编写单灯闪烁的程序

//程序:ex2_1.c//功能:单键控制单灯程序#include<reg51.h>sbitP1_0=P1^0;//定义P1.0引脚名称为P1_0sbitP3_0=P3^0;//定义P3.0引脚名称为P3_0voidmain() //主函数{while(1){bitled;//定义位变量led P3_0=1;//P3.0作为输入口,置1 led=P3_0;//读P3.0 if(led==1)P1_0=1;//判断按键是否按下,没有按下,灯熄灭 if(led==0)P1_0=0;//按键按下,灯点亮}}动手做3——proteus仿真

安装在汽车不同位置的信号灯是汽车驾驶员之间及驾驶员向行人传递汽车行使状况的语言工具。一般包括转向灯、刹车灯、倒车灯等,其中,汽车转向灯包括左转灯和右转灯,其显示状态如表所示。

任务要求任务2模拟汽车转向控制器设计转向灯显示状态驾驶员命令开关状态左转灯右转灯S0S1灭灭无命令00灭闪烁右转命令01闪烁灭左转命令10闪烁闪烁故障命令11跟我想分析任务左转灯右转灯驾驶员命令——发光二极管——发光二极管——按下按键1输入低电平——左转——按下按键2输入低电平——右转按键1—(P3.0)按键2—(P3.1)汽车状态或命令0(低电平)1(高电平)左转指示灯亮(P1.0)1(高电平)0(低电平)右转指示灯亮(P1.1)1(高电平)1(高电平)左右转指示灯不亮0(低电平)0(低电平)左右转指示灯闪烁动手做1——画出硬件电路图

按键S0、S1的不同状态组合,控制LED灯D1、D2的状态,则只需要检测连接按键S0、S1的P3.0和P3.1的电平高低,再给P1.0和P1.1相应的高低电平即可实现。由于不仅仅要使LED灯亮,并且还要闪烁,程序中使用了while语句,其表达式为常数1,即循环条件永远成立,不断重复执行,属于无限循环,从而实现闪烁的效果。程序中还使用了延时程序delay,用于控制闪烁的时间间隔,其时间长短可由实参进行传递。if语句一般用作单一条件或者分支数目较少的场合,如果使用if语句来编写超过3个以上的分支程序,则程序的可读性将降低。C语言提供了一种用于多分支选择的switch语句,其一般格式如下。switch(表达式){case常量表达式1:语句组1;break;case常量表达式2:语句组2;break;……case常量表达式n:语句组n;break;default:语句组n+1;}该语句的执行过程是:运行switch后面的表达式的值将会作为条件,与case后面的各个常量表达式的值相对比,如果相等时则执行后面的语句组,再执行break(间断语句)语句,(break语句也可省略),跳出switch语句。如果表达式的值与case后面常量表达式的值均不相等,则执行default后面的语句组。当要求没有符合条件时也不做任何处理,则可以不写default语句。跟我学1——基本if语句

动手做2——编写汽车模拟转向控制电路的程序

//程序:ex2_2.c//功能:模拟汽车转向控制器程序#include<reg51.h>voiddelay(unsignedchari);//延时函数申明sbitP1_0=P1^0;//定义P1.0引脚名称为P1_0sbitP1_1=P1^1;//定义P1.1引脚名称为P1_1sbitP3_0=P3^0;//定义P3.0引脚名称为P3_0sbitP3_1=P3^1;//定义P3.1引脚名称为P3_1voidmain() //主函数{

while(1)//无限循环 { P3_0=1;//P3。0作为输入口,置1P3_1=1;//P3。1作为输入口,置1

switch(P3) { case0xfc:P1_0=0,P1_1=0;break;//按键S0和S1均按下 case0xfd:P1_0=1,P1_1=0;break;//按键S1按下,S0未按下 case0xfe:P1_0=0,P1_1=1;break;//按键S0按下,S1未按下 case0xff:P1_0=1,P1_1=1;break;//按键S0和S1均未按下 } delay(200);//延时,控制闪烁时间 P1_0=1;//左转灯熄灭 P1_1=1;//右转灯熄灭 delay(200);//延时}}voiddelay(unsignedchari)//延时函数,无符号字符型变量i为形参{unsignedcharj,k;//定义无符号字符型变量j和kfor(j=0;j<i;j++)//双重for循环语句实现软件延时for(k=0;k<255;k++) ;}动手做3——proteus仿真举一反三问:如果要求程序用if-else语句来编写,怎么修改程序?答:电路依然可以采用原来电路,只要将ex2_2.c中的程序修改一个地方即可:将主程序main中的switch多分支语句修改为if-else语句即可实现同样的功能,修改的if-else语句如下:if(P3_0==0&&P3_1==0)//按键S0和S1均按下 { P1_0=1; P1_1=1; } elseif(P3_0==0&&P3_1==1)//按键SO按下,S1未按下 {P1_0=1; P1_1=0; } elseif(P3_0==1&&P3_1==0)//按键S0未按下,S1按下 { P1_0=0; P1_1=1; } elseif(P3_0==1&&P3_1==1)//按键S0和S1均未按下 { P1_0=0; P1_1=0; }

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论