基于单片机的交通灯控制系统设计_单片机交通灯控制系统

2020-02-28 其他范文 下载本文

基于单片机的交通灯控制系统设计由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“单片机交通灯控制系统”。

P10P11P12P13设置键加键减键模式键P00P01P02P03P04P05P06U18765P134P123P112P101P1.7P1.6P1.5P1.4P1.3P1.2P1.1/T2EXP1.0/T2P3.7/RDP3.6/WRP3.5/T1P3.4/T0P3.3/INT1P3.2/INT0P3.1/TXDP3.0/RXDP2.7/A15P2.6/A14P2.5/A13P2.4/A12P2.3/A11P2.2/A10P2.1/A9P2.0/A8P0.7/AD7P0.6/AD6P0.5/AD5P0.4/AD4P0.3/AD3P0.2/AD2P0.1/AD1P0.0/AD0******23222***373839P37P36P35P34P22P23P24D7D4P27P26P25P24P23P22P21P20P07P06P05P04P03P02P01P0098765432110KP27LED-REDD92H1HD1D6P25LED-YELLOWD11P26LED-YELLOWLED-GREENLED-REDC31uF313029EAALEPSEND12P26R0100RP1P25LED-GREENLED-GREENC120PF9RSTD5P00P01P02P03P04P05P06LED-YELLOWD3P27LED-REDX1C220PF12M19LED-REDLED-GREENLED-YELLOWP24P23P22XTAL1AT89C51Q1PNPQ2PNPQ3PNPQ4PNPP34P35657U2SCKSDAWP24C02CA0A1A2123R151R1HR251R2HR351R3HR451R4HP36P37P21P00P01P02P03P04P05P0651R51R51R51R2H1HR19R20R21P20R223H4HXTAL2P00P01P02P03P04P05P0618D2D10D83H4H

#include

//调用单片机头文件

#define uchar unsigned char

//宏定义“uchar”代替“unsigned char”。#define uint unsigned int

//宏定义“uint”用来定义无符号整型数。

//数码管段选定义 06 7uchar code smg_du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, //

A B C

D

E

F 不显示

0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};//断码

uchar dis_smg[8] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8};uchar smg_i = 4;

//显示数码管的个位数

//数码管位选定义

sbit smg_we1 = P2^0;

//数码管位选定义 sbit smg_we2 = P2^1;sbit smg_we3 = P3^6;sbit smg_we4 = P3^7;

char dx_s = 0;//东西

南北 倒计时变量 sbit dx_red

= P2^4;

//东西红灯 sbit dx_green = P2^3;//东西绿灯 sbit dx_yellow = P2^2;//东西黄灯

sbit nb_red

= P2^7;//南北红灯 sbit nb_green = P2^6;//南北绿灯 sbit nb_yellow = P2^5;//南北黄灯

sbit scl=P3^4;//写24C02时钟

sbit sda=P3^5;//写24C02数据

uchar flag_jtd_mode;//交通灯的模式 根据时间

bit flag_1s = 0;bit flag_500ms;bit flag_dx_nb;uchar flag_5m_value;uchar i;//东西南北模式

uchar flag_alarm;//模式

uchar dx_time = 30,nb_time = 20;

//东西、南北的时间 uchar flag_jdgz;

//交通管制

//---延时函数---// void delay(){;;}

void start()//起始信号 { sda=1;delay();scl=1;delay();sda=0;delay();}

void stop()//停止信号 { sda=0;delay();scl=1;delay();sda=1;delay();}

void respons()//应答信号 { uchar i;scl=1;delay();while((sda==1)&&(i

void init()//初始状态,24C02的数据和时钟线都拉高 { sda=1;delay();scl=1;delay();}

void writebyte(uchar date)//写24C02 { uchar i,temp;temp=date;for(i=0;i

temp=temp

scl=0;

delay();

sda=CY;

delay();

scl=1;

delay();} scl=0;delay();sda=1;delay();} uchar readbyte()//读24C02 { uchar i,k;scl=0;delay();sda=1;delay();

for(i=0;i

scl=1;

delay();

k=(k

scl=0;

delay();} return k;}

void writeadd(uchar addre,uchar date)//写24C02 {

start();//起始信号

writebyte(0xa0);//写入器件地址写 respons();

writebyte(addre);//写入存储单元地址 respons();

writebyte(date);//写入数据 respons();

stop();//停止信号 }

uchar readadd(uchar addre)//读24C02 { uchar date;

start();//起始信号

writebyte(0xa0);//写入器件地址写

respons();

writebyte(addre);//写入读单元地址

respons();

}

start();//起始信号

writebyte(0xa1);//读命令 respons();date=readbyte();//读数据 stop();//停止信号 return date;/***********************数码位选函数*****************************/ void smg_we_switch(uchar i){ switch(i){

case 0: smg_we1 = 0;smg_we2 = 1;smg_we3 = 1;smg_we4 = 1;break;

case 1: smg_we1 = 1;smg_we2 = 0;smg_we3 = 1;smg_we4 = 1;break;

case 2: smg_we1 = 1;smg_we2 = 1;smg_we3 = 0;smg_we4 = 1;break;

case 3: smg_we1 = 1;smg_we2 = 1;smg_we3 = 1;smg_we4 = 0;break;} }

/******************************************************************** * 名称 : delay_1ms()* 功能 : 延时1ms函数 * 输入 : q * 输出 : 无

***********************************************************************/ void delay_1ms(uint q){ uint i,j;for(i=0;i

for(j=0;j

/******************************************************************** * 名称 : display()* 功能 : 数码管显示 * 输入 : 无 * 输出 : 无 ***********************************************************************/ void display(){ uchar i;for(i=0;i

P0 = 0xff;

//消隐

smg_we_switch(i);

//位选

P0 = dis_smg[i];

//段选

delay_1ms(3);} }

/*********************定时器0、定时器1初始化******************/ void time0_init()

{ EA = 1;

//开总中断

TMOD = 0X11;//定时器0、定时器1工作方式1 ET0 = 1;

//开定时器0中断

TR0 = 1;

//允许定时器0定时

}

/*********************交通灯处理函数*********************************/ void jiaotongdeng_dis(){

char dx,nb;

if(flag_dx_nb == 0){ dx=dx_s;nb=dx_s-5;if(nb

if(flag_dx_nb == 1){ dx=dx_s-5;nb=dx_s;if(dx

if(flag_1s == 1){ dx_s--;flag_1s = 0;

if(dx_s == 0){

if(flag_dx_nb == 1)

dx_s = nb_time;

//南北时间

else

dx_s = dx_time;

//东西时间

flag_dx_nb = ~flag_dx_nb;

}

}

dis_smg[0] = smg_du[dx % 10];dis_smg[1] = smg_du[dx / 10];dis_smg[2] = smg_du[nb % 10];dis_smg[3] = smg_du[nb / 10];

/***********************南北时间*********************************/

if(flag_dx_nb == 0)

{

if(dx_s > 5)

{

dx_red

= 1;//灭

dx_green = 0;//亮

dx_yellow = 1;//灭

nb_red

= 0;//亮

nb_green = 1;//灭

nb_yellow = 1;//灭

flag_5m_value = 0;

}else if(dx_s

//当小于5秒时

黄灯要闪了

{

dx_red

= 1;

//灭

}

} dx_green = 1;

//灭 nb_red

= 0;

//亮 nb_green = 1;

//灭 nb_yellow = 1;

//灭 if(flag_500ms == 0){ dx_yellow = 0;//亮

} else { } dx_yellow = 1;//灭

/***********************东西时间*********************************/

if(flag_dx_nb == 1)

{

if(dx_s > 5)

{

dx_red

= 0;

//亮

dx_green = 1;

//灭

dx_yellow = 1;

//灭

nb_red

= 1;

//灭

nb_green = 0;

//亮

nb_yellow = 1;

//灭

flag_5m_value = 0;

}else if(dx_s

//当小于5秒时

黄灯要闪了

{

dx_red

= 0;

//灭

dx_green = 1;

//灭

dx_yellow = 1;

//灭

nb_red

= 1;

//灭

nb_green = 1;

//灭

if(flag_500ms == 0)

//黄灯闪烁

{

}

}

} nb_yellow = 0;//亮 } else { nb_yellow = 1;//灭 }

/********************独立按键程序*****************/ uchar key_can;//按键值

void key()//独立按键程序 { static uchar key_new;key_can = 20;

//按键值还原

P1 |= 0x1f;

if((P1 & 0x1f)!= 0x1f)//按键按下 { delay_1ms(1);

//按键消抖动

if(((P1 & 0x1f)!= 0x1f)&&(key_new == 1))

{

key_new = 0;switch(P1 & 0x1f){

//确认是按键按下

case 0x1e: key_can = 1;break;//得到按键值

case 0x1d: key_can = 2;break;//得到按键值

case 0x1b: key_can = 3;break;//得到按键值

case 0x17: key_can = 4;break;//得到按键值

}

}

} else

key_new = 1;}

uchar menu_1,flag_s;

/********************设置函数*****************/ void key_with(){ if(key_can == 4)

//交通管制按键

{

flag_jdgz ++;

if(flag_jdgz > 5)

flag_jdgz = 0;

if(flag_jdgz == 1)// 全部亮红灯

{

dx_red

= 0;//亮

dx_green = 1;//灭

dx_yellow = 1;//灭

} nb_red

= 0;//亮

nb_green = 1;//灭 nb_yellow = 1;//灭

if(flag_jdgz == 2)// 东西红灯

南北绿灯

{

dx_red

= 0;//亮

dx_green = 1;//灭

dx_yellow = 1;//灭

nb_red

= 1;//灭

nb_green = 0;//亮

nb_yellow = 1;//灭

} if(flag_jdgz == 3)// 南北红灯 {

dx_red

= 1;//灭

dx_green = 0;//亮

dx_yellow = 1;//灭

nb_red

= 0;//亮

nb_green = 1;//灭

nb_yellow = 1;//灭

} if(flag_jdgz == 4)// 南北绿灯 {

dx_red

= 1;//灭

dx_green = 0;//亮

dx_yellow = 1;//灭

nb_red

= 1;//灭

nb_green = 0;//亮

nb_yellow = 1;//灭

} if(flag_jdgz == 5)// 南北黄灯 {

dx_red

= 1;//灭

dx_green = 1;//灭

dx_yellow = 0;//亮

nb_red

= 1;//灭

nb_green = 1;//灭

nb_yellow = 0;//亮

} } if(key_can == 1)

//设置键 { menu_1 ++;

东西绿灯 东西绿灯

东西黄灯

if(menu_1 >= 3){

menu_1 = 0;} } if(menu_1 == 1)

//设置东西的时间 { if(key_can == 2){

dx_time ++;//加1

if(dx_time > 99)

dx_time = 99;} if(key_can == 3){

dx_time--;//减1

if(dx_time

dx_time = 10;} dis_smg[0] = smg_du[10];//显示为A dis_smg[1] = smg_du[10];//显示为A dis_smg[2] = smg_du[dx_time % 10];dis_smg[3] = smg_du[dx_time / 10];

writeadd(4,dx_time);//保存数据

} if(menu_1 == 2)

//设置南北的时间 { if(key_can == 2){

nb_time ++;//加1

if(nb_time > 99)

nb_time = 99;} if(key_can == 3){

nb_time--;//减1

//显示东西设置的时候

if(nb_time

nb_time = 10;} dis_smg[0] = smg_du[11];//显示为B dis_smg[1] = smg_du[11];//显示为B dis_smg[2] = smg_du[nb_time % 10];dis_smg[3] = smg_du[nb_time / 10];

//显示东西设置的时候

writeadd(2,nb_time);//保存数据

} }

/******************************************************************** * 名称 : main()* 功能 : 实现灯的闪烁 * 输入 : 无 * 输出 : 无

***********************************************************************/ void main(){ time0_init();

init();//24C02初始化

nb_time=readadd(2);//读取地址2处一个字节给

dx_time=readadd(4);//读取地址4处一个字节给

if(nb_time>99)nb_time=20;

if(dx_time>99)dx_time=30;

dx_s = nb_time;

//东西时间

while(1){

key();

if(key_can

key_with();

if((menu_1 == 0)&&(flag_jdgz == 0))

} }

jiaotongdeng_dis();display();/*********************定时器0中断服务程序************************/ void time0_int()interrupt 1

{

} static uchar value;

//定时10ms中断一次 TH0 = 0x3c;TL0 = 0xb0;

//50ms value ++;flag_5m_value++;if(flag_5m_value % 10 == 0)flag_500ms = ~flag_500ms;if(value >= 20){ value = 0;flag_1s = 1;}

单片机:交通灯控制系统设计

交通灯控制系统设计摘要:本系统由单片机系统、键盘、LED 显示、交通灯演示系统组成。系统包括人行道、左转、右转、以及基本的交通灯的功能。系统除基本交通灯功能外,还具有倒......

单片机控制的交通灯控制系统设计

摘要本设计是单片机控制的交通灯控制系统设计。由单片机系统、LED显示、交通灯演示系统、键盘电路及其控制电路组成。该系统除基本交通灯功能外,还具有倒计时、紧急情况处理......

基于单片机的交通灯控制系统设计

基于单片机的交通灯控制系统设计摘要:十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊。那么靠什么来实现这井然秩序呢?靠的就是交通信号灯的自动指挥系统。交通信号灯控......

基于单片机的交通灯控制系统

单片机原理及系统课程设计报告基于单片机的交通灯控制系统1 引言单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只......

基于单片机的交通灯控制系统设计毕业论文

毕 业 论 文题 目 基于单片机的交通灯控制系统设计姓 名 **** 学 号 所在系 专业年级 指导教师 职 称二O一四 年 五 月 三十一日151 series microcontroller ATSC51 and p......

《基于单片机的交通灯控制系统设计.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
基于单片机的交通灯控制系统设计
点击下载文档
相关专题 单片机交通灯控制系统 控制系统 设计 交通灯 单片机交通灯控制系统 控制系统 设计 交通灯
[其他范文]相关推荐
[其他范文]热门文章
下载全文