基于MCS-51单片机交通灯设计x

来源:四六级 发布时间:2020-09-07 点击:

 基于 MCS-51 单片机的交通灯设计

 设计一个基于单片机的交通灯信号控制器。已知东、西、南、北四个方向各有红黄绿色三个灯,在东西方向有两个数码管, 在南北方向也有两个数码管。

 要求交通灯按照表 1 进行显示和定时切换,并要求在数码管上分别倒计时显示东西、南北方向各状态的剩余时间。

 表 1 交通灯的状态切换表

 文档下载:http://wenku.baidu.com/view/90f849876529647d26285204?fr=prin 警告:不同单片机的动态扫描显示不一样,即下面黄底红字是让数码管显示函数,如果单片机不一样,只需改显示

 函数即可,其他的不要动。

 2: 程序设计(仅供参考的 C 语言源程序)

 #include<reg52.h>

  // 包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

 #include<math.h>

  #define uchar unsigned char

 #define uint

 unsigned int

 #define ulang unsigned lang

 static unsigned char count;

 code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

  // 共阴数码管

 0-9

 uchar smg[8];

  // 定义缓冲区

 uint

 we,ns,h,j;

  //ns 代表南北, we 代表东西

 int aaa();

  // 东西红灯亮,南北绿灯,黄灯亮

 int bbb();

  // 南北红灯亮,东西绿灯,黄灯亮

 int eee();

  // 第一次完成显示,继续第二次初始化

 void delay(unsigned int cnt)

 {

  while(--cnt);

 }

 void display( )

 {

  // 取每一位的数字

 smg[0]=tab[we/10];

  smg[1]=tab[we%10];

 smg[2]=0x00;

 smg[3]=0x00;

 smg[4]=0x00;

  smg[5]=0x00;

 smg[6]=tab[ns/10];

  smg[7]=tab[ns%10];

 }

 void main()

 {

  uchar i;

  TMOD |=0x01;

 // 定时器 0 10ms in 12M crystal 用于计时

 TH0=0xd8;

  // 初值

 TL0=0xf0;

 ET0=1;

 TR0=1;

  EA =1;

 display();

 while(1)

 {

  for(i=0;i<8;i++)

 // 显示函数,因单片机而异

  {

 P0=smg[i];

  P2=i;

  delay(100);

  }

  ccc();

  // 进入交通灯控制程序

 display( );

 // 扫描数码管

  }

  }

 void timer() interrupt 1

  // 中断函数

 {

  TH0=0xd8;

 // 重新赋值

  TL0=0xf0;

  count++;

 }

 int aaa()

 {

 if(j<25)

  // 东西红灯计数 30 秒,南北 25 秒绿灯亮

 {

 if(j==1) { we=30,ns=25; }

  ns--;

 we--;

 P1=0xde;

  return 0; }

 if(25<=j<30)

 // 南北黄灯 5 秒

 {

 if(j==26)

 {

 ns=5; }

  P1=0xee;

 ns--;

 we--;

 return 0;

 }

 }

 int bbb()

 {

 if(h<25)

 {

 // 南北红灯 30 秒,东西绿灯 25 秒

 if(h==1) { we=25,ns=30; }

  ns--;

 we--;

  P1=0xf3;

  return 0; }

 if(25<=h<30)

  // 东西黄灯 5 秒

 {

 if(h==26)

 {

 we=5; }

  P1=0xf5;

 ns--;

 we--;

 return 0;

 }

  }

  int eee()

 // 一次周期交通灯显示完后,重新赋值,等待第二次

  {

 j=0;

  h=0;

  return 0;

  }

  int ccc()

 // 交通灯控制函数

  {

 if (count==100)

  // 定时一秒

 {

 count=0;

 j++;

 // 算法函数

  if ( (j>30)&&(j!=61))

 { h++;

 bbb();

 return 0;

  }

 if(j==61)

  { eee(); return 0;}

  aaa();

 return 0;

  }

  }

推荐访问:交通灯 单片机 设计
上一篇:发电部输煤专业卫生清扫规定
下一篇:人事工作手册

Copyright @ 2013 - 2018 优秀啊教育网 All Rights Reserved

优秀啊教育网 版权所有