交通灯设计实验报告(硬件原理图+程序)
编辑整理:
尊敬的读者朋友们:
这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望(交通灯设计实验报告(硬件原理图+程序))的内容能够给您的工作和学习带来便利。同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。
本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快 业绩进步,以下为交通灯设计实验报告(硬件原理图+程序)的全部内容。
交通灯设计实验报告(硬件原理图+程序)
交通灯信号灯自动控制系统
交通灯原理图 一、 系统的基本功能要求 以秒为计时单位,两位数码管以十进制递减计数形式作定时显示,在递减计数回零瞬间完成换灯操作。
(2) 通过键盘红黄绿三色信号灯所亮时间在0~99秒内任意设定。 (3) 十字路口的通行起始状态可人工设定,运行中可通过人工干预使
十字路口通行状态固定于任何一种工作模式。
(1)
二、设计思路及总体框图,方案比较
硬件设计
1.系统总体框图
交通灯设计实验报告(硬件原理图+程序)
2。电路设计
(1) 显示模块 倒计时 与 时钟
说明:
⑴共阴极两位数码管用于倒计时 ;
段选端由锁存器控制,位选端用P3_0与P3_1控制 ⑵两个四位共阴极数码组成八位数码管 用于时钟显示
段位选分别由两个锁存器控制 (2)红绿灯模块
交通灯设计实验报告(硬件原理图+程序)
说明:
⑴ 图为两方向的红绿黄灯 ,分别接在P0口上,由P0口控制
⑵ 51系列单片机的P0口内部没有集成上拉电阻,加上拉就是提高 驱动能力,必须要通过上拉电阻接VCC。上拉电阻一般接1K的.
(3) 键盘模块
说明
⑴ P2键控制功能说明:
P2^6 key0绿灯位选择
P2^5 key1黄灯位选择 P2^4 key2 加1操作 P2^3 key3 减1操作
P2^2 key4 信号灯状态固定 P2^1 key5 信号灯状态切换 P2^0 key6时钟时分秒设置键
交通灯设计实验报告(硬件原理图+程序)
⑵ 键盘加上拉电阻为了提高驱动能力
3。复位电路:
4.时钟电路:
说明 :用12M晶振时 电容要选择30p
交通灯设计实验报告(硬件原理图+程序)
软件部分
1、 主程序流程图
2、时钟初值控制子程序
3、绿灯,黄灯初值设置子程序
4、时钟控制与倒计时控制 时钟,倒计时初值通过键盘输入。倒计时使用52单片机 内部定时器1实现计数,时钟控制部分是使用定时、计数器2 实现计时,以秒为基本单位在数码管中显示。时钟部分:当秒的 个位计时到了10,则秒个位清0,同时十位进一,以此类推;倒 计时部分显示是则递减显示。此过程通过判断语句实现.
5、。灯状态控制 灯的状态通过键盘扫描控制。状态固定键按下时,关闭定 时器1;再次按下此键时,打开定时器。状态选择键按下时,程 序跳至下一个状态的程序控制部分,从而实现状态改变。 三、 实现功能说明 基本功能:
(1)A B干道分别有两组红黄绿灯,各自的亮灯时间与状态由键盘 控制。
(2)两位数码管用于倒计时,记录各个灯的亮灯时间,定时时间由 键盘设定。
(3)十字路口通行状态可由键盘切换。 发挥部分功能:
(1) 由八位数码管显示,初试时间可由键盘设定,且在05:
00~23:00黄灯闪烁显示。
(2) 绿灯倒计时最后三秒和黄灯显示时闪烁显示(频率1HZ)。 (3)人行道的红绿灯配合车辆的红绿灯同时工作。
交通灯设计实验报告(硬件原理图+程序)
四、 所用器件与功能 (1) 共阴数码管10个:8个显示时间,2个显示倒计时时间 (2) 红黄绿发光二极管个4个:模拟十字路口信号灯.令各
加1个人行道上的红灯和绿灯
(3) 74HC573锁存器2个:段码和位选锁存各一个
(4) STC单片机一块 按键8个 12M晶振一个 排线 排针
电阻 电容若干
五、 故障及问题分析 (1)问题:每次通电后都要在十八、十十九口触发一下才能正
常工作。
分析:晶振电路与单片机距离过远,输入噪声很大
解决:把晶振电路改在紧挨单片机位置就可排除干扰。
(2) 共阳数码管需要接三极管放大驱动电流,为节约成本选用
共阴数码管.
(3) 键盘扫描程序中加了按键前沿消抖延时,但按键不够灵敏
加了后延消抖后使得按键足够灵敏.
(4) 在段锁存器给各个数码管送段码时相互之间有影响,在显
示函数中加消影程序解决相互之间的影响。
(5) 在第一次焊接时一次性焊接完,调试时无法检查错误,而
在第二次焊接时采用边调试边焊接的方法,加快速度,提 高了准确度.
(6) 杜邦线 数码管、锁存器等接线比较多,用单根导线焊接
容易相互连接且不易检查错误,用杜邦线便于检查和模块 化调试。
交通灯设计实验报告(硬件原理图+程序) 六、 心得体会 本次设计,我们花了不少时间和精力,但收获很大:
(1) 这次设计时间很长,期间,我们自学了单片机教程,
keil 2、proteus、protel 99se等软件,自学能力达 到很大的提高
(2)本次设计过程中,我们充分体会到了团体合作的重要
性。通过我们三个人的合理分工,设计过程完成的比 较成功
(3) 通过本次设计,我们学到了对复杂程序模块化的编程
方法和对其进行检查与修改方法。
(4)本次设计过程中,我们的动手能力得到很大的提高,
例如说焊接技术、对电路板的总体规划,等等.
七、 参考资料
〈<单片机原理与应用及C51程序设计〉>
清华大学大学出版社
附:软件C程序
//********************实验板上完整程序
#include\"reg52.h\"
#define uint unsigned int #define uchar unsigned char
交通灯设计实验报告(硬件原理图+程序)
uchar aa,bb,cc,dd,ee,ff,a1,a3,con32,con31; uchar temp,ye,shi1,ge1,shi2,ge2,shi,ge,flag; int b,c=0,d=0,m=1,t; uint n1,n2;
sbit p0_3=P0^3; //A干道黄灯 sbit p0_2=P0^2; //A干道红灯 sbit p0_4=P0^4;
//A干道绿灯
sbit p0_6=P0^6; //B干道黄灯 sbit p0_7=P0^7;
//B干道红灯
sbit p0_5=P0^5; //B干道绿灯 sbit wela=P3^0; sbit dula=P3^1; sbit p3_2=P3^2; sbit p3_3=P3^3;
uchar data timedate1[3]={0x00,0x00,0x00};//显示缓冲区两位数字
uchar data timedate2[3]={0x00,0x00,0x00};//显示缓冲区两位数字
uchar data timedate3[7]={0x00,0x00,0x00,0x00,0x00,0x00,0x00};//显示缓冲区两位数字
char code wei[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位扫描 sbit key0=P2^6;
//绿灯控制键
交通灯设计实验报告(硬件原理图+程序)
sbit key1=P2^5; //黄灯控制键 sbit key2=P2^4;
//加一键
sbit key3=P2^3; //减一键 sbit key4=P2^2; //保存状态 sbit key5=P2^1; //状态改变 sbit key6=P2^0;
//时钟控制键
uchar data con3=0x00; uchar data con=0x00; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x40};
void display(uchar shi,uchar ge);
void display3(uchar aa,uchar bb,uchar ee,uchar ff); void delay(uint z); void init(); keyscan1() ; keyscan2() ; keyscan3() ; void main() {
cc,uchar dd,uchar 交通灯设计实验报告(硬件原理图+程序)
init();//初始化子程序 while(1) {
//*************************键盘扫描控制程序
if(con==0&&ye==0)
keyscan3();
display3(aa,bb,cc,dd,ee,ff);
if(con3==0&&ye==0) //调用键盘扫描程序
);
shi1=n1/10
;
{keyscan1(ge1=n1%10;display(shi1,ge1);}
if(con==0&&con3==0)
{keyscan2();shi2=n2/10;ge2=n2%10;display(shi2,ge2);}
if((con〉=3&&ye==0)||(ye〉=3&&con==0))display(0,0);
P0=0xff;delay(1);
// ***************************保存当前状态
if(key4==0) {
delay(12);
交通灯设计实验报告(硬件原理图+程序)
while(key4==0) ; delay(12); d++;
if(d%2)TR0=0;//关闭计数器,下面else if语句不执行,直接到delay()显示语句 else TR0=1;
}
//****************************状态改变,进入下一个状态 if(key5==0) { delay(12);
while(key5==0) ; delay(12); m++;c++; if(c%2) temp=n2; else temp=n1;
}
//****************************状态选择
if(t〈5||t〉=23) {
if(a1/10==0){p0_3=0;p0_6=0;}
交通灯设计实验报告(硬件原理图+程序)
}
else {p0_3=1;p0_6=1;} delay(1);
else {
if(m%4==1)
{p0_6=1;p0_2=1;
if(temp〉3)p0_4=0;else {if(a1/10==0)p0_4=0;else p0_4=1;} //A绿灯
p0_7=0; //B红灯 delay(1);}
else if(m%4==2)
{p0_4=1;
if(a1/10==0)p0_3=0; else p0_7=0; //B红灯 delay(1);}
p0_3=1;//A黄灯
else if(m%4==3)
{p0_3=1;p0_7=1;
p0_2=0; //A红灯
if(temp〉3)p0_5=0; else{if(a1/10==0)p0_5=0;else p0_5=1;} //B绿灯
交通灯设计实验报告(硬件原理图+程序)
delay(1);}
else if(m%4==0)
{p0_5=1;
p0_2=0; //A红灯
//B黄灯
if(a1/10==0)p0_6=0; else p0_6=1;
delay(1);}
}
//*****************************************倒计时
if(con>=3&&ye〉=3)
{
TR0=1;
if (b!=0) temp=n1; //只有当扫描
到有输入时temp才等于n,否则为自减后的值
shi=temp/10; ge=temp%10; if(a1==20) {
a1=0; temp—-;
交通灯设计实验报告(硬件原理图+程序)
}
if(temp==-1)
{ c++; //进入下一个状态, m++; //进入下一个状态, }
if(c%2) temp=n2; else temp=n1;
赋倒计时起始值 赋灯的状态
display(shi,ge);
}
}
}
b=0;
void delay(uint z) { }
uint x,y;
for(x=z;x〉0;x——)
for(y=110;y>0;y-—);
交通灯设计实验报告(硬件原理图+程序)
void display(uchar shi,uchar ge) { P1=0x00; wela=0;
p3_2=1;
dula=1; P1=table[shi];
dula=0;
p3_3=0;
delay(1);
p3_3=1; dula=1;
P1=table[ge]; dula=0; p3_2=0; delay(1); p3_2=1;
}
交通灯设计实验报告(硬件原理图+程序)
void display3(uchar aa,uchar bb,uchar cc,uchar dd,uchar ee,uchar ff) { p3_2=1;p3_3=1;
P1=0xff;
wela=1; P1=wei[7]; wela=0; P1=0x00; dula=1;
P1=table[aa]
dula=0;
delay(1);
dula=1; P1=table[bb]; dula=0; P1= 0xff; wela=1; P1=wei[6]; wela=0;
delay(1);
; 交通灯设计实验报告(硬件原理图+程序)
dula=1;
P1=table[10];
dula=0; P1=0xff; wela=1; P1= wei[5]; wela=0;
delay(1);
dula=1;
P1=table[cc];
dula=0; P1=0xff; wela=1; P1= wei[4]; wela=0;
delay(1);
dula=1; P1=table[dd]; dula=0; P1= 0xff;
交通灯设计实验报告(硬件原理图+程序)
wela=1; P1=wei[3]; wela=0; delay(1);
dula=1;
P1=table[10];
dula=0; P1=0xff; wela=1; P1= wei[2]; wela=0;
delay(1);
dula=1;
P1=table[ee];
dula=0; P1=0xff; wela=1; P1= wei[1]; wela=0;
delay(1);
交通灯设计实验报告(硬件原理图+程序)
}
dula=1; P1=table[ff]; dula=0; P1= 0xff; wela=1; P1=wei[0]; wela=0; delay(1);
void init() {
wela=0; dula=0;
TH1=(65536—50000)/256; TL1=(65536-50000)%256; TMOD=0x11; EA=1; ET1=1;TR1=0;
TH0=(65536—50000)/256;
交通灯设计实验报告(硬件原理图+程序)
}
TL0=(65536-50000)%256; ET0=1;TR0=0;
//************************绿灯键盘扫描程序 keyscan1() {
if(key0==0)
{
//b=0;
delay(12); while(key0==0) ;
delay(12);
con++;
//b++; }
if(con!=0) //con=1 if(key2==0) { delay(12);
while(key2==0)
delay(12);
2时的加一运算 ||;交通灯设计实验报告(硬件原理图+程序)
timedate1[con]++;
if(timedate1[con]>9)timedate1[con]=0;
shi1=timedate1[1]; ge1=timedate1[2];
display(shi1,ge1);
n1=10*shi1+ge1;
}
if(con!=0) //con=1||2时的减一运算
if(key3==0)
{
delay(12);
while(key3==0) ; delay(12);
timedate1[con]——;
if(timedate1[con]==255)timedate1[con]=9;
shi1=timedate1[1];
ge1=timedate1[2];
display(shi1,ge1);
n1=10*shi1+ge1;
}
交通灯设计实验报告(硬件原理图+程序)
}
//*********************黄灯控制键扫描 keyscan2() {
if(key1==0)
{
b=0;
delay(12);
while(key1==0) ; delay(12);
ye++;
b++;
}
if(ye!=0) //con=1||2时的加一运算
if(key2==0)
{
delay(12); while(key2==0) ; delay(12); timedate2[ye]++;
if(timedate2[ye]>9)timedate2[ye]=0;
交通灯设计实验报告(硬件原理图+程序)
shi2=timedate2[1];
ge2=timedate2[2];
display(shi2,ge2) ; n2=10*shi2+ge2;
}
if(ye!=0) //con=1||2时的减一运算 if(key3==0) { delay(12);
while(key3==0) ; delay(12);
timedate2[ye]—-;
if(timedate2[ye]==255)timedate2[ye]
shi2=timedate2[1];
ge2=timedate2[2];
display(shi2,ge2);
n2=10*shi2+ge2;
}
}
=9;
交通灯设计实验报告(硬件原理图+程序)
void timer0() interrupt 1 { }
TH0=(65536-50000)/256; TL0=(65536—50000)%256; a1++;
//******************时钟控制键扫描程序 keyscan3() {
if(key6==0)
{
delay(12);
while(key6==0) ; delay(12);
con3++;
TR1=0;
if(con3==5){TR0=1;con3=0; }
}
if(con3!=0) //con=1||2时的加一运算
if(key2==0)
交通灯设计实验报告(硬件原理图+程序)
{
delay(12); while(key2==0) ; delay(12);
timedate3[con3]++; if(con3==1)con31=2; else if(con3==2)con31=9; else if(con3==3)con31=5; else if(con3==4)con31=9;
if(timedate3[con3]>con31)timedate3if(timedate3[1]==2&&timedate3[2]==4)
{timedate3[2]=0;timedate3[1]=0;}
[con3]=0;
}
if(con3!=0)
if(key3==0) { }
delay(12); while(key3==0) ; delay(12);
timedate3[con3]-—;
交通灯设计实验报告(硬件原理图+程序)
if(con3==1) con32=2; else if(con3==2) con32=9; else if(con3==3)
con32=5;
else if(con3==4) con32=9;
if(timedate3[con3]==255)timedate3[con3]=con32; if(timedate3[1]==2&&timedate3[2]==9)
timedate3[2]=3;
aa=timedate3[1]; //小时的十是位 bb=timedate3[2]; cc=timedate3[3]; dd=timedate3[4]; ee=timedate3[5]; ff=timedate3[6]; t=10*aa+bb;
}
void time_intt3(void) interrupt 3 { TH0=(65536—50000)/256;
TL0=(65536-50000)%256;
交通灯设计实验报告(硬件原理图+程序)
a3++; if(a3==20) {
a3=0;timedate3[6]++; if(timedate3[6]==10)
{timedate3[6]=0;timedate3[5]++;}
if(timedate3[5]==6)
{timedate3[5]=0;timedate3[4]++;}
if(timedate3[4]==10)
{timedate3[4]=0;timedate3[3]++;}
if(timedate3[3]==6)
{timedate3[3]=0;timedate3[2]++;}
if(timedate3[2]==10)
{timedate3[2]=0;timedate3[1]++;}
if(timedate3[1]==2&&timedate3[2]==4)
{timedate3[1]=0;timedate3[2]=0;}
aa=timedate3[1]; bb=timedate3[2]; cc=timedate3[3]; dd=timedate3[4]; ee=timedate3[5]; ff=timedate3[6];
交通灯设计实验报告(硬件原理图+程序)
}
t=10*aa+bb;
}
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- dcrkj.com 版权所有 赣ICP备2024042791号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务