版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
word文档可自由复制编辑《单片机实验》设计报告交通信号灯模拟系统设计交通信号灯模拟系统设计摘要:本系统以单片机为核心,主要应用单片机中定时器计数器,IO接口,中断系统等,结合8279键盘控制电路,数码管显示以及LED灯实现对十字路口交通信号灯的智能控制。成功实现了利用单片机的定时器定时,令十字路口的红绿灯交替点亮和熄灭,通过按键对红绿灯点亮和熄灭时间进行调整及设置以及对红绿灯点亮和熄灭时间进行倒计时时间显示等基本功能。并在此基础上进一步扩展,实现了对某些特殊功能的操作,如:突发紧急情况,所有路线全部红灯,或南北向(主干道)强制绿灯通行,以及东西向(次干道)强制绿灯等,并且可在交通高峰期(系统默认上午7:00-8:00,下午17:00-18:00)自动修改绿灯时间。系统功能完善,可操控性好,代码通俗易懂。关键字:51单片机交通信号灯智能控制8279主要功能:分析题目可知,有两种方案设计的方法,也即两条不同的主干分别对应不同的方案,方案一以键盘控制为主干,穿插对系统时钟的检测,倒计时的检测等,系统主干为循环检测键盘是否被按下并作出相应操作。方案二以交通信号灯不同的点亮与熄灭状态为主干,即系统的主干是交通灯状态的循环,在循环中检测按键并作出相应调整。此次试验选择的是方案二,因为对方案一的代码实现比较复杂。信号灯的状态依次为:南北绿灯,东西红灯->南北黄灯,东西红灯->南北红灯,东西绿灯->南北红灯,东西黄灯。解决这部分问题的关键在于8279键盘扫描和相应的数码管显示,在实验帮助里有详细代码,另一个难点在于内置时钟和倒计时显示,这一部分内容通过使用单片机内的定时器能很好的解决,实验帮助五有详细的代码,通过定时器T1产生中断来定时,从而完成一秒的时间。具体详见附录代码。设计的主要内容:第一部分,系统开机界面,设置及人机互动的按键控制,流程图如下:(相应的功能流程图中已给出)第二部分,系统主干部分,即交通信号灯4个大循环以及循环内部检测按键完成拓展功能的实现,在循环内检测按键,实现相应功能,流程如下:具体细节,例如定时器的设计等在纸质档报告中有详细分析,在这里就不赘述总结:总的来说这次试验比较成功,题目要求的功能基本都实现了,对于单片机汇编程序语言的理解也更深刻了,课本上的知识比较分散,每部分之间都没有什么联系,通过实验很好的把各部分之间联系起来,加深记忆,更便于理解。唯一不足的是对于题目的考虑不周,特殊功能采用键盘扫描子程序解决了,而没有采用终端,使得程序应激性不好,没有很好的应变性。在以后的编程中会注意这方面的内容。附录:(详细代码);-------------------------------------------------------Z8279EQU0FF82H;8279状态/命令口地址D8279EQU0FF80H;8279数据口地址LEDMODEQU00H;左边输入八位字符显示;外部译码键扫描方式,双键互锁LEDFEQEQU2FH;扫描速率LEDCLSEQU0C1H;清除显示RAMLEDWR0EQU80H;设定的将要写入的显示RAM地址READKBEQU40H;读FIFORAM地址0的命令字;-------------------------------------------------------ORG0000HAJMPSTARTORG001BH;INTT1入口地址AJMPINT_T1ORG0040HSTART:MOVSP,#60HLCALLINIT8279;初始化8279MOVR3,#0H;时MOVR2,#0H;分MOVR1,#0H;秒MOVR7,#0H;倒计时时间MOVR0,#20;50毫秒MOV40H,#0;用于改变主次干道时长比MOVR6,#0FFH;标志MOVTMOD,#10HMOVTL1,#00H;50毫秒的时间常数MOVTH1,#4CHSETBEX0SETBET1SETBEA;允许中断;初始状态,全红灯MOVDPTR,#8300HMOVA,#0FHMOVX@DPTR,A;键盘操作WAIT:LCALLGETKEY;读键盘CJNEA,#0FFH,CONT;判断是否有键输入MOVA,BCJNEA,#3CH,KEY_C;输入键是'C',转CLEAR_TLCALLCLEAR_TKEY_C:CJNEA,#3AH,KEY_A;输入键是'A',转START_TLCALLSTART_TKEY_A:CJNEA,#3DH,KEY_D;输入键是'D',转STOP_TLCALLSTOP_TKEY_D:CJNEA,#3BH,KEY_E;输入键是'B',转SET_TLCALLSET_T;设置系统时间KEY_E: CJNEA,#3FH,KEY_B;输入键是'F',转SET_COUTLCALLSET_COUT;设置倒计时间KEY_B: CJNEA,#3EH,CONT;输入键是'E',转MONITORAJMPMONITORCONT:CJNER6,#0FFH,WAIT;若无秒标志则循环LCALLDISPLAY;显示时间MOVR6,#0;清标志SJMPWAIT;循环MONITOR:NOPSJMP$;等待回到监控;按键对应的功能CLEAR_T:;时间清零子程序CLRTR1;关计数器MOVR3,#0H;小时清零MOVR2,#0H;分钟清零MOVR1,#0H;秒清零MOVR0,#20;10毫秒清零MOVR7,#0H;倒计时时间清零MOVR6,#0FFH;置秒标志RETSTART_T:;电子钟计时子程序;程序主要部分;程序开始执行后将循环在这部分CIRCLE:LCALLSTATION1;南北绿灯,东西红灯LCALLSTATION2;南北绿灯闪转黄灯,东西红灯LCALLSTATION3;南北红灯,东西绿灯LCALLSTATION4;南北红灯,东西绿灯闪转黄灯LJMPCIRCLERET;STATION1STATION1:;南北绿灯,东西红灯MOVR7,30HMOVA,R7ADDA,40HMOVR7,AMOVDPTR,#8300HMOVA,#96H;南北绿灯,东西红灯MOVX@DPTR,ASETBTR1;扫描键盘WO1:LCALLGETKEY;读键盘CJNEA,#0FFH,JB1;判断是否有键输入MOVA,BCJNEA,#3FH,PUSHB1;若是按下F,则清零并且返回MOVR4,#1LCALLGETWORD;读倒计时时间数MOVA,BMOVB,#10DIVABSWAPAADDA,BMOVR7,A;保存输入的值INCAMOV30H,ALCALLDISPLAY;显示时间PUSHB1:CJNEA,#3BH,PUSHC1;若是按下B,则清零并且返回WAITCLRTR1;关计数器MOVR3,#0H;小时清零MOVR2,#0H;分钟清零MOVR1,#0H;秒清零MOVR0,#20;10毫秒清零MOVR7,#0H;倒计时时间清零MOVR6,#0FFH;置秒标志AJMPWAITPUSHC1:CJNEA,#3CH,PUSHD1MOVR7,#3;若按下C,输出3秒红灯MOVDPTR,#8300HMOVA,#0FHMOVX@DPTR,APUSHD1: CJNEA,#3DH,PUSHE1;若按下D,南北绿灯5秒MOVR7,#5MOVA,#96HMOVX@DPTR,APUSHE1: CJNEA,#3EH,JB1MOVR7,#5MOVA,#69HMOVX@DPTR,AJB1:CJNER7,#0H,WO1RET;STATION2STATION2:MOVR7,#3MOVDPTR,#8300HMOVA,#06HMOVX@DPTR,ASETBTR1WO2:LCALLGETKEY;读键盘CJNEA,#0FFH,JB2;判断是否有键输入MOVA,BCJNEA,#3FH,PUSHB2;若是按下F,则清零并且返回 MOVR4,#1LCALLGETWORD;读倒计时时间数MOVA,BMOVB,#10DIVABSWAPAADDA,BMOVR7,A;保存输入的值INCAMOV30H,ALCALLDISPLAY;显示时间PUSHB2:CJNEA,#3BH,PUSHC2;若是按下B,则清零并且返回WAITCLRTR1;关计数器MOVR3,#0H;小时清零MOVR2,#0H;分钟清零MOVR1,#0H;秒清零MOVR0,#20;10毫秒清零MOVR7,#0H;倒计时时间清零MOVR6,#0FFH;置秒标志AJMPWAITPUSHC2:CJNEA,#3CH,PUSHD2MOVR7,#3;若按下C,输出3秒红灯MOVDPTR,#8300HMOVA,#0FHMOVX@DPTR,APUSHD2:CJNEA,#3DH,PUSHE2;若按下D,南北绿灯5秒MOVR7,#5MOVA,#96HMOVX@DPTR,APUSHE2:CJNEA,#3EH,JB2MOVR7,#5MOVA,#69HMOVX@DPTR,AJB2:CJNER7,#0H,WO2RET;STATION3STATION3:;南北红灯,东西绿灯MOVR7,30HMOVDPTR,#8300HMOVA,#69HMOVX@DPTR,ASETBTR1WO3:LCALLGETKEY;读键盘CJNEA,#0FFH,JB3;判断是否有键输入MOVA,BCJNEA,#3FH,PUSHB3;若是按下F,则清零并且返回MOVR4,#1LCALLGETWORD;读倒计时时间数MOVA,BMOVB,#10DIVABSWAPAADDA,BMOVR7,A;保存输入的值INCAMOV30H,ALCALLDISPLAY;显示时间PUSHB3:CJNEA,#3BH,PUSHC3;若是按下B,则清零并且返回WAITCLRTR1;关计数器MOVR3,#0H;小时清零MOVR2,#0H;分钟清零MOVR1,#0H;秒清零MOVR0,#20;10毫秒清零MOVR7,#0H;倒计时时间清零MOVR6,#0FFH;置秒标志AJMPWAITPUSHC3:CJNEA,#3CH,PUSHD3MOVR7,#3;若按下C,输出3秒红灯MOVDPTR,#8300HMOVA,#0FHMOVX@DPTR,APUSHD3:CJNEA,#3DH,PUSHE3;若按下D,南北绿灯5秒MOVR7,#5MOVA,#96HMOVX@DPTR,APUSHE3:CJNEA,#3EH,JB3MOVR7,#5MOVA,#69HMOVX@DPTR,AJB3:CJNER7,#0H,WO3RET;STATION4STATION4:MOVR7,#3MOVDPTR,#8300HMOVA,#09HMOVX@DPTR,ASETBTR1WO4:LCALLGETKEY;读键盘CJNEA,#0FFH,JB4;判断是否有键输入MOVA,BCJNEA,#3FH,PUSHB4;若是按下F,则清零并且返回 MOVR4,#1LCALLGETWORD;读倒计时时间数MOVA,BMOVB,#10DIVABSWAPAADDA,BMOVR7,A;保存输入的值INCAMOV30H,ALCALLDISPLAY;显示时间PUSHB4:CJNEA,#3BH,PUSHC4;若是按下B,则清零并且返回WAITCLRTR1;关计数器MOVR3,#0H;小时清零MOVR2,#0H;分钟清零MOVR1,#0H;秒清零MOVR0,#20;10毫秒清零MOVR7,#0H;倒计时时间清零MOVR6,#0FFH;置秒标志AJMPWAITPUSHC4:CJNEA,#3CH,PUSHD4MOVR7,#3;若按下C,输出3秒红灯MOVDPTR,#8300HMOVA,#0FHMOVX@DPTR,APUSHD4:CJNEA,#3DH,PUSHE4;若按下D,南北绿灯5秒MOVR7,#5MOVA,#96HMOVX@DPTR,APUSHE4:CJNEA,#3EH,JB4MOVR7,#5MOVA,#69HMOVX@DPTR,AJB4:CJNER7,#0H,WO4RET;电子钟停止的部分STOP_T:;电子钟停止计时子程序CLRTR1RET;时钟设置部分SET_T:;设置初值子程序CLRTR1;关计数器MOVR4,#7LCALLGETWORD;读小时数CJNEA,#0FFH,INVALID;判断输入合法性MOVA,BADDA,#232JCINVALID;判断输入小时值<24MOVA,BMOVB,#10DIVABSWAPAADDA,BMOVR3,A;保存输入的值MOVR4,#5LCALLGETWORD;读分钟数CJNEA,#0FFH,INVALID;判断输入合法性MOVA,BADDA,#196JCINVALID;判断输入分钟数<60MOVA,BMOVB,#10DIVABSWAPAADDA,BMOVR2,A;保存输入的值MOVR4,#3LCALLGETWORD;读秒钟数CJNEA,#0FFH,INVALID;判断输入合法性MOVA,BADDA,#196JCINVALID;判断输入分钟值<60MOVA,BMOVB,#10DIVABSWAPAADDA,BMOVR1,A;保存输入的值AJMPSET_TOKSET_COUT:MOVR4,#1LCALLGETWORD;读倒计时时间数CJNEA,#0FFH,INVALID;判断输入合法性MOVA,BMOVB,#10DIVABSWAPAADDA,BMOVR7,A;保存输入的值INCAMOV30H,AAJMPSET_TOKINVALID:LCALLCLEAR_T;时间清零SET_TOK:LCALLDISPLAY;显示时间RET;读取输入按键的部分GETWORD:;读数子程序WKEY1:LCALLGETKEY;读键盘CJNEA,#0FFH,WKEY1;无键输入,则再读MOVA,BADDA,#0C6HJCERROR1;判断输入是否大于9MOVA,BSUBBA,#30HJCERROR1;判断输入是否小于0MOVR5,ALCALLDISLED;显示输入的字符MOVB,#10MULABPUSHACC;保存输入的值WKEY2:LCALLGETKEY;读键盘CJNEA,#0FFH,WKEY2;无键输入则再读MOVA,BADDA,#0C6H;判断输入是否大于9JCERROR2MOVA,BSUBBA,#30H;判断输入是否小于0JCERROR2DECR4MOVR5,ALCALLDISLED;显示输入的字符MOVB,APOPACCADDA,BMOVB,A;把得到的值存在BMOVA,#0FFH;置合法输入标志AJMPKEYOKERROR2:POPACCERROR1:MOVA,#0;置非法输入标志KEYOK:RET;8279初始化INIT8279:;8279初始化子程序PUSHDPH;保存现场PUSHDPLPUSHACCLCALLDELAY;延时MOVDPTR,#Z8279MOVA,#LEDMOD;置8279工作方式MOVX@DPTR,AMOVA,#LEDFEQ;置键盘扫描速率MOVX@DPTR,AMOVA,#LEDCLS;清除LED显示MOVX@DPTR,APOPACC;恢复现场POPDPLPOPDPHRET;读取键盘子程序GETKEY:;输入:无;输出:B:读到的键码A:按键的标志PUSHDPH;保存现场PUSHDPLPUSHPSWMOVDPTR,#Z8279MOVXA,@DPTR;读8279状态ANLA,#07H;屏蔽D7-D3JNZGETVAL;判断是否有键输入MOVA,#0H;置标志(无键输入)SJMPNKBHITGETVAL:MOVA,#READKB;读FIFORAM命令MOVX@DPTR,AMOVDPTR,#D8279MOVXA,@DPTR;读键ANLA,#3FH;屏蔽SHIFT和CTRL键MOVDPTR,#KEYCODE;键码表起始地址MOVCA,@A+DPTR;查表MOVB,A;置返回键值MOVA,#0FFH;置标志(有键输入)NKBHIT:POPPSW;恢复现场POPDPLPOPDPHRET;T1定时器中断控制部分,INT_T1:;INT_T1中断服务子程序PUSHDPH;保护现场PUSHDPLPUSHACCPUSHPSWMOVTL1,#00H;50毫秒定时常数MOVTH1,#4CHDJNZR0,EXIT;判断毫秒=0MOVR0,#20;DELAY1SECONDMOVR6,#0FFH;置秒标志COUNT1:MOVA,R7ADDA,#99HDAAMOVR7,A;减1CJNER1,#59H,SECOND;判断秒=59MOVR1,#99HCJNER2,#59H,MINUTE;判断分=59MOVR2,#99HCJNER3,#23H,HOUR;判断时=23MOVR3,#99HHOUR:MOVA,R3ADDA,#1;时加1DAAMOVR3,AMINUTE:MOVA,R2ADDA,#1;分加1DAAMOVR2,ASECOND:MOVA,R1ADDA,#1;秒加1DAAMOVR1,A;判断是否到了特定时间7~8,17~18点CJNER3,#7,EXIT1MOV40H,#5SJMPSHOWT CJNER3,#00010111B,EXIT1MOV40H,#5SJMPSHOWTEXIT1:MOV40H,#0SHOWT:CJNER6,#0FFH,EXIT;若无秒标志则循环LCALLDISPLAY;显示时间MOVR6,#0;清标志EXIT:POPPSW;恢复现场POPACCPOPDPLPOPDPHRETI;中断返回;实验帮助11延时部分,不太清楚具体功能是什么,可能是键盘消抖DELAY:;延时子程序PUSH0;保存现场PUSH1MOV0,#0HDELAY1:MOV1,#0HDJNZ1,$DJNZ0,DELAY1POP1;恢复现场POP0RET;显示控制部分,但不是具体显示部分DISPLAY:MOVA,R3ANLA,#0FHADDA,#10HMOVR5,AMOVR4,#6LCALLDISLED;显示小时低位MOVA,R3SWAPAANLA,#0FHMOVR5,AMOVR4,#7LCALLDISLED;显示小时高位MOVA,R2ANLA,#0FHADDA,#10HMOVR5,AMOVR4,#4LCALLDISLED;显示分钟低位MOVA,R2SWAPAANLA,#0F
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 西京学院《室内陈设设计》2022-2023学年第一学期期末试卷
- 音乐万马奔腾课件
- 西京学院《版面设计》2023-2024学年第一学期期末试卷
- 西华师范大学《小学语文课程与教学》2022-2023学年第一学期期末试卷
- 西华师范大学《水污染防治技术》2023-2024学年第一学期期末试卷
- 西华师范大学《摄影与摄像技艺》2021-2022学年第一学期期末试卷
- 9正确认识广告 说课稿-2024-2025学年道德与法治四年级上册统编版
- 电工高级工专项测试题及答案
- 第十二章第二节《滑轮》说课稿 -2023-2024学年人教版八年级物理下册
- 2024年代森锰锌行业前景分析:代森锰锌行业发展趋势推动行业国际化
- 高中数学竞赛平面几何讲座
- CJJ101-2016 埋地塑料给水管道工程技术规程
- DL-T5710-2014电力建设土建工程施工技术检验规范
- 2024年春季国开《学前教育科研方法》期末大作业(参考答案)
- 储能技术系统安全评估与风险控制
- 《医疗卫生信用信息规范》
- 牙周病学考试模拟题+答案
- 样衣制作办单
- 物理与文化智慧树知到期末考试答案章节答案2024年山东大学
- 医院岗前法律法规培训
- MOOC 太极拳初级-浙江大学 中国大学慕课答案
评论
0/150
提交评论