单片机综合实验报告之模拟交通灯设计.docx

上传人:b****1 文档编号:3088233 上传时间:2023-05-05 格式:DOCX 页数:15 大小:350.91KB
下载 相关 举报
单片机综合实验报告之模拟交通灯设计.docx_第1页
第1页 / 共15页
单片机综合实验报告之模拟交通灯设计.docx_第2页
第2页 / 共15页
单片机综合实验报告之模拟交通灯设计.docx_第3页
第3页 / 共15页
单片机综合实验报告之模拟交通灯设计.docx_第4页
第4页 / 共15页
单片机综合实验报告之模拟交通灯设计.docx_第5页
第5页 / 共15页
单片机综合实验报告之模拟交通灯设计.docx_第6页
第6页 / 共15页
单片机综合实验报告之模拟交通灯设计.docx_第7页
第7页 / 共15页
单片机综合实验报告之模拟交通灯设计.docx_第8页
第8页 / 共15页
单片机综合实验报告之模拟交通灯设计.docx_第9页
第9页 / 共15页
单片机综合实验报告之模拟交通灯设计.docx_第10页
第10页 / 共15页
单片机综合实验报告之模拟交通灯设计.docx_第11页
第11页 / 共15页
单片机综合实验报告之模拟交通灯设计.docx_第12页
第12页 / 共15页
单片机综合实验报告之模拟交通灯设计.docx_第13页
第13页 / 共15页
单片机综合实验报告之模拟交通灯设计.docx_第14页
第14页 / 共15页
单片机综合实验报告之模拟交通灯设计.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

单片机综合实验报告之模拟交通灯设计.docx

《单片机综合实验报告之模拟交通灯设计.docx》由会员分享,可在线阅读,更多相关《单片机综合实验报告之模拟交通灯设计.docx(15页珍藏版)》请在冰点文库上搜索。

单片机综合实验报告之模拟交通灯设计.docx

单片机综合实验报告之模拟交通灯设计

(此文档为word格式,下载后您可任意编辑修改!

 

单片机综合实验报告

 

题目:

模拟真实交通灯

班级:

姓名:

学号:

指导老师:

 

2014年6月13日

一、实验内容:

用8255芯片的PA、PB口低四位做输出口,控制十二个发光二极管燃灭,模拟十字路口交通灯管理,并利用数码显示器进行倒计时显示(采用单片机内部定时器定时)。

通过外部中断能使交通灯暂停运行,并点亮4个红灯。

通过16*16点阵中的图形模拟控制行人过马路的人形“走”、“停”指示灯,可参考下图所示:

利用实验系统16×16点阵实验单元,以两种方式控制点阵显示。

要求编制程序实现汉字点阵循环显示。

IO口地址分配

IO口分别提供字形代码(列码)、扫描信号(行码),凡字形代码位为“1”、行扫描信号为“1”点亮该点,否则熄灭;通过逐行扫描循环点亮字形或曲线。

二、实验电路及功能说明

8255与发光二极管连线图

数码LED显示器电路

16×16LED点阵显示电路

实验原理图

三、实验程序流程图:

主程序:

四、实验结果分析

通过程序仿真,可以检测设计的电路能基本满足设计要求。

交通灯亮灭过程同“8255控制交通灯实验”,倒计时显示只需两位数(0~99),用定时器定时进行倒计时,每秒钟减1。

在16*16点阵中显示的人形“走”、“停”标志可自定义。

五、心得体会

我们通过作这个单片机实验,我们总结了一下点:

1、加深了对51单片机的理解,不仅仅是以前那样只能点亮发光二极管。

2、感受到了完成一件程序的乐趣,并且知道了实践精神。

3、理解了51单片机的强大和我们知识的肤浅。

4、学到了许多原来C语言中没有的东西,如:

控制按键的程序

While(P0_5==1)

{

Time++;

While(P0_5==1);

}

这样可以不加防按键抖动的延时程序,更精确时间。

5、进一步充分利用中断时刻都在运行,让时间在中断中显示,就不会出现进入死循环后而无法显示时间的情况,而且还可以快速的反映除时间的变化。

六、程序清单

#include

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*table,ucharlength)

