基于单片机.汽车信号灯控制系统方案.doc
- 文档编号:567613
- 上传时间:2023-04-29
- 格式:DOC
- 页数:12
- 大小:136.45KB
基于单片机.汽车信号灯控制系统方案.doc
《基于单片机.汽车信号灯控制系统方案.doc》由会员分享,可在线阅读,更多相关《基于单片机.汽车信号灯控制系统方案.doc(12页珍藏版)》请在冰点文库上搜索。
word完美格式
中南大学课程设计
(附代码)
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
0
0
0
0
0
0
0
01
0
01
0
01
0
0
右转弯
0
1
0
0
0
0
0
0
0
01
0
01
0
01
0
紧急开关合上
0
0
1
0
0
0
0
0
01
01
01
01
01
01
0
刹车
0
0
0
1
0
0
0
0
0
0
0
0
1
1
0
左转弯刹车
0
0
0
0
1
0
0
0
01
0
01
0
01
1
0
右转弯刹车
0
0
0
0
0
1
0
0
0
01
0
01
1
01
0
紧急刹车
0
0
1
1
0
0
0
0
01
01
01
01
1
1
0
紧急左转弯刹车
0
0
1
0
1
0
0
0
01
01
01
01
01
1
0
紧急右转弯刹车
0
0
1
0
0
1
0
0
01
01
01
01
1
01
0
停靠
0
0
0
0
0
0
1
0
0
0
01
01
01
01
0
倒车
0
0
0
0
0
0
0
1
0
0
0
0
1
1
1
注:
01表示闪烁,1表示亮/鸣喇叭,0表示不亮也不闪烁/不鸣喇叭
代码:
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
unsignedcharjianzhi;
ucharcount=0;
ucharcount1=0; //记录中断次数,count2=20才产生1HZ的时钟脉冲
ucharcount2=0; //记录中断次数,count2=40才产生0.5HZ的时钟脉冲
sbitLF=P0^0; //左头灯
sbitRF=P0^1; //右头灯
sbitLY=P0^2; //左转弯灯
sbitRY=P0^3;//右转弯灯
sbitLB=P0^4; //左尾灯
sbitRB=P0^5; //右尾灯
sbitBU=P0^6; //蜂鸣器
sbitled=P0^7;
sbitzong_switch=P1^6;
ucharcodeKey[]={1,2,3,4,5,6};
uchark=16;
ucharcodeDSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
0x88,0x83,0xc6,0xa1,0x86,0x8e,0x00};
//延时
voidDelayMS(uintx)
{
uchari;
while(x--)
{for(i=0;i<120;i++);
}
}
//矩阵键盘扫描
ucharKeys_Scan()
{
ucharTmp;
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列的哪一列
{
case1:
k=0;break;
case2:
k=1;break;
case4:
k=2;break;
case8:
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
{
case1:
k+=0;break;
case2:
k+=4;break;
case4:
k+=8;break;
case8:
k+=12;
}
return(k);
}
//密码锁
ucharCoded_lock()
{
ucharm=0,j,x=16,y=16;
ucharKeyNo[]={16,16,16,16,16,16}; //按键序号,16表示无按键
P2=0xf0; //高4位置0,放入4行
//led=1;
while(m<6)
{
P2=0xf0;
if(P2!
=0xf0)
{
y=Keys_Scan(); //扫描键盘获取输入的密码
//P3=~DSY_CODE[y];
if(y<=9&&y!
=x)
{
KeyNo[m]=y;
P3=~DSY_CODE[y];
m++;
}
elseif(9 =x) { P3=~0x86; //显示E,表示重新输入 m=0; } } x=y; y=16; DelayMS(100); } for(j=0;j<6;j++) { if(KeyNo[j]! =Key[j]) { return0; break; } } return1; } //主程序 voidmain(void) { uchari=3,sign=1,flag=0,choose=16; TMOD=0x01; TH0=(65536-50000)/256; //定时器0,方式l TL0=(65536-50000)%256; //置初值,产生50ms定时 IE=0x82; //允许T0中断 TR0=0; //关中断 P0=0x3f; P1=0xff; P2=0xf0; P3=0x00; for(;zong_switch! =0;) //循环直到总开关按下 { DelayMS(50); P3=~0x00; } P3=~0x86; while(zong_switch==0)//总开关按下 { DelayMS(50); while (1) { flag=Coded_lock(); DelayMS(50); choose=16; while((choose! =10)&&(choose! =11)) //循环,直到按下确定或者取消 { P3=~0xa1; //按确认或者取消 P2=0xf0; if(P2! =0xf0) choose=Keys_Scan(); DelayMS(100); } P3=~DSY_CODE[choose]; DelayMS(50); if(flag==1) //密码正确 { if(choose==10) //确定 { break; } else P3=~0x86; } elseif(i==1) //三次密码错误,所有灯高频闪烁,并且蜂鸣器报警 { while (1) { P0=0xff; DelayMS(20); P0=0x00; DelayMS(20); } } elseif(choose==10) //密码错误,且按下确认键 { P3=~0x8e; //显示F表示密码错误 DelayMS(100); i--; //可输入密码次数减一 } else P3=~0x86; } break; } P3=0x00; TR0=1; while (1); } voidtime0(void)interrupt1 { //TH0=(65536-50000)/256; //TL0=(65536-50000)%256; P1=0xff; //Pl先送Oxff,Pl中保存是按键的值 jianzhi=P1; //暂存键值到jianzhi jianzhi=jianzhi&0x7f; //因为最高位不用,去掉 switch(jianzhi) { case0x3e: //左转弯00111110 { BU=0; //蜂鸣器不响 RF=1; RB=1; RY=1; if(count==15) { LF=! LF; LB=! LB; LY=! LY; count=0; } else {count++;} }break; case0x3d: //右转弯00111101 { BU=0; //蜂鸣器不响 LF=1; LB=1; LY=1; if(count==15) { RF=! RF; RB=! RB; RY=! RY; count=0; } else {count++;} }break; case0x3b: //紧急00111011 { BU=0; //蜂鸣器不响 if(count==15) { LF=! LF; RF=! RF; LY=! LY; RY=! RY; LB=! LB; RB=! RB; count=0; } else {count++;} }break; case0x37: //刹车00110111 { BU=0; //蜂鸣器不响 LB=0; RB=0; LF=1; RF=1; LY=1; RY=1; }break; case0x36: //左转弯刹车00110110 { BU=0; //蜂鸣器不响 RB=0; RF=1; RY=1; if(count==15) { LB=! LB; LF=! LF; LY=! LY; count=0; } else {count++;} }break; case0x35: //右转弯刹车00110101 { BU=0; //蜂鸣器不响 LB=0; LF=1; LY=1; if(count==15) { RB=! RB; RF=! RF; RY=! RY; count=0; } else {count++;} }break; case0x33: //紧急刹车00110011 { BU=0; //蜂鸣器不响 LB=0; RB=0; if(count==15) { RF=! RF; LF=! LF; RY=! RY; LY=! LY; count=0; } else {count++;} }break; case0x32: //左转紧急刹车00110010 { BU=0; //蜂鸣器不响 RB=0; if(count==15) { LB=! LB; RF=! RF; RY=! RY; LF=! LF; LY=! LY; count=0; } else {count++;} }break; case0x31: //右转紧急刹车00110001 { BU=0; //蜂鸣器不响 LB=0; if(count==15) { RB=! RB; RF=! RF; RY=! RY; LF=! LF; LY=! LY; count=0; } else {count++;} }break; case0x2f: //停靠00101111 { BU=0; //蜂鸣器不响 LY=1; RY=1; if(count1==20) { LF=! LF; RF=! RF; LB=! LB; RB=! RB; count1=0; } else {count1++;} }break; case0x1f: //倒车00011111 { LB=0; RB=0; LF=1; RF=1; LY=1; RY=1; if(count2==40) { BU=! BU; count2=0; } else {count2++;} }break; default: P0=0x3f;break; } } 精心整理学习帮手
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 汽车 信号灯 控制系统 方案