基于单片机的汽车信号灯控制系统Word格式.docx

上传人:b****5 文档编号:18774955 上传时间:2023-01-01 格式:DOCX 页数:16 大小:126.42KB
下载 相关 举报
基于单片机的汽车信号灯控制系统Word格式.docx_第1页
第1页 / 共16页
基于单片机的汽车信号灯控制系统Word格式.docx_第2页
第2页 / 共16页
基于单片机的汽车信号灯控制系统Word格式.docx_第3页
第3页 / 共16页
基于单片机的汽车信号灯控制系统Word格式.docx_第4页
第4页 / 共16页
基于单片机的汽车信号灯控制系统Word格式.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

基于单片机的汽车信号灯控制系统Word格式.docx

《基于单片机的汽车信号灯控制系统Word格式.docx》由会员分享,可在线阅读,更多相关《基于单片机的汽车信号灯控制系统Word格式.docx(16页珍藏版)》请在冰豆网上搜索。

基于单片机的汽车信号灯控制系统Word格式.docx

状态名称

输入状态

输出状态

转弯灯

头灯

尾灯

喇叭

左开关

右开关

紧急开关

刹车开关

左转弯刹车开关

右转弯刹车开关

停靠开关

倒车开关

左转弯

1

01

右转弯

01

紧急开关合上

01

刹车

左转弯刹车

右转弯刹车

紧急刹车

紧急左转弯刹车

紧急右转弯刹车

停靠

01

倒车

注:

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

代码:

#include<

reg52.h>

#include<intrins.h>

#define ucharunsignedchar

#defineuintunsignedint

unsignedcharjianzhi;

uchar count=0;

ucharcount1=0;

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

ucharcount2=0;

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

sbit LF=P0^0;

  //左头灯

sbitRF=P0^1;

   //右头灯

sbitLY=P0^2;

ﻩ//左转弯灯

sbitRY=P0^3;

//右转弯灯

sbitLB=P0^4;

//左尾灯

sbitRB=P0^5;

//右尾灯

sbitBU=P0^6;

ﻩ//蜂鸣器

sbit led=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()

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列的哪一列

ﻩ{

ﻩﻩ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;

case2:

k+=4;

break;

case4:

ﻩk+=8;

break;

case8:

ﻩk+=12;

ﻩreturn(k);

}

//密码锁  

ucharCoded_lock()ﻩ

{ﻩ

 uchar m=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<

y<

16&&y!

ﻩﻩ {

ﻩﻩ  P3=~0x86;

ﻩﻩ//显示E,表示重新输入

ﻩﻩ m=0;

ﻩﻩ}ﻩﻩ

  }

ﻩx=y;

ﻩy=16;

DelayMS(100);

ﻩﻩ

for(j=0;

j<6;

j++)

 if(KeyNo[j]!

=Key[j])

  return 0;

break;

ﻩ}

return1;

//主程序

void main(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)interrupt 1

 //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;

ﻩcase 0x3b:

ﻩﻩ //紧急00111011

 {

ﻩﻩBU=0;

ﻩ//蜂鸣器不响

ﻩﻩ if(count==15)

   {ﻩ  

ﻩﻩﻩLF=!

LF;

        RF=!

   LY=!

LY;

   RY=!

RY;

       LB=!

LB;

    RB=!

RB;

     count=0;

ﻩ }

   else

  {count++;

  }break;

case 0x37:

ﻩﻩ//刹车00110111

   {

     BU=0;

ﻩ//蜂鸣器不响

ﻩﻩLB=0;

   RB=0;

ﻩﻩLF=1;

 RF=1;

     LY=1;

     RY=1;

  }break;

   

case0x36:

//左转弯刹车0011 0110

    {

BU=0;

ﻩﻩﻩ//蜂鸣器不响

ﻩRB=0;

   RF=1;

   RY=1;

   if(count==15)

     {

      LB=!

LB;

    LF=!

LF;

    LY=!

LY;

     count=0;

ﻩﻩ }

  else

   {count++;

 }break;

case 0x35:

ﻩﻩ//右转弯刹车00110101

   {

ﻩBU=0;

//蜂鸣器不响

ﻩLB=0;

ﻩ  LF=1;

    LY=1;

      if(count==15)

  {

ﻩ   RB=!

  RF=!

RF;

     RY=!

    count=0;

ﻩﻩ }

   else

   {count++;

  }break;

  

   case 0x33:

ﻩﻩﻩ//紧急刹车0011 0011

 {

ﻩ BU=0;

ﻩ//蜂鸣器不响

ﻩﻩLB=0;

    RB=0;

  if(count==15)

      {

ﻩRF=!

   LF=!

LF;

   RY=!

RY;

   LY=!

LY;

      count=0;

ﻩ}

   else

   {count++;

  }break;

    case0x32:

ﻩﻩﻩﻩ//左转紧急刹车00110010

ﻩBU=0;

ﻩﻩﻩ//蜂鸣器不响

ﻩﻩ RB=0;

  if(count==15)

ﻩﻩﻩLB=!

   RF=!

    RY=!

     LF=!

  LY=!

     count=0;

ﻩ }

    else

     {count++;

    }break;

  case0x31:

ﻩ //右转紧急刹车00110001

 BU=0;

ﻩ LB=0;

    if(count==15)

        {

ﻩﻩ RB=!

      RF=!

   RY=!

    LF=!

LF;

       LY=!

   count=0;

   }

ﻩﻩelse

   {count++;

   }break;

case0x2f:

ﻩ //停靠00101111

   BU=0;

ﻩﻩﻩﻩ//蜂鸣器不响

LY=1;

 RY=1;

ﻩﻩ if(count1==20)

    {

ﻩ  LF=!

    RF=!

RF;

     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;

 }

ﻩ}

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

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1