交通灯控制系统程式

原创 2005年02月26日 21:11:00

前一段时间做的一个课程设计,使用SST 89c54 MSC做中心控制器,本来要求使用asm来写程序,写了一半我觉得开发效率太低,还是c来的快,于是重新写了一下,现在无聊帖出来玩玩。IDE用的Keil。

#include <SST/SST89x5x4.h>

sbit NS_RED=P0^0;
sbit NS_YELLOW=P0^1;
sbit NS_GREEN=P0^2;
sbit EW_RED=P0^3;
sbit EW_YELLOW=P0^4;
sbit EW_GREEN=P0^5;

#define RED 0
#define YELLOW 1
#define GREEN 2

//KEY is controlled by the pedestrians
sbit  KEY=P2^0;
// NS_COLOR:
// 0 - RED / 1 - YELLOW / 2 - GREEN

// LED_POS: 0,1,2,3 - NS_H,NS_L,EW_H,EW_L
unsigned char NS_COLOR, EW_COLOR, NS_TIME, EW_TIME, LED_POS,debounce,counter;

//Var for numeric display LED(LED_POS)
#define NS_H 2
#define NS_L 4
#define EW_H 8
#define EW_L 1

bit pressed;

/*******************************
 * Key Pressed
 *******************************/

void keyPressed() {
 if ((NS_COLOR == RED) && (NS_TIME > 5)) { //the pedestrian wanna cross the NS way
  pressed = 1;
  NS_TIME = 5;
  EW_COLOR = YELLOW;
  EW_TIME = 5;
 }
}

/*****************************
 * Update per second
 *****************************/

void secondUp() {
 // make sure time is never negative
 NS_TIME--;
 EW_TIME--;

 if (NS_TIME == 0) {
  switch (NS_COLOR) {
   case RED://when NS is RED,if key is pressed,NS will be 20s of GREEN,or NS should be 18s of GREEN
    NS_COLOR = GREEN;
    if (pressed)
     {NS_TIME = 20;pressed = 0;}
    else
     NS_TIME = 18;
    break;
   case YELLOW:
    NS_COLOR = RED;
    NS_TIME = 20;
    break;
   case GREEN:
        NS_COLOR = YELLOW;
    NS_TIME = 2;
       break;
  }
 }

 if (EW_TIME == 0) {
  switch (EW_COLOR) {
   case RED:
    EW_COLOR = GREEN;
    EW_TIME = 18;
    break;
   case YELLOW://when EW is YELLOW,if key is pressed,EW will be 22s of RED,or will be 20s of RED
    EW_COLOR = RED;
   if (pressed)
     {EW_TIME = 22;pressed = 0;}
    else
     EW_TIME = 20;
    break;
   case GREEN:
        EW_COLOR = YELLOW;
    EW_TIME = 2;
       break;
  }
 }
}

void display() {
 unsigned char DISP,LED;
 NS_RED = (NS_COLOR != RED);
 NS_YELLOW = (NS_COLOR != YELLOW);
 NS_GREEN = (NS_COLOR != GREEN);
 EW_RED = (EW_COLOR != RED);
 EW_YELLOW = (EW_COLOR != YELLOW);
 EW_GREEN = (EW_COLOR != GREEN);
 switch (LED_POS) {
  case NS_H:
   LED_POS = NS_L;
   DISP = (int) (NS_TIME / 10);
   break;
  case NS_L:
   LED_POS = EW_H;
   DISP = (int) (NS_TIME % 10);
   break;
  case EW_H:
   LED_POS = EW_L;
   DISP = (int) (EW_TIME / 10);
   break;
  case EW_L:
   LED_POS = NS_H;
   DISP = (int) (EW_TIME % 10);
   break;
 }
 // LED defined as char (8 bits)(4 bits for the number,and 4 bits for the position)
 LED = (DISP << 4) | LED_POS;
 P1 = LED;//output the one bit number
}

