基于单片机的汽车信号灯控制系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于单片机的汽车信号灯控制系统

————————————————————————————————作者: ————————————————————————————————日期:

中南大学课程设计

(附代码)

20)设计一个基于单片机的汽车信号灯控制系统

设计要求:分析系统需求,设计出电路原理图,说明工作原理,编写程序及程序流程图。

设计一个基于单片机的汽车信号灯控制系统。汽车驾驶执行的操作由相应的开关状态反映,所需控制的信号灯有仪表盘左/右转弯灯、左右头灯和左右尾灯共六类灯,还有蜂鸣器喇叭控制的信号。

设计功能:

驾驶操作与灯光信号对应关系如下:

(1)左/右转弯(合上左/右开关):仪表盘左/右转弯灯、左/右头灯、左/右尾灯闪烁。

(2) 紧急开关合上:所有灯闪烁。

(3)刹车(合上刹车开关):左右尾灯亮。

(4) 左/右转弯刹车:仪表盘左/右转弯灯、左/右头灯、左/右尾灯闪烁,右/左尾灯亮。

(5) 刹车、合上紧急开关:尾灯亮、仪表板灯、头灯闪烁。

(6) 左/右转弯刹车,并合上紧急开关:右/左尾灯亮,其余灯闪烁。

(7)停靠(合上停靠开关):头灯、尾灯以1Hz的频率闪烁。

(8)倒车:尾灯长亮、蜂鸣器以0.5Hz的频率报警。

设计要求:设计出电路原理图,说明工作原理,编写程序及程序流程图。

仿真操作及现象:

1)合上左转弯开关:仪表板左转弯灯、左头灯、左尾灯闪烁。

2)合上右转弯开关:仪表板右转弯灯、右头灯、右尾灯闪烁。

3)合上紧急开关:所有灯闪烁

4)合上刹车开关:左右尾灯亮

5)合上左开关和刹车开关:仪表板左转弯灯、左头灯、左尾灯闪烁,右尾灯亮。

6)合上右开关和刹车开关:仪表板右转弯灯、右头灯、右尾灯闪烁,左尾灯亮。

7)合上刹车开关、紧急开关(紧急刹车):左右尾灯亮、左右仪表板灯、头灯闪

烁。

8)合上左开关和刹车开关、紧急开关(紧急左转弯刹车):右尾灯亮,其余灯闪

烁。

9)合上右开关和刹车开关、紧急开关(紧急右转弯刹车):左尾灯亮,其余灯闪

烁。

10)合上停靠开关:左右头灯、尾灯以1Hz的频率闪烁

1)合上倒车开关:左右尾灯,蜂鸣器以0.5Hz的频率报警。

状态名称

输入状态输出状态

转弯

头灯尾灯

叭左

左右左右左右

左转弯1 1 0 0

1

0 0

0 01 0 01 0

紧急开1 0

1

01 01 0

0 1 1 0

01 0 01 10

0 01 1 01 0

紧急刹车1 0

1 1 0

紧急左1 01 0

1

1

1 0

弯刹车

紧急右转弯刹车1 01 0

1

1 0

1

停靠1 0

01 0

0 1 1 1 注:01表示闪烁,1表示亮/鸣喇叭,0表示不亮也不闪烁/不鸣喇叭

代码:

#include

#include<intrins.h>

#defineuchar unsignedchar

#define uintunsignedint

unsigned char jianzhi;

ucharcount=0;

uchar count1=0;ﻩ//记录中断次数,count2=20才产生1HZ的时钟脉冲

uchar count2=0; //记录中断次数,count2=40才产生0.5HZ的时钟脉冲

sbitLF=P0^0; //左头灯

sbit RF=P0^1; //右头灯

sbit LY=P0^2;ﻩ//左转弯灯

sbit RY=P0^3; //右转弯灯

sbit LB=P0^4; //左尾灯

sbitRB=P0^5; //右尾灯

sbit BU=P0^6;ﻩ//蜂鸣器

sbitled=P0^7;

sbitzong_switch=P1^6;

uchar code Key[]={1,2,3,4,5,6};

uchar k=16;

ucharcodeDSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,

0x88,0x83,0xc6,0xa1,0x86,0x8e,0x00};

//延时

voidDelayMS(uint x)

{

ﻩuchar i;

ﻩwhile(x--)

{for(i=0;i<120;i++);

}

}ﻩ

//矩阵键盘扫描

ucharKeys_Scan()

{

uchar Tmp;

ﻩP2=0x0f; //高4位置0,放入4行

DelayMS(1);

Tmp=P2^0x0f;//按键后0f变成0000XXXX,X中一个为0,3个仍为1,通过异或把3个1变为0,唯一的0变为1

ﻩswitch(Tmp)ﻩ//判断按键发生于0~3列的哪一列

ﻩ{

ﻩﻩcase 1: k=0;break;

ﻩcase 2: k=1;break;

ﻩcase4:k=2;break;

ﻩcase 8: k=3;break;

ﻩdefault:k=16;ﻩ//无键按下ﻩ

}

ﻩP2=0xf0;//低4位置0,放入4列

DelayMS(1);

Tmp=P2>>4^0x0f;//按键后f0变成XXXX0000,X中有1个为0,三个仍为1;高4位转移到低4位并异或得到改变的值

switch(Tmp) //对0~3行分别附加起始值0,4,8,12

ﻩ{

ﻩcase 1:ﻩk+=0;break;

case 2:k+=4;break;

case4:ﻩk+=8;break;

case 8:ﻩk+=12;

}

ﻩreturn(k);

}

相关文档
最新文档