单片机综合实验报告之模拟交通灯设计.docx
- 文档编号:9940399
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:15
- 大小:350.91KB
单片机综合实验报告之模拟交通灯设计.docx
《单片机综合实验报告之模拟交通灯设计.docx》由会员分享,可在线阅读,更多相关《单片机综合实验报告之模拟交通灯设计.docx(15页珍藏版)》请在冰豆网上搜索。
单片机综合实验报告之模拟交通灯设计
(此文档为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); } } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 综合 实验 报告 模拟 交通灯 设计