基于单片机.汽车信号灯控制系统方案.doc

上传人:聆听****声音 文档编号:567613 上传时间:2023-04-29 格式:DOC 页数:12 大小:136.45KB
下载 相关 举报
基于单片机.汽车信号灯控制系统方案.doc_第1页
第1页 / 共12页
基于单片机.汽车信号灯控制系统方案.doc_第2页
第2页 / 共12页
基于单片机.汽车信号灯控制系统方案.doc_第3页
第3页 / 共12页
基于单片机.汽车信号灯控制系统方案.doc_第4页
第4页 / 共12页
基于单片机.汽车信号灯控制系统方案.doc_第5页
第5页 / 共12页
基于单片机.汽车信号灯控制系统方案.doc_第6页
第6页 / 共12页
基于单片机.汽车信号灯控制系统方案.doc_第7页
第7页 / 共12页
基于单片机.汽车信号灯控制系统方案.doc_第8页
第8页 / 共12页
基于单片机.汽车信号灯控制系统方案.doc_第9页
第9页 / 共12页
基于单片机.汽车信号灯控制系统方案.doc_第10页
第10页 / 共12页
基于单片机.汽车信号灯控制系统方案.doc_第11页
第11页 / 共12页
基于单片机.汽车信号灯控制系统方案.doc_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于单片机.汽车信号灯控制系统方案.doc

《基于单片机.汽车信号灯控制系统方案.doc》由会员分享,可在线阅读,更多相关《基于单片机.汽车信号灯控制系统方案.doc(12页珍藏版)》请在冰点文库上搜索。

基于单片机.汽车信号灯控制系统方案.doc

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;

}

}

精心整理学习帮手

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2