发作品签到
标准版

交通灯2

工程标签

61
0
0
1

简介

51单片机,交通灯电路,STC-8H8K

简介:51单片机,交通灯电路,STC-8H8K

开源协议

GPL 3.0

创建时间:2024-12-27 11:13:25更新时间:2025-03-26 06:06:20

描述

一、设计要求:
1、用单片机stc89C52 设计一个交通灯系统,并用数码管显示时间,LED指示通行。

2、设计电路图,pcb图等

3、数码管用三极管驱动。

4、按键功能:禁行、东西通行、南北通行、时间加、时间减、切换、确定。
二、电路主要组成:
1、单片机最小系统
2、8段数码管
3、红黄绿LED
4、数码管的三极管驱动电路
三、主要功能:
1、采用四方向数码管设计,更加符合真实的交通信号灯设计。
2、左侧按键从上到下依次为:设置时间、时间加、时间减、紧急模式。
3、紧急模式:当救护车、救火车等通过时,按下“紧急模式”按键,包括四个方向全部亮红灯,允许东西方向通行、允许南北方向通行、全部绿灯。
4、设定时间时,第一次按下“设置时间”键,设定东西方向的倒计时时间,再次按下“设置时间”键,则设定南北方向的倒计时时间,再次按下则退出设置状态,开始运行。
编码:
#include "2.h"
#define uchar unsigned char
sbit BR=P1^0;sbit BY=P1^1;sbit BG=P1^4;
sbit XG=P1^5;sbit XY=P1^6;sbit XR=P1^7;
sbit NR=P3^4;sbit NG=P3^2;sbit NY=P3^3;
sbit DR=P3^7;sbit DY=P3^6;sbit DG=P3^5;
sbit DX1=P0^1;sbit DX2=P0^0;sbit BN1=P0^2;sbit BN2=P0^3;
sbit key1=P4^1;sbit key2=P4^2;
uchar shu[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar a;
uchar DXyellowstate=0;
uchar DXyellowcounter=0;
uchar NByellowstate=0;
uchar NByellowcounter=0;
void Delay5ms(void) //@11.0592MHz
{
unsigned char data i, j;

i = 54;
j = 199;
do
{
	while (--j);
} while (--i);

}
void GPIO()
{
P0M0=0xff;//1111 1110
P0M1=0x00;//0000 0000
P1M0=0x00;
P1M1=0x00;
P2M0=0xff;
P2M1=0x00;
P3M0=0x00;
P3M1=0x03;
P4M0=0x00;
P4M1=0x00;
}
void key()
{
if(key1==0)
{
DX2=DX1=1;
BN1=BN2=0;
P2=0xc9;
BG=BY=BR=DG=DY=DR=XG=XY=XR=NG=NY=NR=1;
BG=NG=DR=XR=0;
while(key1==0);BG=NG=DR=XR=1;
}
else if(key2==0)
{
BN1=BN2=1;
DX1=DX2=0;
P2=0xb6;//1011 0110
BG=BY=BR=DG=DY=DR=XG=XY=XR=NG=NY=NR=1;
BR=NR=DG=XG=0;
while(key2==0);BR=NR=DG=XG=1;
}
else;
}

void shuang(unsigned char x,m)
{
BN2=1;BN1=1;
P2=shu[x/10];
BN2=0;
Delay5ms();
BN2=1;
P2=shu[x%10];
BN1=0;
Delay5ms();
BN1=1;
/////////////////////
DX2=1;DX1=1;
P2=shu[m/10];
DX2=0;
Delay5ms();
DX2=1;
P2=shu[m%10];
DX1=0;
Delay5ms();
DX1=1;
}
void dingshi()
{
unsigned char nb,dx,s;
for(nb=33;nb>0;nb--)
{
for(s=0;s<=70;s++)//一秒等于1000000微秒,这里是70而不是100是因为运行到定时器时是有延时的
{
if(nb>3)
{
dx=nb-3;
BR=NR=DG=XG=0;
}
else
{
dx=nb;
DG=XG=1;
BR=NR=DY=XY=0;
if(DXyellowcounter<35) //当DXyellowcounter小于一半
{
if(DXyellowcounter<35) //再次判断
{
DY = DXyellowstate; //使得两路黄灯等于DXyellowstate=0
XY = DXyellowstate;
}
else
{
DY = !DXyellowstate; //if大于或等于一半对两路黄灯进行取反=1
XY = !DXyellowstate;
}
DXyellowcounter++; //DXyellowcounter+1
}
else //if大于或等于一半
{
DXyellowcounter=0; //重置DXyellowcounter=0
DXyellowstate=!DXyellowstate;
}
/****************************************************************************
根据DXyellowcounter的值来控制DY和XY引脚的状态,当DXyellowcounter小于35时,
DY和XY等于DXyellowstate;当DXyellowcounter大于等于35时,DY和XY取反。
并且每次循环DXyellowcounter会自增,当DXyellowcounter达到70时会重置为0,
并对DXyellowstate取反。
****************************************************************************/
}
while(TF0==0);
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
TF0=0;
shuang(nb,dx);
key();
}
BR=NR=DY=XY=DG=XG=1;
}
//////////////////////////////////////////////
for(dx=33;dx>0;dx--)
{
for(s=0;s<=70;s++)
{
if(dx>3)
{
nb=dx-3;
DR=XR=NG=BG=0;
}
else if(dx<=3)
{
nb=dx;
NG=BG=1;
XR=DR=BY=NY=0;
if(NByellowcounter<35)
{
if(NByellowcounter<35)
{
BY = NByellowstate;
NY = NByellowstate;
}
else
{
BY = !NByellowstate;
NY = !NByellowstate;
}
NByellowcounter++;
}
else
{
NByellowcounter=0;
NByellowstate=!NByellowstate;
}
}
while(TF0==0);
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
TF0=0;
shuang(nb,dx);
key();
}
DR=XR=NY=BY=NG=BG=1;
}
}
void main()
{
GPIO();
TMOD=0x01; //1报备:使用定时器模式1(16位不自动重装,溢出时定时器1将从0开始计数0)
TH0=(65536-10000)/256; //2设置初值装入初值高八位
TL0=(65536-10000)%256; // 装入初值低八位
TR0=1; //启动定时器0
ET0=1;
key1=key2=1;
while(1)
{
dingshi();
}
}

设计图

原理图
PCB

BOM

IDNameDesignatorFootprintQuantity
1LED-TH-3mm_GBG,DG,NG,XGLED0805-RD4
2LED-TH-3mm_RBR,DR,NR,XRLED0805-RD4
3SEG-TH_0.56×2BSHU,DSHU,NSHU,XSHULED-SEG-TH_10P-L25.0-W19.0-P2.54-S15.24-BL4
4204-10UYC/S530-A3-LBY,DY,NY,XYLED0805-RD4
50.1uC1,C3RAD-0.12

附件

序号文件名称下载次数
1
1111.png
1
2
屏幕截图 2025-01-07 152335.png
0
3
屏幕截图 2025-01-07 090424.png
0
4
010.mp4
0
克隆工程
添加到专辑
0
0
分享
侵权投诉

工程成员

评论

全部评论(1)
按时间排序|按热度排序
粉丝0|获赞0
相关工程
暂无相关工程

底部导航