C51代码交通灯Proteus原理图.docx

上传人:b****7 文档编号:25507292 上传时间:2023-06-09 格式:DOCX 页数:20 大小:193.46KB
下载 相关 举报
C51代码交通灯Proteus原理图.docx_第1页
第1页 / 共20页
C51代码交通灯Proteus原理图.docx_第2页
第2页 / 共20页
C51代码交通灯Proteus原理图.docx_第3页
第3页 / 共20页
C51代码交通灯Proteus原理图.docx_第4页
第4页 / 共20页
C51代码交通灯Proteus原理图.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

C51代码交通灯Proteus原理图.docx

《C51代码交通灯Proteus原理图.docx》由会员分享,可在线阅读,更多相关《C51代码交通灯Proteus原理图.docx(20页珍藏版)》请在冰豆网上搜索。

C51代码交通灯Proteus原理图.docx

C51代码交通灯Proteus原理图

吉首大学单片机交通灯设计

原理图

局部放大

 

程序代码

 

#include

#defineucharunsignedchar

#defineuintunsignedint

ucharcodetable[]={//共阴极数码管码表

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71,

0xC9,0xFF,0x40};//设置码,测试码,不计时码

voiddelay(uintx);//延时函数

voiddisplay(uchar,uchar,uchar,uchar);//数码管显示函数

voidmkeys();//键盘函数

voidtraffic();//交通灯函数

ucharnum,num1,num2,//1南北2东西

shi1,ge1,shi2,ge2,

value1,value2,//南北绿灯时间黄灯时间

value3,value4,//东西绿灯时间黄灯时间

count1,count2,flag1,flag2;//南北标记东西标记

voidmain()

{

TMOD=0x01;

TH0=(65536-45872)/256;

TL0=(65536-45872)%256;

EA=1;

ET0=1;

TR0=1;

/*初状态*/

value1=15;//南北黄绿灯默认值

value2=5;

value3=10;//东西黄绿灯默认值

value4=5;

num1=value1;//南北数码管先绿灯时间

num2=value2+value1;//东西红灯时间

shi1=num1/10;

ge1=num1%10;

shi2=num2/10;

ge2=num2%10;

P1=0x41;//初始状态:

东西红灯南北绿灯2015

while

(1){

if(num==20)//定时器1s

{

num=0;

num1--;

num2--;

traffic();

shi1=num1/10;

ge1=num1%10;

shi2=num2/10;

ge2=num2%10;

}

mkeys();

display(shi1,ge1,shi2,ge2);

}

}

voidtraffic()//红绿灯主控制程序

{

if(num1==0){

count1++;

if(count1==1){

P1=0x42;//东西红灯南北黄灯55

num1=value2;

}

if(count1==2){

num1=value3+value4;//东西绿灯南北红灯1015

P1=0x14;

}

if(count1==3){

P1=0x41;//东西黄灯南北红灯55

num1=value4;

count1=0;

}

}

if(num2==0){

count2++;

if(count2==1){

//P1=0x14;//东西绿灯南北红灯

num2=value3;

}

if(count2==2){

P1=0x24;//东西黄灯南北红灯

num2=value4;

}

if(count2==3){

num2=value1+value2;//东西红灯南北绿灯

num1=value1;

count2=0;

}

}

}

voiddisplay(ucharshi1,ucharge1,ucharshi2,ucharge2)//数码管显示子函数

{

uchartemp;

temp=P2;

P2=0xfe;

P0=table[shi1];

delay(5);

P2=0xfd;

P0=table[ge1];

delay(5);

P2=0xfb;

P0=table[shi2];

delay(5);

P2=0xf7;

P0=table[ge2];

delay(5);

}

voiddelay(uintx)//延时子函数

{

uinti,j;

for(i=x;i>0;i--)

for(j=110;j>0;j--);

}

voidmkeys()//4*4矩阵键盘功能子函数

