工控网首页
>

应用设计

>

单片机制作交通灯设计源程序分享

单片机制作交通灯设计源程序分享

2016/10/17 16:37:12

单片机交通灯设计源程序和电路图

#include #include #define uchar unsigned char #define uint unsigned int sbit k1=P1^6; sbit k2=P1^7; sbit k3=P2^7; sbit k4=P3^0; sbit yellowled_nb=P1^4; //南北黄灯 sbit yellowled_dx=P1^1; //东西黄灯 uchar code table[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};//共阴 uchar data dig; //位选 uchar data led; //偏移量 uchar data buf[4]; uchar data sec_dx=20;//东西数码指示值 uchar data sec_nb=20;//南北数码指示值 uchar data set_timedx=20; uchar data set_timenb=20;//倒计时设置的键值保存 uchar data b;//定时器中断次数 bit time;//灯状态循环标志 bit int0_time;//中断强行标志 bit  set;//调时方向切换键标志 void delay(int ms);//延时子程序 void key();//按键扫描子程序 void key_to1();//键处理子程序 void key_to2(); void display();//显示子程序 void main() { TMOD=0X01;  TH0=0X3C; TL0=0XB0; EA=1; ET0=1; TR0=1; EX0=1; EX1=1; P1=0Xf3;// 东西通行 while(1) { key(); //调用按键扫描程序 display(); //调用显示程序 }  } void key() //按键扫描子程序 { if(k1!=1) { delay(10); if(k1!=1) { while(k1!=1); key_to1(); } } if(k2!=1) { delay(10); if(k2!=1) { while(k2!=1); key_to2(); } } if(k4!=1) { delay(10); if(k4!=1) { while(k4!=1); set=!set; } } if(k3!=1&&int0_time==1) {  TR0=1;  //启动定时器 sec_nb=20; sec_dx=20; int0_time=0;//清标志 } else if(k3!=1&&int0_time==0) { TR0=1; set_timenb=sec_nb; set_timedx=sec_dx; //设置的键值返回保存 } } void display() { buf[1]=sec_dx/10; //第1位 东西秒十位 buf[2]=sec_dx%10; //第2位 东西秒个位 buf[3]=sec_nb/10; //第3位 南北秒十位 buf[0]=sec_nb%10; //第4位 南北秒个位 P0=table[buf[led]]; delay(2); //先延时,提前显示一位了 P2=dig; dig=_crol_(dig,1); led++; if (led==4) {led=0; dig=0xfe; } } void time0(void) interrupt 1 using 1 //定时中断子程序 { b++; if(b==10) // 定时器中断次数。 { b=0; sec_dx--; sec_nb--; /******************南北黄灯闪烁判断*************************/  if(sec_nb==3&&time==0) { yellowled_nb=1;//南北黄灯亮 delay(300); yellowled_nb=0; } if(sec_nb==2&&time==0) { yellowled_nb=1;//南北黄灯亮 delay(300); yellowled_nb=0; } if(sec_nb==1&&time==0) { yellowled_nb=1; delay(300); yellowled_nb=0; } /*******************东西黄灯闪判断************************/  if(sec_dx==3&&time==1) { yellowled_dx=1;//南北黄灯亮 delay(300); yellowled_dx=0; } if(sec_dx==2&&time==1) { yellowled_dx=1;//南北黄灯亮 delay(300); yellowled_dx=0; } if(sec_dx==1&&time==1) { yellowled_dx=1; delay(300); yellowled_dx=0; }  /*******************************************/ if(sec_dx==0||sec_nb==0) //东西或南北先到达1S时即开始重新计时 { sec_dx=set_timedx; sec_nb=set_timenb; //第一次循环结束重置 if(time==1) { P1=0XF3; //东西通行 } else { P1=0xde; //南北通行 } time=!time;  //取反 } } } void key_to1() { TR0=0; //关定时器 if(set==0) sec_nb++; //南北加1S else sec_dx++;//东西加1S if(sec_nb==100) sec_nb=1; if( sec_dx==100) sec_dx=1;//加到100置1 } void key_to2() { TR0=0;//关定时器 if(set==0) sec_nb--; //南北减1S else sec_dx--; //东西减1S if(sec_nb==0) sec_nb=99;  if( sec_dx==0 ) sec_dx=99;//减到1重置99

投诉建议

提交

查看更多评论
其他资讯

查看更多

助力企业恢复“战斗状态”:MyMRO我的万物集·固安捷升级开工场景方案

车规MOSFET技术确保功率开关管的可靠性和强电流处理能力

未来十年, 化工企业应如何提高资源效率及减少运营中的碳足迹?

2023年制造业“开门红”,抢滩大湾区市场锁定DMP工博会

2023钢铁展洽会4月全新起航 将在日照触发更多商机