标题:
单片机交通灯按键控制程序
[打印本页]
作者:
7894566123
时间:
2017-6-5 08:21
标题:
单片机交通灯按键控制程序
交通灯仿真原理图如下,带按键控制(proteus仿真工程文件可到本帖附件中下载)
QQ截图.png
(15.74 KB, 下载次数: 44)
下载附件
2017-6-5 08:20 上传
0.png
(45.63 KB, 下载次数: 48)
下载附件
2017-6-5 16:42 上传
单片机源程序:
#include<reg51.H> // ???????????
#define uint unsigned int
#define uchar unsigned char
uchar code a[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//????,???
uchar code b[4]={0x01,0x02,0x04,0x08}; //????
uchar code c[4]={0xcc,0xd4,0x78,0xb8};/*P1 ???????????*/
//12MHz
//*****************************************************************************
uchar NB=25,DX=30,NBG=25,DXG=15,H=5; /*????????*/
uchar i,k=0,cnt=0,j=0;
sbit K0=P3^4; /*?????*/
sbit K1=P3^5; /*?????*/
sbit K4=P3^6; /*??*/
sbit K3=P3^2; /*????*/
sbit K2=P3^3; /*????*/
void delay(uchar t); /*??????*/
void key(); /*??????*/
void display(); /*??????*/
void settime(); /*??????????*/
//************************????*********************************************
void init(void)
{
TMOD=0x01; /*?????0???*/
TH0=0x3c; /*(65536-5000)/256*/
TL0=0xb0; /*(65536-5000)%256*/
IT0=1; //???
ET0=1;
TR0=1;
EA=1;
EX0=1;
EX1=1;
P1=c[k]; //?????
}
//*************************??0????***************************************
void int0(void) interrupt 0 // ??????
{
EA=0;
P1=0xd8; /*????*/
for(;;)
{
settime();
if(K1==0) /*P3^6=0?????????*/
{
delay(40);
if(K1==0)
{
while(!K1)
{settime();}
DXG++; /*????????1*/
if(DXG==100)
DXG=0;
}
}
if(K0==0) /*P3^5=0?????????*/
{
delay(40);
if(K0==0)
{
while(!K0)
{settime();}
NBG++; /*????????1*/
if(NBG==100)
NBG=0;
}
}
if(K4==0) /*P3^7=0??*/
{
delay(40);
if(K4==0)
{
while(!K4)
{
}
k=0;P1=c[k];
NB=NBG,DX=NBG+H;
display();
EA=1;
break;
}
}
}
}
//***********************************??1????********************
void int1(void) interrupt 2 //????
{
/*???????*/
EA=0;
TR0=!TR0; /*????*/
for(;;) /*????????0*/
{
P1=0xd8,
P0=a[0];
P2=b[0];
delay(20);
P2=b[1];
delay(20);
P2=b[2];
delay(20);
P2=b[3];
delay(20);
if(K4==0) /*??*/
{
delay(20);
EA=1;
P1=c[k]; /*???????????*/
TR0=!TR0; /*????*/
break;
}
}
}
void time1(void) interrupt 1 /*???????*/
{
TH0=0x3c; /*??50ms*/
TL0=0xb0;
cnt++;
if(cnt>=20) /*?20*50ms=1s???*/
{
NB--;
DX--;
cnt=0;
if(NB==0||DX==0)
{
k++;
if(k>3) /*k?0,1,2,3*/
k=0;
switch(k)
{
case 0:NB=NBG,DX=NBG+H;j=0;P1=c[k];break; /*?????????*/
case 1:NB=H;j=1;P1=c[k];break; /*???????*/
case 2:NB=DXG+H,DX=DXG;j=0;P1=c[k];break; /*?????????*/
case 3:DX=H;j=2;P1=c[k];break; /*???????*/
}
}
}
}
void delay(uchar t) //??????0.1*nms
{
uchar i;
do
{
for(i=0;i<20;i++)
;;;
} while(t--);
}
void settime()
{
P2=b[0],P0=a[(NBG+H)%10]; /*????????? */
delay(20);
P2=b[1],P0=a[(NBG+H)/10];
delay(20);
P2=b[2],P0=a[(DXG+H)%10]; /*?????????*/
delay(20);
P2=b[3],P0=a[(DXG+H)/10];
delay(20);
}
void key() //?????KO K1??????????
{
if(K1==0) /*??????????*/
{
delay(40);
if(K1==0)
{
while(!K1)
{
display();
}
k=0,P1=c[k];cnt=0;
NB=NBG, DX=NBG+H;
display();
}
}
if(K0==0) /*??????????*/
{
delay(40);
if(K0==0)
{
while(!K0)
{
display();
}
k=2,P1=c[k];cnt=0;
NB=DXG+H,DX=DXG;
display();
}
}
}
void display() //????
{
P2=b[0],P0=a[NB%10]; /*?k????????????*/
delay(20);
P2=b[1],P0=a[NB/10];
delay(20);
P2=b[2],P0=a[DX%10];
delay(20);
P2=b[3],P0=a[DX/10];
delay(20);
}
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
下载:
单片机交通灯按键控制程序.zip
(22.85 KB, 下载次数: 28)
2017-6-5 08:21 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1