交通灯控制 单片机(6)

2018-12-17 11:05

成都理工大学毕业论文 — 交通灯

附录:

系统总体电路图:

交通灯总原理图

26

成都理工大学毕业论文 — 交通灯

总程序:

//****************************************************** //作品名称: 十字路口简易交通灯 //设计者: 刘伟 //功能介绍:

// KEY1按下,设置时间 // KEY2按下,恢复

// KEY3按下,东西禁止通行 // KEY4按下,南北禁止通行 //设计时间: 2009.5.15

//****************************************************** #include #include

//=========================================================== #define uchar unsigned char #define uint unsigned int

//=====================指示灯状态定义======================== #define ALL_OFF (P0 = 0xdb)//全部禁行

#define EW_ON (P0 = 0xeb) //东西绿灯,南北红灯 #define SN_ON (P0 = 0xdd) //南北绿灯,东西红灯 #define EW_Y_ON (P0 = 0xF3) //南北红灯,东西黄灯亮 #define EW_Y_OFF (P0 = 0xFB) //南北红灯,东西黄灯灭 #define SN_Y_ON (P0 = 0xDE) //东西红灯,南北黄灯亮 #define SN_Y_OFF (P0 = 0xDF) //东西红灯,南北黄灯灭 #define COUNT_DOWN 70 //定时时间 #define INTERIM t //黄灯过渡时间

//====================按键定义=============================== sbit KEY1 = P2^4; //时间设置 sbit KEY2 = P2^5; //恢复 sbit KEY3 = P2^6; //东西禁行 sbit KEY4 = P2^7; //南北禁行

//====================函数定义=============================== void TIME_Init (); //定时器初始化 void Delay1Ms(uchar t); //延时t*1Ms void Delay1s(uchar t); //延时t*1s void key_scan(); //键盘扫描

//======================数码管选择定义=======================

const uchar LED7Code[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //段码 const uchar LED[]={0x01,0x02,0x04,0x08,0x00};//共阳数码管位选 //====================变量定义=============================== uchar t50ms = 0; //50ms累加位

uchar half_sec,sec; //半秒,秒寄存器 uchar key_flag; //键值标记位 uint t;

bit aspect_flag = 0; //0:东西通行,1:南北通行 bit interim_flag = 0; //0:东西黄灯,1:南北黄灯

////////////////////////////主函数////////////////////////// Void main ()

27

成都理工大学毕业论文 — 交通灯

{

t=5;

TIME_Init (); //定时器初始化 sec=COUNT_DOWN; //定时初值 while(1) {

key_scan(); //按键扫描 switch (key_flag) {

case 0:t++;if(t>=30)t=5;break;//设置时间 case 1:TR0 = 1;break; //恢复

case 2:EW_ON;P1=LED[4];TR0 = 0;break; //南北禁行,定时器停止 case 3:SN_ON;P1=LED[4];TR0 = 0;break; //东西禁行,定时器停止 }

//==========状态S1========

if( (aspect_flag == 0)&(interim_flag == 0)&(key_flag == 0) ) {

EW_ON; P1=LED[0];

P2=LED7Code[(sec-INTERIM)/10]; //东西方向绿灯,少5秒 Delay1Ms(1); P2 = 0XFF; P1=LED[1];

P2=LED7Code[(sec-INTERIM)]; Delay1Ms(1); P1=LED[2];

P2=LED7Code[sec/10]; //南北方向红灯 Delay1Ms(1); P2=0XFF; P1=LED[3];

P2=LED7Code[sec]; Delay1Ms(1); }

//==========状态S2========

if( (aspect_flag == 0)&(interim_flag == 1)&(key_flag == 0) ) {

if(half_sec % 2 == 1) EW_Y_ON; else EW_Y_OFF; P1=LED[0];

P2=LED7Code[sec/10]; //东西方向黄灯 Delay1Ms(1); P2 = 0XFF; P1=LED[1];

P2=LED7Code[sec]; Delay1Ms(1); P1=LED[2];

P2=LED7Code[sec/10]; //南北方向红灯 Delay1Ms(1); P2 = 0XFF; P1=LED[3];

28

成都理工大学毕业论文 — 交通灯

P2=LED7Code[sec]; Delay1Ms(1); }

//==========状态S3========

if( (aspect_flag == 1)&(interim_flag == 0)&(key_flag == 0) ) {

SN_ON; P1=LED[0];

P2=LED7Code[sec/10]; //东西方向红灯 Delay1Ms(1); P2 = 0XFF; P1=LED[1];

P2=LED7Code[sec]; Delay1Ms(1); P1=LED[2];

P2=LED7Code[(sec-INTERIM)/10]; //南北方向绿灯,少5秒 Delay1Ms(1); P2 = 0XFF; P1=LED[3];

P2=LED7Code[(sec-INTERIM)]; Delay1Ms(1); }

//==========状态S4========

if( (aspect_flag == 1)&(interim_flag == 1)&(key_flag == 0) ) {

if(half_sec % 2 == 1) SN_Y_ON; else SN_Y_OFF; P1=LED[0];

P2=LED7Code[sec/10]; Delay1Ms(1); P2 = 0XFF; P1=LED[1];

P2=LED7Code[sec]; Delay1Ms(1); P1=LED[2];

P2=LED7Code[sec/10]; Delay1Ms(1); P2 = 0XFF; P1=LED[3];

P2=LED7Code[sec]; Delay1Ms(1); } } }

/****************************************************************** 名称:void TIME_Init (); 功能:定时器初始化 指令:

29

成都理工大学毕业论文 — 交通灯

调用:无 返回:无

/******************************************************************/ void TIME_Init () {

TMOD = 0x01;

RCAP2H =(65536-50000)/256; //定时50ms 自动重装 RCAP2L =(65536-50000)%6; EA = 1; //总中断使能 ET0 = 1; //定时器0中断开 TR0 = 1; //关定时器0 }

/****************************************************************** 名称:void Tim0 () interrupt 1 功能:T0中断, 参数: 调用: 返回:

******************************************************************/ void PWM_Time0 () interrupt 1 {

RCAP2H =(65536-50000)/256; //定时50ms 自动重装 RCAP2L =(65536-50000)%6; TF2 = 0; //清零中断标志位 //ET2 = 0; //定时器0中断禁止 if(++ t50ms == 10) {

half_sec++; t50ms = 0; }

if(half_sec == 2) {

half_sec = 0; //清零 if(--sec ==INTERIM ) {

interim_flag = 1;//黄灯闪烁标志 }

if(sec ==0) {

sec = COUNT_DOWN;

aspect_flag = !aspect_flag; //换向 interim_flag = 0;//黄灯闪烁关闭 } } }

/****************************************************************** 名称:void key_scan() 功能:按键扫描 参数: 调用:

30


交通灯控制 单片机(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:北关街道“三责”教育活动方案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: