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