_单片机汽车灯光控制器
____ 专业 _单片机原理与应用系统设计实验报告
实验者学号班级组别
同组者___________________ 实验评阅教师签名__________________ 实验编号________ 实验名称 ____单片机汽车灯光控制器
一、实验目的
1、进一步熟悉单片机I/O口的使用。
2、了解一个简单具体的单片机应用系统的软硬件设计。
二、实验相关知识
汽车灯光作为汽车的专用语言,直接反应了汽车的行驶方向,驾驶人的动机和意图。因此,为保证行车安全,必须保证车灯的齐全有效和正确使用。
汽车灯光种类非常多,包括:前照灯(包括远光、近光)、前位灯、后位灯、牌照灯、仪表灯、转向灯、制动灯、危险报警灯、倒车灯、前雾灯等。驾驶员通过按钮或开关对这些灯光进行控制。实际上这些按钮或开关都是接在汽车的控制器的输入端,当控制器的输入端输入端检测到按钮或开关有变化时,就输出信号继电器,打开相应的汽车灯光。
80C51系列单片机有4个8位的双向I/O口(P0-P3),完全可以胜任汽车灯光控制器。
三、实验内容
1、打开ISIS 7 Professional,参照“二;实验电路”设计仿真电路原理图。
2、编写程序实现:
(1)分别实现控制左转向灯、右转向灯、倒车灯和故障灯。
(2)在打开倒车灯的同时,可以实现控制左转向灯、右转向灯。
(3)在打开倒车灯和故障灯的同时,实现控制左转向灯、右转向灯。
要求(1)、(2)、(3)倒车灯打开后常亮,其他灯按一定时间间隔闪烁。
四、实验连线
L1-L4连接P1.0-P1.3, P3.0-L, P3.1-R, P3.2-D , P3.3-U, GND-GND
+5V连接+5V
五、程序
//硬件L1-L4分别接P10-P13,P30接L,P31接R,P32接D,P33接U,+5v接+5v,GND接GND。
#include //片内寄存器定义
#include //输入/输出函数库
#include //内部函数库
/****************LED Demo****************
描述:用单片机I/O口实现汽车灯光控制器
功能:分别实现控制左转向灯、右转向灯、倒车灯和故障灯
作者
日期:2013年5月25日
版次:Keil uVision4
**************** End ****************/
sbit leftSwitch=P3^0;//左转向灯开关
sbit rightSwitch=P3^1;//右转向灯开关
sbit backSwitch=P3^2;//倒车灯开关
sbit errSwitch=P3^3;//故障灯开关
sbit leftLed=P1^0;//左转向灯
sbit rightLed=P1^1;//右转向灯
sbit backLed=P1^2;//倒车灯
sbit errLed=P1^3;//故障灯
#define TURN_ON_leftLed leftLed=0
#define TURN_OFF_leftLed leftLed=1
#define TURN_ON_rightLed rightLed=0
#define TURN_OFF_rightLed rightLed=1
#define TURN_ON_backLed backLed=0
#define TURN_OFF_backLed backLed=1
#define TURN_ON_errLed errLed=0
#define TURN_OFF_errLed errLed=1
void time(unsigned int ucMs);//延时单位:ms
void main (void)
{
汽车前灯while(1){
while (!leftSwitch){//打开左转向灯
TURN_ON_leftLed;time(200);
TURN_OFF_leftLed;time(200);
}
while (!rightSwitch){//打开右转向灯 TURN_ON_rightLed;time(200);
TURN_OFF_rightLed;time(200);
}
while (!backSwitch){//打开倒车灯
TURN_ON_backLed;time(200);
TURN_OFF_backLed;time(200);
}
while (!errSwitch){//打开故障灯
TURN_ON_errLed;time(200);
TURN_OFF_errLed;time(200);
}
}
}
/********************************
描述:延时5us,晶振改变时只用改变这一个函数!
1,对于11.0592M晶振而言,需要2个_nop_();
2,对于22.1184M晶振而言,需要4个_nop_();
功能:延时5us
入口参数:无
返回值:无
********************************/
void delay_5us(void) //延时5us,晶振改变时只用改变这个函数!{
_nop_();
_nop_();
_nop_();
_nop_();
}
//***************************delay_50us********************/ void delay_50us(void) //延时50us
{
unsigned char i;
for(i=0;i<4;i++)
{
delay_5us();
}
}
//*******************延时100us**************/
void delay_100us(void)
{
delay_50us();
delay_50us();
}
/****************延时函数***************
描述:分别实现控制器的左转向灯、右转向灯、倒车灯和故障灯。
功能:延时5us
入口参数:无
返回值:无
**************** End ***************/
void time(unsigned int ucMs) //延时单位:ms
{
unsigned char j;
while(ucMs>0){
for(j=0;j<10;j++) delay_100us();
ucMs--;
}
}
六、实验小结
在做实验之前,我首先对课本上的实验做了一点的了解,感觉这次的实验还是比较好做的。但是自己还是没先操作一下,在课上做实验时遇到了几个难题。看程序了不会改动实物,看程序的时候老感觉是这样的,可是自己不敢去该,生怕出错。后来,在同学的帮助和讨论下,
我们一起研究,然后,我们自己看程序把实物电路给连好了。在操作运行的时候很顺利。一会就好了。这次试验,我懂得了,不能只看,要亲自动手去改,然后我觉得自己的动手能力有点不好,希望在以后的学习中,能够加强自己的动手能力。这次的实验,转向灯,感觉蛮好的,至少让自己懂得汽车灯的设计是什么样子的。让我对汽车灯有了更深层次的了解。希望自己能够好好努力,加强自己的动手能力。