交通灯方案设计书实验报告硬件原理图 程序Word文档下载推荐.docx
- 文档编号:21292900
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:24
- 大小:418.58KB
交通灯方案设计书实验报告硬件原理图 程序Word文档下载推荐.docx
《交通灯方案设计书实验报告硬件原理图 程序Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《交通灯方案设计书实验报告硬件原理图 程序Word文档下载推荐.docx(24页珍藏版)》请在冰豆网上搜索。
时钟部分:
当秒的
个位计时到了10,则秒个位清0,同时十位进一,以此类推;
倒
计时部分显示是则递减显示。
此过程通过判断语句实现。
5、.灯状态控制
灯的状态通过键盘扫描控制。
状态固定键按下时,关闭定
时器1;
再次按下此键时,打开定时器。
状态选择键按下时,程
序跳至下一个状态的程序控制部分,从而实现状态改变。
三、实现功能说明
基本功能:
(1)AB干道分别有两组红黄绿灯,各自的亮灯时间与状态由键盘
控制。
(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)这次设计时间很长,期间,我们自学了单片机教程,
keil2、proteus、protel99se等软件,自学能力达
到很大的提高
(2)本次设计过程中,我们充分体会到了团体合作的重要
性。
通过我们三个人的合理分工,设计过程完成的比
较成功
(3)通过本次设计,我们学到了对复杂程序模块化的编程
方法和对其进行检查与修改方法。
(4)本次设计过程中,我们的动手能力得到很大的提高,
例如说焊接技术、对电路板的总体规划,等等。
七、参考资料
<
单片机原理与应用及C51程序设计>
>
清华大学大学出版社
附:
软件C程序
//********************实验板上完整程序
#include"
reg52.h"
#defineuintunsignedint
#defineucharunsignedchar
ucharaa,bb,cc,dd,ee,ff,a1,a3,con32,con31。
uchartemp,ye,shi1,ge1,shi2,ge2,shi,ge,flag。
intb,c=0,d=0,m=1,t。
uintn1,n2。
sbitp0_3=P0^3。
//A干道黄灯
sbitp0_2=P0^2。
//A干道红灯
sbitp0_4=P0^4。
//A干道绿灯
sbitp0_6=P0^6。
//B干道黄灯
sbitp0_7=P0^7。
//B干道红灯
sbitp0_5=P0^5。
//B干道绿灯
sbitwela=P3^0。
sbitdula=P3^1。
sbitp3_2=P3^2。
sbitp3_3=P3^3。
uchardatatimedate1[3]={0x00,0x00,0x00}。
//显示缓冲区两位数字
uchardatatimedate2[3]={0x00,0x00,0x00}。
uchardatatimedate3[7]={0x00,0x00,0x00,0x00,0x00,0x00,0x00}。
charcodewei[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}。
//位扫描
sbitkey0=P2^6。
//绿灯控制键
sbitkey1=P2^5。
//黄灯控制键
sbitkey2=P2^4。
//加一键
sbitkey3=P2^3。
//减一键
sbitkey4=P2^2。
//保存状态
sbitkey5=P2^1。
//状态改变
sbitkey6=P2^0。
//时钟控制键
uchardatacon3=0x00。
uchardatacon=0x00。
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x40}。
voiddisplay(ucharshi,ucharge)。
voiddisplay3(ucharaa,ucharbb,ucharcc,uchardd,ucharee,ucharff)。
voiddelay(uintz)。
voidinit()。
keyscan1()。
keyscan2()。
keyscan3()。
voidmain()
{
init()。
//初始化子程序
while
(1)
{
//*************************键盘扫描控制程序
if(con==0&
&
ye==0)
keyscan3()。
display3(aa,bb,cc,dd,ee,ff)。
if(con3==0&
ye==0)//调用键盘扫描程序
{keyscan1()。
shi1=n1/10。
ge1=n1%10。
display(shi1,ge1)。
}
con3==0)
{keyscan2()。
shi2=n2/10。
ge2=n2%10。
display(shi2,ge2)。
if((con>
=3&
ye==0)||(ye>
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。
//关闭计数器,下面elseif语句不执行,直接到delay()显示语句
elseTR0=1。
}
//****************************状态改变,进入下一个状态
if(key5==0)
while(key5==0)。
m++。
c++。
if(c%2)temp=n2。
elsetemp=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。
elsep0_4=1。
}//A绿灯
p0_7=0。
//B红灯
delay
(1)。
elseif(m%4==2)
{p0_4=1。
if(a1/10==0)p0_3=0。
elsep0_3=1。
//A黄灯
elseif(m%4==3)
{p0_3=1。
p0_7=1。
p0_2=0。
//A红灯
3)p0_5=0。
else{if(a1/10==0)p0_5=0。
elsep0_5=1。
}//B绿灯
elseif(m%4==0)
{p0_5=1。
if(a1/10==0)p0_6=0。
elsep0_6=1。
//B黄灯
//*****************************************倒计时
if(con>
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。
elsetemp=n1。
}
}
display(shi,ge)。
}
b=0。
}
voiddelay(uintz)
{
uintx,y。
for(x=z。
x>
0。
x--)
for(y=110。
y>
y--)。
}
voiddisplay(ucharshi,ucharge)
{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]。
p3_2=0。
voiddisplay3(ucharaa,ucharbb,ucharcc,uchardd,ucharee,ucharff)
{p3_2=1。
p3_3=1。
P1=0xff。
wela=1。
P1=wei[7]。
P1=0x00。
P1=table[aa]。
P1=table[bb]。
P1=0xff。
wela=1。
P1=wei[6]。
P1=table[10]。
P1=wei[5]。
P1=table[cc]。
P1=wei[4]。
P1=table[dd]。
P1=wei[3]。
P1=wei[2]。
P1=table[ee]。
P1=wei[1]。
P1=table[ff]。
P1=wei[0]。
voidinit()
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)。
con++。
//b++。
if(con!
=0)//con=1||2时的加一运算
if(key2==0)
{
while(key2==0)。
delay(12)。
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)
while(key3==0)。
timedate1[con]--。
if(timedate1[con]==255)timedate1[con]=9。
ge1=timedate1[2]。
display(shi1,ge1)。
n1=10*shi1+ge1。
//*********************黄灯控制键扫描
keyscan2()
if(key1==0)
b=0。
while(key1==0)。
ye++。
b++。
if(ye!
if(key2==0)
timedate2[ye]++。
if(timedate2[ye]>
9)timedate2[ye]=0。
shi2=timedate2[1]。
ge2=timedate2[2]。
display(shi2,ge2)。
n2=10*shi2+ge2。
timedate2[ye]--。
if(timedate2[ye]==255)timedate2[ye]=9。
shi2=timedate2[1]。
ge2=timedate2[2]。
display(shi2,ge2)。
n2=10*shi2+ge2。
voidtimer0()interrupt1
a1++。
//******************时钟控制键扫描程序
keyscan3()
if(key6==0)
while(key6==0)。
con3++。
TR1=0。
if(con3==5){TR0=1。
con3=0。
}
if(con3!
timedate3[con3]++。
if(con3==1)con31=2。
elseif(con3==2)con31=9。
elseif(con3==3)con31=5。
elseif(con3==4)con31=9。
if(timedate3[con3]>
con31)timedate3[con3]=0。
if(timedate3[1]==2&
timedate3[2]==4)
{timedate3[2]=0。
timedate3[1]=0。
=0)
while(key3==0)。
timedate3[con3]--。
if(con3==1)con32=2。
elseif(con3==2)con32=9。
elseif(con3==3)con32=5。
elseif(con3==4)con32=9。
if(timedate3[con3]==255)timedate3[con3]=con32。
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。
voidtime_intt3(void)interrupt3
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[1]=0。
timedate3[2]=0。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 交通灯方案设计书实验报告硬件原理图 程序 交通灯 方案设计 实验 报告 硬件 原理图