单片机实验报告.docx
《单片机实验报告.docx》由会员分享,可在线阅读,更多相关《单片机实验报告.docx(44页珍藏版)》请在冰豆网上搜索。
单片机实验报告
单片机原理及应用系统设计
实验报告
专业:
电子信息工程
班级:
信息0701
学号:
09003070111
姓名:
陈杰
目录
1.设计内容2
2.设计方案2
3.总体设计4
4.功能描述5
5.功能测试9
6.系统仿真原理图9
7.试验目的9
8、参考文献10
9.附件:
10
1.设计内容:
本设计是在车辆通行繁忙的十字交叉路口设置的交通灯控制系统,其特点是:
在十字路口的支线、干线的车辆通行时间不等,同时设有道路应急控制。
具体的情况是:
在正常的情况下,通行道路时间设为15秒,禁行道路时间设为10秒;当通行线路绿转黄灯时设为5秒显示,并且黄灯要闪烁;并且设置中断程序,表示救护车来临时的应急状态,此时东西,南北道路都变为红灯并显示10秒计时;并用16×16点阵显示的相应字符,计时完毕后恢复之前的状态。
道路通行与禁止通行以及救护车来临时的各个状态用16×16点阵显示相应字符来显示;
设计中以MCS-51单片机为主控器,作适当的存储器,显示器,、六盏LED指示灯的扩展成一个路口交通灯控制系统。
2.设计方案:
(1)硬件设计(硬件结构图如下图所示)
硬件系统在该系统中的作用主要是进行数据的传送,特殊状态的控制,有关逻辑的计算,并且提供显示,此外系统运行的安全可靠性要靠硬件系统来实现。
硬件系统的设计主要包括下面的工作:
东西、南北两干道交于一个十字路口,各干道有一组红、黄、绿三色的指示灯,指挥车辆和行人安全通行。
红灯亮禁止通行,绿灯亮允许通行。
黄灯亮提示人们注意红、绿灯的状态即将切换,且黄灯燃亮时间为东西、南北两干道的公共停车时间。
指示灯燃亮的方案如表
2。
60S
5S
80S
5S
……
东西道
红灯亮
黄灯亮
绿灯亮
黄灯亮
……
南北道
绿灯亮
黄灯亮
红灯亮
黄灯亮
……
表2
表2说明:
(1)当东西方向为红灯,此道车辆禁止通行,东西道行人可通过;南北道为绿灯,此道车辆通过,行人禁止通行。
时间为15秒。
(2)黄灯闪烁5秒,警示车辆和行人红、绿灯的状态即将切换。
(3)当东西方向为绿灯,此道车辆通行;南北方向为红灯,南北道车辆禁止通过,行人通行。
时间为10秒。
(4)这样如上表的时间和红、绿、黄出现的顺序依次出现这样行人和车辆就能安全畅通的通行。
硬件说明:
a:
用8段数码管动态显示东西和南北道路的禁止与通行秒数。
对应4位8段数码管,按地址输出相应数据,就可以实现对显示器的控制。
8位段码、8位位码是由两片74LS374输出。
位码经MC1413倒相驱动后,选择相应显示位。
b:
配置6个LED显示器:
分别表示东西和南北方向道路的红、绿、黄灯。
分别循环表示4种状态.
c:
用实验箱上的16×16LED点阵显示器,编写显示符号字符程序,标志道路通行情况的显示.
d:
用实验箱上的负脉冲发生器,作为外部中断的输入信号。
控制外部中断的发生。
(2)软件设计
设计说明:
因为本实验是交通灯控制实验,所以要先了解实际交通灯的变化规律。
假设一个十字路口为东西南北走向。
初始状态0为东西红灯,南北红灯。
然后转状态1南北绿灯通车,东西红灯。
过一段时间转状态2,南北绿灯转亮黄灯闪几次,延时5秒,东西仍然红灯。
再转状态3,东西绿灯通车,南北红灯。
过一段时间转状态4,东西绿灯转亮黄灯闪几次,延时5秒,南北仍然红灯。
最后循环至状态1。
各个状态对应显示字符。
在该系统的软件设计中用到的是模块程序设计,主要的模块程序是显示的模块程序,它包括显示红绿灯的时间倒计时和各个状态的表示字符的转换。
通过软件分块的设计使系统功能明了容易实现.
正常显示状态:
动态显示车辆通行时间,其格式大致为(包括应急状态时的显示);以及显示响应字符:
南北通行时间显示位
3.总体设计:
A:
首先根据该设计的特点,把出现的情况进行分析整理,得到以下几种情况:
(1)通行道:
占时15秒,显示如上图所示的位码;
(2)禁行道:
占时10秒,显示如上图所示的位码;
(3)同时通行道倒计时至5秒时,禁行道跳转5秒倒计时;
(4)在黄灯转红灯时,黄灯闪烁,变黄灯延时五秒变红灯;
(5)救护车来临时,都变为红灯占时10秒,能恢复之前状态。
B:
根据以上的情况分析,经过思路的整理得到了整体的设计框架图,及程序流程图
C:
我们的系统设计过程中,实验系统主要采用的是模块化设计。
这次系统设计中用到的模块是:
1红绿灯显示倒计时模块,
2黄灯闪烁显示模块,
316×16点阵显示字符显示模块,
4中断急救车到来中断及显示模块,
5延时模块。
这次系统设计过程中要将这几个模块按照逻辑与设计要求把它们与8031做连接,实现以上特点。
D:
这次设计当中初步决定所需要实验箱接口:
16×16LED点阵,16×16_CS接CS3;外部中断INT0
负脉冲接P3.2;LED灯显示,P0-P5接L0-L5;倒计时显示8255_CS接CSO.
E:
硬件设计:
电路图为附件。
F:
软件设计:
显示程序,显示程序为主程序,子程序有延时程序。
4.功能描述:
本系统由单片机系统、发光二极管、交通灯演示系统、中断系统、倒计时显示系统、点阵显示系统组成。
1.系统硬件电路的设计
整套电路系统由控制系统模块、通行灯输出控制显示模块、时间显示模块、点阵显示模块和急救特种车辆控制模块等组成。
1、主控制系统
由主程序的四个状态循环显示程序控制。
并设置一个外部中断,P3.2口接受一个负脉冲的控制,救护车通过时使用外中断INT0口(P3.2)。
Start:
movSP,#70
movTCON,#01h;downedgeIT0
movIE,#81h;enableEA,EX0
movaa,#0
movbb,#0
movcc,#0
movdd,#0
movee,#0
movff,#0
setbSR;南北,东西均红灯
clrSY
clrSG
setbER
clrEY
clrEG
clrSTOP
jnbSTOP,wrld
callAllRed
2、通行灯输出控制
道口交通灯指示采用红黄绿色发光二极管。
单片机的P1.0-P1.5口用于控制发光二级管L0-L5,用于控制东西南北方向的红绿灯状态转换。
分别由各个状态下的程序控制。
3、时间显示模块
道口通行剩余时间采用红色8段LED发光数码管显示,采用共阳数码管。
由倒计时显示8255_CS接CSO来扩展。
分别由程序中的位显示控制和段显示控制程序来设定计时功能。
同时调用延时程序控制响应显示时间。
4、救护车到来自动控制模块
在救护车到来时能自动关闭所有灯,让救护车通过。
设计中采用外部中断作为救护车到来的发生器,使用实时中断来影响救护车的通行要求。
由外部中断INT0负脉冲接P3.2来接受外部中断信号。
AllRed:
pusha
mova,r0
pusha
mova,r1
pusha
mova,r2
pusha
mova,r4
pusha
mova,r5
pusha
pushSR
pushSY
pushSG
pushER
pushEY
pushEG
pushRowLow
pushRowHigh
pushColLow
pushColHigh
pushOUTBIT
pushOUTSEG
pushLEDBuf
pushLEDBuf+1
pushLEDBuf+2
pushLEDBuf+3
pushLEDBuf+4
pushLEDBuf+5
pushLEDBuf+6
pushLEDBuf+7
pushLEDBuf+8
pushLEDBuf+9
pushLEDBuf+10
pushLEDBuf+11
pushLEDBuf+12
pushLEDBuf+13
pushLEDBuf+14
pushLEDBuf+15
pushbitmask
pushbitmask+1
pushbase
pushbase+1
pushPSW
setbSR
clrSY
clrSG
setbER
clrEY
clrEG
clrSTOP
movr2,#10
callmainc
popPSW
popbase+1
popbase
popbitmask+1
popbitmask
popLEDBuf+15
popLEDBuf+14
popLEDBuf+13
popLEDBuf+12
popLEDBuf+11
popLEDBuf+10
popLEDBuf+9
popLEDBuf+8
popLEDBuf+7
popLEDBuf+6
popLEDBuf+5
popLEDBuf+4
popLEDBuf+3
popLEDBuf+2
popLEDBuf+1
popLEDBuf
popOUTSEG
popOUTBIT
popColHigh
popColLow
popRowHigh
popRowLow
popEG
popEY
popER
popSG
popSY
popSR
popa
movr5,a
popa
movr4,a
popa
movr2,a
popa
movr1,a
popa
movr0,a
popa
ret
5.功能测试:
1.状态灯显示测试
当电路连接完毕后,将写好的测试程序刷写到芯片内,通电即可检测。
2.数码管的测试
将串口的和电路板上的接口连接,将写好的测试程序刷写到芯片内,开电源即可测试。
3.整体电路测试
系统上电,刷写好程序即可开始测试,观测一个周期(共计S1~S4四个状态,默认一个
周期)灯的显示状态是否正常,同时观察倒计的计数是否正常。
6.系统仿真原理图:
7.试验目的:
本次试验是《单片机原理与应用系统设计》课程的综合训练,我们通过理论学习,课题选择,资料查阅,软、硬件设计,系统调试等环节,巩固和提高所学的知识及应用水平.学会从提出问题,观察与分析问题,到最终解决问题科学方法.培养我们严谨的工作作风,务实的工作态度。
为今后的毕业设计、及从事微机控制系统的设计与维护奠定坚实的基础。
本设计的意义在于通过具体的控制系统的设计,掌握微机控制系统设计的一般方法和处理问题的思路,特别是一些常用的技术手段。
使我们能在实践教学环境中累积设计经验,开拓思维空间,全面提高个人的综合能力。
通过这次试验,使我得到了一次用专业知识、专业技能分析和解决问题全面系统的锻炼。
使我在单片机的基本原理、单片机应用系统开发过程,以及在常用编程设计思路技巧(特别是汇编语言)的掌握方面都能向前迈了一大步,为日后成为合格的应用型人才打下良好的基础。
8.参考文献:
[1]凌玉华单片机原理及应用系统设计长沙:
中南大学出版社,2006
[2]李朝青.单片机原理及接口技术(修订版).北京:
北京航空航天大学出版社,1998
9.附件:
程序源代码:
RowLowequ0B002h;行低八位地址
RowHighequ0B003h;行高八位地址
ColLowequ0B000h;列低八位地址
ColHighequ0B001h;列高八位地址
bitmaskequ40h
baseequ42h
Flashequ0;LED状态
STOPequ1
SRequp1.0;南北红灯
SYequp1.1;南北黄灯
SGequP1.2;南北绿灯
ERequP1.3;东西红灯
EYequP1.4;东西黄灯
EGequp1.5;东西绿灯
OUTBITequ08002h;位控制口
OUTSEGequ08004h;段控制口
LEDBufequ60h;显示缓冲
aaequ30h
bbequ31h
ccequ32h
ddequ33h
eeequ34h
ffequ35h
ggequ36h
ljmpStart
org3
setbSTOP;南北,东西均红灯
reti
maina:
movbitmask,#0
movbitmask+1,#0
;清屏
mova,#00h;列驱动低有效
movdptr,#RowLow
movx@dptr,a
movdptr,#RowHigh
movx@dptr,a
mova,#0ffh;行驱动高有效
movdptr,#ColLow
movx@dptr,a
movdptr,#ColHigh
movx@dptr,a
loop0a:
movr4,#200;每个字显示的时间
loopa:
movbitmask,#01;选择显示行
movr5,#16;每行16列
mova,aa;字模的起始地址
movb,#32
mulab
movdptr,#Fonta
adda,dpl
movbase,a
mova,b
addca,dph
movbase+1,a
movr0,#LEDBuf
mova,bb
movb,#16
mulab
movb,a
fillbufa:
mova,b
movdptr,#Tablea
movca,@a+dptr
mov@r0,a
incr0
incb
cjner0,#LEDBuf+16,fillbufa
movr0,#LEDBuf
movr1,#00001000b
nextrowa:
movdptr,#OUTBIT
mova,#0
movx@dptr,a
mova,@r0
movdptr,#OUTSEG
movx@dptr,a
movdptr,#OUTBIT
mova,r1
movx@dptr,a
mova,r1
rra
movr1,a
incr0
cjner1,#80h,nexta
movr1,#00001000b
nexta:
mova,#00h;先关闭显示
movdptr,#RowLow
movx@dptr,a
movdptr,#RowHigh
movx@dptr,a
movdpl,base;取出该行字模
movdph,base+1
clra
movca,@a+dptr
movr6,a
incdptr
clra
movca,@a+dptr
movr7,a
incdptr
movbase,dpl;指向下行字模
movbase+1,dph
movdptr,#ColLow;输出字模数据
mova,r6
cpla
movx@dptr,a
movdptr,#ColHigh
mova,r7
cpla
movx@dptr,a
mova,bitmask;点亮该行
movdptr,#RowLow
movx@dptr,a
mova,bitmask+1
movdptr,#RowHigh
movx@dptr,a
clrc
mova,bitmask
rlca
movbitmask,a
mova,bitmask+1
rlca
movbitmask+1,a;指向下一行
jnbSTOP,one
callAllRed
cji:
djnzr5,nextrowa
djnzr4,cji;每个字要重复显示
incaa
incbb;指向下个汉字
mova,r2
cjnea,aa,nextchara
ret;
nextchara:
jmploop0a
two:
ljmploopa
mainb:
movbitmask,#0
movbitmask+1,#0
;清屏
mova,#00h;列驱动低有效
movdptr,#RowLow
movx@dptr,a
movdptr,#RowHigh
movx@dptr,a
mova,#0ffh;行驱动高有效
movdptr,#ColLow
movx@dptr,a
movdptr,#ColHigh
movx@dptr,a
loop0b:
movr4,#200;每个字显示的时间
loopb:
movbitmask,#01;选择显示行
movr5,#16;每行16列
mova,cc;字模的起始地址
movb,#32
mulab
movdptr,#Fontb
adda,dpl
movbase,a
mova,b
addca,dph
movbase+1,a
movr0,#LEDBuf
mova,dd
movb,#16
mulab
movb,a
fillbufb:
mova,b
movdptr,#Tableb
movca,@a+dptr
mov@r0,a
incr0
incb
cjner0,#LEDBuf+16,fillbufb
movr0,#LEDBuf
movr1,#00001000b
nextrowb:
movdptr,#OUTBIT
mova,#0
movx@dptr,a
mova,@r0
movdptr,#OUTSEG
movx@dptr,a
movdptr,#OUTBIT
mova,r1
movx@dptr,a
mova,r1
rra
movr1,a
incr0
cjner1,#80h,nextb
movr1,#00001000b
nextb:
mova,#00h;先关闭显示
movdptr,#RowLow
movx@dptr,a
movdptr,#RowHigh
movx@dptr,a
movdpl,base;取出该行字模
movdph,base+1
clra
movca,@a+dptr
movr6,a
incdptr
clra
movca,@a+dptr
movr7,a
incdptr
movbase,dpl;指向下行字模
movbase+1,dph
movdptr,#ColLow;输出字模数据
mova,r6
cpla
movx@dptr,a
movdptr,#ColHigh
mova,r7
cpla
movx@dptr,a
mova,bitmask;点亮该行
movdptr,#RowLow
movx@dptr,a
mova,bitmask+1
movdptr,#RowHigh
movx@dptr,a
clrc
mova,bitmask
rlca
movbitmask,a
mova,bitmask+1
rlca
movbitmask+1,a;指向下一行
jnbSTOP,two
callAllRed
two:
djnzr5,nextrowb
djnzr4,cjj;每个字要重复显示
inccc
incdd;指向下个汉字
mova,r2
cjnea,cc,nextcharb
ret;
nextcharb:
jmploop0b
cjj:
ljmploopb
mainc:
movbitmask,#0
movbitmask+1,#0
;清屏
mova,#00h;列驱动低有效
movdptr,#RowLow
movx@dptr,a
movdptr,#RowHigh
movx@dptr,a
mova,#0ffh;行驱动高有效
movdptr,#ColLow
movx@dptr,a
movdptr,#ColHigh
movx@dptr,a
movee,#0
movff,#0
loop0c:
movr4,#200;每个字显示的时间
loopc:
movbitmask,#01;选择显示行
movr5,#16;每行16列
mova,ee;字模的起始地址
movb,#32
mulab
movdptr,#Fontc
adda,dpl
movbase,a
mova,b
addca,dph
movbase+1,a
movr0,#LEDBuf
mova,ff
movb,#16
mulab
movb,a
fillbufc:
mova,b
movdptr,#Tablec
movca,@a+dptr
mov@r0,a
incr0
incb
cjner0,#LEDBuf+16,fillbufc
movr0,#LEDBuf
movr1,#00001000b
nextrowc:
movdptr,#OUTBIT
mova,#0
movx@dptr,a
mova,@r0
movdptr,#OUTSEG
movx@dptr,a
movdptr,#OUTBIT
mova,r1
movx@dptr,a
mova,r1
rra
movr1,a
incr0
cjner1,#80h,nextc
movr1,#00001000b
nextc:
mova,#00h;先关闭显示
movdptr,#RowLow
movx@dptr,a
movdptr,#RowHigh
movx@dptr,a
movdpl,bas