首页 接线图文章正文

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

接线图 2023年09月21日 20:11 264 admin
简介:本文主要介绍了单片机交通灯设计源程序电路图

初学单片机搞了几个星期做出个交通灯!!

给源程序和电路图全部分享了~~~~~~~~~~~~~~~~~~~~

#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

}

void int0(void) interrupt 0 using 1//东西强行

{

TR0=0;

P1=0XF3;

sec_dx=88;

sec_nb=88;

int0_time=1;

}

void int1(void) interrupt 2 using 1//南北强行

{

TR0=0;

P1=0XDE;

sec_nb=88;

sec_dx=88;

int0_time=1;

}

void delay(int ms)

{

uint j,k;

for(j=0;j

for(k=0;k<124;k++);

}

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

原理

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

版权与免责声明

本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。

如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。

标签: 单片机 交通灯设计 源程序 电路图 基础知识

发表评论

接线图网Copyright Your WebSite.Some Rights Reserved. 备案号:桂ICP备2022002688号-2 接线图网版权所有 联系作者QQ:360888349