void main(void){
//initialization
NS_COLOR=RED;
EW_COLOR=GREEN;
NS_TIME=20;
EW_TIME=18;
LED_POS=NS_H;
pressed=0;
debounce=0;
counter=0;
//Timer 2e16-5*10e-3/(11.0592e-6/12)=60536=0xec78
TMOD=0x01;
TR0=1;
for(;;){
 TH0 = 0xEC;
 TL0 = 0x78;
 do{}while(!TF0);
//DO IT!
// in main pressed = 0; initialize time to a positive value

if (!KEY){//the key control by the pedestrians
 debounce++;
}

if (debounce >= 20) {//pressed and holded the key over 5 x 20 = 100 ms
 debounce = 0;
 keyPressed(); 
}

counter++;

if (counter >= 200) {//Now one second just passed.
 counter = 0;
 secondUp();
}

display();//Display the right light with the current second time.


//END OF DOIT
TF0=0;//reset the timer overflow status bit
}
}

交通灯实例的实现方式一 省内存版

package question1; /* 第一题 * 定义一个交通灯枚举,包含红灯、绿灯、黄灯,需要有获得下一个灯的方法, * 例如:红灯获取下一个灯是绿灯,绿灯获取下一个灯是黄灯。 *...
  • dreamsky1989
  • dreamsky1989
  • 2012年06月03日 18:41
  • 706

交通信号灯控制系统——微机程序设计

1、.设计任务 交通信号灯控制系统:要求能显示剩余时间和控制红、黄、绿三色灯的显示。 2、总体方案设计与方案论证(1) 总体方案设计 设计路口交通灯控制系统,使用LED显示单元的两组发光二...
  • lxf_44944
  • lxf_44944
  • 2015年02月14日 19:43
  • 1478

交通灯控制系统

交通信号灯 分析:信号灯Lamp类 : 四个方向 12条路线被12个信号灯控制(忽略黄灯)红灯停绿灯行 "S2N","N2S","S2W","N2E","E2W","W2E","E2S","W2...
  • sinat_34447634
  • sinat_34447634
  • 2016年06月09日 10:36
  • 346

8255第二种控制交通灯

stack segment db 64 dup(?) stack ends data segment ioport    equ 0ff00h - 0280h io8255a equ iop...
  • u014595256
  • u014595256
  • 2016年06月22日 19:31
  • 530

数字逻辑实验-交通灯控制设计

题目:交通灯控制电路 二.设计要求: (1) 设计一个十字路口的交通灯控制电路,要求东西方向车道和南北方向车道两条交叉道路上的车辆交替运行,每次通行时间都设为45秒。时间可设置修改。 (2) 在绿灯转...
  • XunCiy
  • XunCiy
  • 2017年08月18日 13:16
  • 880

微机原理 课程设计报告 模拟交通灯

目录 (一)  课题简介................................. 2(二)  设计方案................................. 2(三)  具体设计...
  • maria87328
  • maria87328
  • 2008年06月23日 21:19
  • 13701

C#通过串口模拟交通灯程序

前阵子,一个同学让我帮他写个单片机控制交通灯的程序,我帮他写了程序之后,改进和完善了他的要求,使得我们可以通过PC端直接模拟这个系统。在完成的过程中,也遇到过不少问题,很多收获,这里写出来分享下。 ...
  • douyxiang
  • douyxiang
  • 2014年03月19日 15:12
  • 2133

微机交通灯控制系统

2006-06-13 12:41:46 微机交通灯控制系统课程设计任务书 一、课程设计目的 微机原理课程设计是微机原理课程的一次综合性训练。要求通过课程设计达到以下目的: ...
  • mybirdsky
  • mybirdsky
  • 2008年01月17日 16:30
  • 2838

黑马程序员-模拟交通灯控制系统

------- android培训、java培训、期待与您交流! ---------- /*  * 思路分析:  * 十字路口,按上下左右的方向来分析,一共有12条路线,其中4条右转弯是不受...
  • u011402948
  • u011402948
  • 2014年02月05日 22:59
  • 445

黑马程序员---交通灯控制系统

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ---------------------- package study; import j...
  • u014257730
  • u014257730
  • 2014年03月29日 05:53
  • 401
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:交通灯控制系统程式
举报原因:
原因补充:

(最多只允许输入30个字)