{

uchari=length2,scan1=0x1,scan2=0x1;

for(i=0;i<16;i++)

{

if(i<8)

{

ROW1=0;

ROW2=0;

COL1=scan1;

COL2=0;

ROW1=changeleft(table[2*i]);

ROW2=table[2*i+1];

COL1=scan1;

COL2=0;

delayshort();

scan1<<=1;

}

else

{

ROW1=0;

ROW2=0;

COL1=0;

COL2=scan2;

ROW1=changeleft(table[2*i]);

ROW2=table[2*i+1];

COL1=0;

COL2=scan2;

delayshort();

scan2<<=1;

}

}

}

voidchangeseg()

{

if(key1==0)

{

buffer[3]=10;

buffer[0]=10;

buffer[5]=tempseg%10;

buffer[4]=tempseg10;

buffer[2]=tempseg%10;

buffer[1]=tempseg10;

}

elseif(key1==1)

{

buffer[3]=10;

buffer[0]=10;

buffer[5]=ewstarter%10;

buffer[4]=ewstarter10;

buffer[2]=ewstarter%10;

buffer[1]=ewstarter10;

}

else

{

buffer[3]=10;

buffer[0]=10;

buffer[5]=snstarter%10;

buffer[4]=snstarter10;

buffer[2]=snstarter%10;

buffer[1]=snstarter10;

}

}

voidtimer1()interrupt3

{

staticuchartemp=0x20,cnt1;

TH1=()256;

TL1=()%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

{

delayshort();

if(P32==0)

{

PA=0xB6;

PB=0xd;

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=()256;

TL0=()%256;

cnt++;

if(cnt==5)

{

cnt=0;

if(intflag==1)

{

inttime++;

tempseg=10-inttime2;

}

else

{

time++;

if(time<=allredend)

{

tongBu=0;

PA=ewTable[tongBu];

PB=nsTable[tongBu];

tempseg=allredend2-(time+1)2;

}

elseif((time>allredend)&&(time<=ewredend))

{

tongBu=1;

PA=ewTable[tongBu];

PB=nsTable[tongBu];

tempseg=ewstarter+allredend2-(time+1)2;

}

elseif((time>ewredend)&&(time<=snyellowend))

{

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=ewstarter+allredend2+5-(time+1)2;

}

elseif((time>snyellowend)&&(time<=snredend))

{

tongBu=4;

PA=ewTable[tongBu];

PB=nsTable[tongBu];

tempseg=ewstarter+allredend2+5+snstarter-(time+1)2;

}

elseif((time>snredend)&&(time<=ewyellowend))

{

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=ewstarter+10+allredend2+snstarter-(time+1)2;

}

else

{

tongBu=1;

time=allredend+1;

PA=ewTable[tongBu];

PB=nsTable[tongBu];

tempseg=ewstarter+allredend2-(time+1)2;

}

}

}

}

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)

{

ewstarter++;

if(ewstarter==100)

ewstarter=0;

}

if(key1==2)

{

snstarter++;

if(snstarter==100)

snstarter=0;

}

break;

case0x4:

while(KEY3==0)led16_16display(led2,32);

if(key1==1)

{

ewstarter--;

if(ewstarter==-1)

ewstarter=99;

}

if(key1==2)

{

snstarter--;

if(snstarter==-1)

snstarter=99;

}

break;

default:

break;

}

}

voidmain()

{

IE=0x8b;

IT0=1;

TMOD=0x11;

TH0=()256;

TL0=()%256;

TH1=()256;

TL1=()%256;

CTL=0x80;

tongBu=0;

TR1=1;

PA=ewTable[tongBu];

PB=nsTable[tongBu];

tempseg=allredend2-(time+1)2;

TR0=1;

while

(1)

{

key();

if(intflag==0)

{

if(key1==0)

{

if(time<=allredend)

led16_16display(led2,32);

elseif(time>allredend&&time<=snyellowend)

led16_16display(led1,32);

elseif(time>snyellowend&&time<=ewyellowend)

led16_16display(led2,32);

}

else

led16_16display(led2,32);

}

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2