单片机交通灯设计.docx
- 文档编号:30458686
- 上传时间:2023-08-15
- 格式:DOCX
- 页数:18
- 大小:82.72KB
单片机交通灯设计.docx
《单片机交通灯设计.docx》由会员分享,可在线阅读,更多相关《单片机交通灯设计.docx(18页珍藏版)》请在冰豆网上搜索。
单片机交通灯设计
单片机综合实验报告
题目:
模拟真实交通灯
班级:
姓名:
学号:
指导老师:
时间:
一、实验内容:
用8255芯片的PA、PB口低四位做输出口,控制十二个发光二极管燃灭,模拟十字路口交通灯管理,并利用数码显示器进行倒计时显示(采用单片机内部定时器定时)。
通过外部中断能使交通灯暂停运行,并点亮4个红灯。
通过16*16点阵中的图形模拟控制行人过马路的人形“走”、“停”指示灯,可参考下图所示。
选做增加项目:
在交通灯开始之前可通过开关对红绿灯亮灭时间的初始值进行增、减设定或者交通灯暂停时加上乐曲报警。
二、实验电路及功能说明
1.实验电路(只连粗实线部分):
74LS138译码器电路(选做部分)
8255与发光二极管连线图
数码LED显示器电路(不需接线)
16×16LED点阵显示电路(选做部分)
2.说明:
交通灯亮灭过程同“8255控制交通灯实验”,倒计时显示只需两位数(0~99),用定时器定时进行倒计时,每秒钟减1。
在16*16点阵中显示的人形“走”、“停”标志可自定义,由专门软件可转换为相应显示代码,不需自己推理。
三、实验程序流程图:
主程序:
子程序:
四、实验结果分析:
其中0代表灯灭,1代表灯亮。
状态
东
南
西
北
黄
绿
红
黄
绿
红
黄
绿
红
黄
绿
红
P1.0
P1.1
P1.2
P1.4
P1.5
PA6
P1.0
P1.1
P1.2
P1.4
P1.5
P1.5
该四
个工
作状
态按
此次
序将
重复
出现
南北红灯亮,东西绿灯亮
0
1
0
0
0
1
0
1
0
0
0
1
南北红灯亮
,东西黄灯亮
1
0
0
0
0
1
1
0
0
0
0
1
南北绿灯亮,东西红灯亮
0
0
1
0
1
0
0
0
1
0
1
0
南北黄灯亮,东西红灯亮
0
0
1
1
0
0
0
0
1
1
0
0
五、心得体会:
通过学校给我们安排了二个星期的设计,我通过所学的知识,利用单片机控制设计了一个交通灯控制系统,我对单片机有了更深的体会。
我了解和掌握了一些简单的编程思想和对I/O口的使用。
这次实训通过单片机的I/O口来控制交通灯。
虽然课程设计的速度慢了点,但还是很顺利的,通过这次的实践,对单片机的I/O口的使用的条件有更深的理解,对单片机的各个管脚功能的理解也加深了,以及在常用编程设计思路技巧(特别是汇编语言)的掌握方面都能向前迈了一大步。
这次的课程设计让我把单片机的理论知识用在实践中,实现了理论和实践相结合,从中更懂得理论是实践的基础,实践有着能检验理论的正确性,让我受誉非浅,对我以后参加工作或者继续学习将会产生巨大的帮助和影响。
同时感谢高老师的辛勤指导!
六、程序清单:
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
#defineROW1XBYTE[0XFFE3]
#defineROW2XBYTE[0XFFE0]
#defineCOL1XBYTE[0XFFE2]
#defineCOL2XBYTE[0XFFE1]
#definePAXBYTE[0xffd8]
#definePBXBYTE[0xffd9]
#defineCTLXBYTE[0xffdb]
#defineSEGXBYTE[0xffdc]
#defineBITXBYTE[0xffdd]
sbitKEY1=P1^0;
sbitKEY2=P1^1;
sbitKEY3=P1^2;
sbitP32=P3^2;
uchartongBu;
uintaa,bb;
ucharcodeewTable[]={0xb6,0x75,0xf3,0xf7,0xae,0x9e,0xbe};
ucharcodensTable[]={0x0d,0x0d,0x0c,0x0d,0x0b,0x07,0xf};
//uchartempa,tempb;
inttime=1,cnt,change,intflag,inttime=1;
inttempseg;
ucharkey1=0;
ucharbuffer[]={0,0,0,0,0,0};
uchartable[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};
/*--行走--*/
/*--宽度x高度=16x16--*/
ucharcodeled1[]={0x01,0x80,0x02,0x40,0x02,0x40,0x01,0x80,0x03,0xC0,0x06,0x60,0x0A,0x50,0x0A,0x50,
0x0B,0xD0,0x12,0x48,0x02,0x40,0x02,0x60,0x04,0x20,0x04,0x20,0x08,0x20,0x18,0x60};
/*--停止--*/
/*--宽度x高度=16x16--*/
ucharcodeled2[]={0x01,0x80,0x02,0x40,0x02,0x40,0x01,0x80,0x07,0xE0,0x7E,0x7E,0x02,0x40,0x02,0x40,
0x03,0xC0,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x03,0xC0};
/*--文字:
高--*/
/*--Fixedsys12;此字体下对应的点阵为:
宽x高=16x16--
ucharcodeled2[]={0x02,0x00,0x01,0x00,0xFF,0xFE,0x00,0x00,0x0F,0xE0,0x08,0x20,0x0F,0xE0,0x00,0x00,
0x7F,0xFC,0x40,0x04,0x4F,0xE4,0x48,0x24,0x48,0x24,0x4F,0xE4,0x40,0x14,0x40,0x08};*/
voiddelay()
{
charn;
for(n=50;n>0;n--);
}
ucharchangeleft(ucharled)
{
uchartemp;
temp=0;
temp|=(led<<7)&0x80;
temp|=(led<<5)&0x40;
temp|=(led<<3)&0x20;
temp|=(led<<1)&0x10;
temp|=(led>>1)&0x08;
temp|=(led>>3)&0x04;
temp|=(led>>5)&0x02;
temp|=(led>>7)&0x01;
return(temp);
}
voidled16_16display(uchar*table1,ucharlength)
{
uchari=length/2,scan1=0x1,scan2=0x1;
for(i=0;i<16;i++)
{
if(i<8)
{
ROW1=0;
ROW2=0;
COL1=scan1;
COL2=0;
ROW1=changeleft(table1[2*i]);
ROW2=table1[2*i+1];
COL1=scan1;
COL2=0;
delay();
scan1<<=1;
}
else
{
ROW1=0;
ROW2=0;
COL1=0;
COL2=scan2;
ROW1=changeleft(table1[2*i]);
ROW2=table1[2*i+1];
COL1=0;
COL2=scan2;
delay();
scan2<<=1;
}
}
}
voidchangeseg()
{
if(key1==0)
{
buffer[3]=10;
buffer[0]=10;
buffer[5]=tempseg%10;
buffer[4]=tempseg/10;
buffer[2]=tempseg%10;
buffer[1]=tempseg/10;
}
elseif(key1==1)
{
buffer[3]=10;
buffer[0]=10;
buffer[5]=0;
buffer[4]=1;
buffer[2]=0;
buffer[1]=1;
}
else
{
buffer[3]=10;
buffer[0]=10;
buffer[5]=0;
buffer[4]=1;
buffer[2]=0;
buffer[1]=1;
}
}
voidtimer1()interrupt3
{
staticuchartemp=0x20,cnt1;
TH1=(65536-1000)/256;
TL1=(65536-1000)%256;
changeseg();
SEG=0xff;
SEG=table[buffer[cnt1]];
cnt1++;
if(cnt1==6)
cnt1=0;
BIT=temp;
temp>>=1;
if(temp==0)
temp=0x20;
}
voidint_0()interrupt0
{
delay();
if(P32==0)
{
PA=0xB6;
PB=0x0d;
PT0=1;
PT1=1;
intflag=1;
while(inttime>=20)
led16_16display(led2,32);
inttime=1;
intflag=0;
PT0=0;
PT1=0;
PA=ewTable[tongBu];
PB=nsTable[tongBu];
}
}
voidtimer0()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
cnt++;
if(cnt==5)
{
cnt=0;
if(intflag==1)
{
inttime++;
tempseg=10-inttime/2;
}
else
{
time++;
aa=5-(time+1)/2;
bb=15-(time+1)/2;
if(time<=10)
{
tongBu=0;
PA=ewTable[tongBu];
PB=nsTable[tongBu];
tempseg=aa;
}
elseif((time>10)&&(time<=30))
{
tongBu=1;
PA=ewTable[tongBu];
PB=nsTable[tongBu];
tempseg=bb;
}
elseif((time>30)&&(time<=40))
{
if(change==0)
{
tongBu=2;
PA=ewTable[tongBu];
PB=nsTable[tongBu];
change=1;
}
else
{
tongBu=3;
PA=ewTable[tongBu];
PB=nsTable[tongBu];
change=0;
}
tempseg=bb+5;
}
elseif((time>40)&&(time<=70))
{
tongBu=4;
PA=ewTable[tongBu];
PB=nsTable[tongBu];
tempseg=bb+5+15;
}
elseif((time>70)&&(time<=80))
{
if(change==0)
{
tongBu=5;
PA=ewTable[tongBu];
PB=nsTable[tongBu];
change=1;
}
else
{
tongBu=6;
PA=ewTable[tongBu];
PB=nsTable[tongBu];
change=0;
}
tempseg=bb+10+15;
}
else
{
tongBu=1;
time=11;
PA=ewTable[tongBu];
PB=nsTable[tongBu];
tempseg=bb;
}
}
}
}
/*voidkey()
{
ucharkeynum;
keynum=~(P1|0XF8);
switch(keynum)
{
case0x1:
while(KEY1==0)led16_16display(led2,32);
key1++;
TR0=0;
if(key1==3)
{
key1=0;
TR0=1;
}
break;
case0x2:
while(KEY2==0)led16_16display(led2,32);
if(key1==1)
{
10++;
if(10==100)
10=0;
}
if(key1==2)
{
15++;
if(15==100)
15=0;
}
break;
case0x4:
while(KEY3==0)led16_16display(led2,32);
if(key1==1)
{
10--;
if(10<0)
10=99;
}
if(key1==2)
{
15--;
if(15<0)
15=99;
}
break;
default:
break;
}
}*/
voidmain()
{
IE=0x8b;
IT0=1;
TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=(65536-1000)/256;
TL1=(65536-1000)%256;
CTL=0x80;
TR1=1;
tongBu=0;
PA=ewTable[tongBu];
PB=nsTable[tongBu];
TR0=1;
while
(1)
{
//key();
if(intflag==0)
{
if(key1==0)
{
if(time<=10)
led16_16display(led2,32);
elseif(time>10&&time<=40)
led16_16display(led1,32);
elseif(time>40&&time<=80)
led16_16display(led2,32);
}
else
led16_16display(led2,32);
}
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 交通灯 设计