标题:
基于单片机交通信号灯的设计
[打印本页]
作者:
Fib08
时间:
2024-8-6 23:50
标题:
基于单片机交通信号灯的设计
分享需要请查看
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit p16=P1^6 ;
sbit p17=P1^7 ;
uint i,j,k,turn=0;
uint code Seg[19]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x80,0x40};
//数码管译码表: { 0 , 1 , 2 , 3 , 4 ,5 6 7 8 9 . - }
uchar jps,ks,key_do;//键盘缓存,上次有按键按下标志位,按键已处理标志位
int count_10ms=0,second=15; //初始值
void delay(uint tt) //延时函数
{
uint i;
for(;tt>0;tt--)
for(i=0;i<200;i++);
}
void LED(uint d1,uint d2)
{
if(d1==1) P0=(P0|0xff)&0xf1;//与运算
if(d1==2) P0=(P0|0xff)&0xf2;
if(d1==3) P0=(P0|0xff)&0xf4;
if(d1==4) P0=(P0|0xff)&0xf8;
P2=Seg[d2];
}
int keyscan() //键盘扫描函数
{
int t=0;
if(p17==0) { t=1; jps=1;}
return(t);
}
void ledshow()//
{
LED(1,11);
delay(8);
LED(2,second/10);
delay(8);
LED(3,second%10);
delay(8);
LED(4,11);
delay(8);
}
void Time_fun() interrupt 1 //10ms中断函数
{
j++;
if(j==30) j=0;
if(k==30) { k=0; p16=1; }
else k++;
TH0=(0xffff-10000)/256; //10ms
TL0=(0xffff-10000)%256; //10ms
count_10ms++;
if(count_10ms==100)
{count_10ms=0;second--;}
if(second<0)
{
second=15;
turn=!turn;
k=0;
p16=0; //提示音
}
if((ks==1)&&(keyscan()==1)&&(key_do==0))
{
P1=0x89;
while(1); // 按键报警
key_do=1;
}
ks=keyscan();
if(ks==0) key_do=0;
}
main()
{
TMOD=0x01; //Time0为16计数器
TH0=(0xffff-10000)/256;
R0=1; //打开定时器
ITL0=(0xffff-10000)%256;
TE=0x82; //EA=1 ET0=1 打开中断
while(1)
{
ledshow();
if(turn==0 && second>3) P1=(P1&0xc0)|0x21; // 东西红灯,南北绿灯
else if(turn==0 && second<=3)
{
if(j<15) P1=(P1&0xc0)|0x31; // 东西红灯,南北绿灯闪黄灯亮
else P1=(P1&0xc0)|0x11;
}
if(turn==1 && second>3) P1=(P1&0xc0)|0x0c; // 东西绿灯,南北红灯
else if(turn==1 && second<=3)
{
if(j<15) P1=(P1&0xc0)|0x0e; // 东西绿灯闪、黄灯亮,南北红灯
else P1=(P1&0xc0)|0x0a;
}
// P1=P1|0xc0;
}
}
复制代码
程序.zip
2024-8-6 23:50 上传
点击文件名下载附件
下载积分: 黑币 -5
55.46 KB, 下载次数: 1, 下载积分: 黑币 -5
交通灯
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1