{

uchartemp,key;

P3=0xfe;//第一行线

temp=P3;

temp=temp&0xf0;

if(temp!

=0xf0)

{

delay(10);

temp=P3;

temp=temp&0xf0;

if(temp!

=0xf0){

temp=P3;

switch(temp)

{

case0xee:

key=0;

break;

case0xde:

key=1;

break;

case0xbe:

key=2;

break;

case0x7e:

key=3;

break;

}

while(temp!

=0xf0)

{

temp=P3;

temp=temp&0xf0;

}

if(key==0){//按键1:

暂停

TR0=~TR0;//定时器取反

flag1=~flag1;//南北能够设置标志0有效

flag2=~flag2;//东西能够设置标志

}

if(key==1&&flag1==0){//按键2:

设置时间按钮

TR0=0;

P1=0x44;//禁止东南西北车辆全为红灯可以设置

shi1=ge1=shi2=ge2=16;

}

if(key==2&&flag2==0){//按键3:

设置完成重启

TR0=1;

num=0;//定时器初始化

P1=0x41;//重新开始初状态

num1=value1;//南北数码管先绿灯时间

num2=value2+value1;//东西红灯时间

shi1=num1/10;

ge1=num1%10;

shi2=num2/10;

ge2=num2%10;

}

if(key==3&&P1==0x44){//按键4:

测试交通灯各个设备的好坏

P1=0xff;

delay(1000);

P1=~P1;

shi1=ge1=shi2=ge2=17;

P1=0x44;

}

}

}

P3=0xfd;//第二行线

temp=P3;

temp=temp&0xf0;

if(temp!

=0xf0)

{

delay(10);

temp=P3;

temp=temp&0xf0;

if(temp!

=0xf0){

temp=P3;

switch(temp)

{

case0xed:

key=0;

break;

case0xdd:

key=1;

break;

case0xbd:

key=2;

break;

case0x7d:

key=3;

break;

}

while(temp!

=0xf0)

{

temp=P3;

temp=temp&0xf0;

}

if(key==0&&P1==0x44){//按键5:

设置南北绿灯时间+

num1=value1;

if(num2!

=159){//@@@@保证交通合理,红灯最大值计时159s,绿灯不再增加

num1++;

value1=num1;

}

shi1=num1/10;

ge1=num1%10;

num2=value1+value2;//显示东西红灯时间

shi2=num2/10;

ge2=num2%10;

 

}

if(key==1&&P1==0x44){//按键6:

设置南北黄灯时间+

num1=value2;

if(num2!

=159){

num1++;

value2=num1;

}

shi1=num1/10;

ge1=num1%10;

num2=value1+value2;//显示东西红灯时间

shi2=num2/10;

ge2=num2%10;

}

if(key==2&&P1==0x44&&value1>3){//按键7:

设置南北绿灯时间-@@@@保证交通合理,绿灯最小值计时3s,绿灯不再减少

num1=value1;

num1--;

value1=num1;

shi1=num1/10;

ge1=num1%10;

num2=value1+value2;//显示东西红灯时间

shi2=num2/10;

ge2=num2%10;

}

if(key==3&&P1==0x44&&value2>3){//按键8:

设置南北黄灯时间-

num1=value2;

num1--;

value2=num1;

shi1=num1/10;

ge1=num1%10;

num2=value1+value2;//显示东西红灯时间

shi2=num2/10;

ge2=num2%10;

}

}

}

////||||||||||||||||||

P3=0xfb;//第三行线

temp=P3;

temp=temp&0xf0;

if(temp!

=0xf0)

{

delay(10);

temp=P3;

temp=temp&0xf0;

if(temp!

=0xf0){

temp=P3;

switch(temp)

{

case0xeb:

key=0;

break;

case0xdb:

key=1;

break;

case0xbb:

key=2;

break;

case0x7b:

key=3;

break;

}

while(temp!

=0xf0)

{

temp=P3;

temp=temp&0xf0;

}

if(key==0&&P1==0x44){//按键9:

设置东西绿灯时间+

num2=value3;

if(num1!

=159){

num2++;

value3=num2;

}

shi2=num2/10;

ge2=num2%10;

num1=value3+value4;//显示南北红灯时间

shi1=num1/10;

ge1=num1%10;

 

}

if(key==1&&P1==0x44){//按键10:

设置东西黄灯时间+

num2=value4;

if(num1!

=159){

num2++;

value4=num2;

}

shi2=num2/10;

ge2=num2%10;

num1=value3+value4;//显示南北红灯时间

shi1=num1/10;

ge1=num1%10;

}

if(key==2&&P1==0x44&&value3>3){//按键11:

设置东西绿灯时间-

num2=value3;

num2--;

value3=num2;

shi2=num2/10;

ge2=num2%10;

num1=value3+value4;//显示南北红灯时间

shi1=num1/10;

ge1=num1%10;

 

}

if(key==3&&P1==0x44&&value4>3){//按键12:

设置东西黄灯时间-

num2=value4;

num2--;

value4=num2;

shi2=num2/10;

ge2=num2%10;

num1=value3+value4;//显示南北红灯时间

shi1=num1/10;

ge1=num1%10;

 

}

}

}

P3=0xf7;//第四行线2未用

temp=P3;

temp=temp&0xf0;

if(temp!

=0xf0)

{

delay(10);

temp=P3;

temp=temp&0xf0;

if(temp!

=0xf0){

temp=P3;

switch(temp)

{

case0xe7:

key=0;

break;

case0xd7:

key=1;

break;

case0xb7:

key=2;

break;

case0x77:

key=3;

break;

}

while(temp!

=0xf0)

{

temp=P3;

temp=temp&0xf0;

}

if(key==0&&P1==0x44){//按键13:

南北紧急情况:

南北绿灯常亮东西红灯常亮

P1=0x41;

shi1=ge1=shi2=ge2=18;

}

if(key==1&&P1==0x44){//按键14:

东西紧急情况:

东西绿灯常亮南北红灯常亮

P1=0x14;

shi1=ge1=shi2=ge2=18;

}

if(key==2&&P1==0x44){//按键15:

}

if(key==3&&P1==0x44){//按键16:

}

}

}

 

}

voidT0_time()interrupt1//定时器T0中断子程序

{

TH0=(65536-45872)/256;

TL0=(65536-45872)%256;

num++;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 图表模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1