资源预览内容
第1页 / 共9页
第2页 / 共9页
第3页 / 共9页
第4页 / 共9页
第5页 / 共9页
第6页 / 共9页
第7页 / 共9页
第8页 / 共9页
第9页 / 共9页
亲,该文档总共9页全部预览完了,如果喜欢就下载吧!
资源描述
掌握外部中断、定时器使用方法掌握外部中断、定时器使用方法, ,掌握单片机管理键盘、显示器的方掌握单片机管理键盘、显示器的方法法单片机程序设计悬赏分:15 - 解决时间:2010-5-5 16:50 设计目的掌握外部中断、定时器使用方法,掌握单片机管理键盘、显示器的方法。技术指标1.南北方向绿灯亮 15 秒,闪烁 2 次;黄灯亮 2 秒;红灯亮 10 秒;2.东西方向绿灯亮 10 秒,闪烁 2 次,黄灯亮 2 秒;红灯亮 15 秒;3.紧急情况(救护车、救火车等紧急救援车通过时) ,东西、南北方向为红灯,持续 10 秒钟。中断方式申请紧急通过方式。4.红灯亮、绿灯亮读秒倒计时显示。*5.南北、东西方向通行、禁止时间可根据实际情况设定。设计方案1.P1 口控制 6 个 LED 灯(2 组红绿黄灯) ;2.定时器产生定时时间;3.6 为 LED 数码管用来显示东西、南北方向读秒倒计时;4.按键设定南北、东西方向通行、禁止时间 问题补充:急! 问题补充:回答者请把详细程序写上,本人不胜感激 各位大哥,怎么没人帮忙呢?小弟很着急啊!谢谢了提问者: 吴凤禄 - 一级最佳答案你分太少了。要求还这么多。 。这里有个例子,自己看吧ljmp _int0;=实现交通灯循环显示=main:setb it0setb ex0setb eamov 50h, #20 ;主红灯参数mov 51h, #5 ;主黄灯参数mov 52h, #15 ;主绿灯参数mov 53h, #20mov 54h, #5mov 55h, #15M_LOOP:mov 20h, 50H ;主红灯参数mov 30h, 51H ;主黄灯参数mov 40h, 52H ;主绿灯参数mov 21h, 53Hmov 31h, 54Hmov 41h, 55Hzhuhong:clr p2.0 ;主红灯亮mov a, 20h ;主红灯参数lcall xs1 ;显示clr p2.4 ;支绿灯亮mov a, 41h ;支绿灯参数lcall xs2 ;显示lcall delay ;延时 1sdec 20h ;主红灯参数减一dec 41h ;支绿灯参数减一mov r0, 41hcjne r0, #0, zhuhong ;判断支绿灯参数是否为零,为零进入第二阶段zhihuang:clr p2.0 ;主红灯亮mov a, 20h ;主红灯剩余的参数lcall xs1 ;显示setb p2.4 ;支绿灯灭clr p2.3 ;支黄灯亮mov a, 31h ;支黄灯的参数lcall xs2 ;显示lcall delaydec 20hdec 31hmov r0, 31h ;支黄灯的参数cjne r0, #0, zhihuangzhulv:setb p2.0 ;主红灯灭clr p2.1 ;主绿灯亮mov a, 40h ;主绿灯参数lcall xs1 ;显示setb p2.3 ;支黄灯灭clr p2.5 ;支红灯亮mov a, 21h ;支红灯参数lcall xs2 ;显示mov a, 21hlcall delaydec 40hdec 21hmov r0,40hcjne r0, #0, zhulvzhuhuang:clr p2.2 ;主黄灯亮setb p2.1 ;主绿灯灭mov a, 30h ;主黄灯参数lcall xs1 ;显示clr p2.5 ;支红灯亮mov a, 21h ;支红灯参数lcall xs2 ;显示lcall delaydec 21hdec 30h; mov a, 30h ;主黄灯参数 ;就是这行,a 改成下面的 r0,就行了。mov r0, 30h ;主黄灯参数cjne r0, #0, zhuhuangsetb p2.2setb p2.5Ljmp M_LOOP;=移位后显示计数值=xs1:mov dptr, #tabmov b, #10div abswap aadd a, bmov b, aanl a, #0fhmovc a, a+dptrmov r0, #08hloop0:rlc amov p0.1, clcall clk0djnz r0, loop0mov a, banl a, #0f0hswap amovc a, a+dptrmov r0, #08hloop1:rlc amov p0.1, clcall clk0djnz r0, loop1ret;-xs2:mov dptr, #tabmov b, #10div abswap aadd a, bmov b, aanl a, #0fhmovc a, a+dptrmov r0, #08hloop2:rlc amov p0.3, clcall clk1djnz r0, loop2;-mov a, banl a, #0f0hswap amovc a, a+dptrmov r0, #08hloop3:rlc amov p0.3, clcall clk1djnz r0, loop3ret;-中断子程序-_int0:clr eapush accmov 20h, #00hmov 30h, #00hmov 40h, #00hmov 21h, #00hmov 31h, #00hmov 41h, #00h_LOOP:jnb p1.0, lp0 ;主黄jnb p1.1, lp1 ;主绿 jnb p1.2, lp2 ;支黄jnb p1.3, lp3 ;支绿 jnb p1.4, lp4 ;开始SJMP _LOOP ;循环检测按键lp0:LCALL dl10 ;延时一会,用以消抖JB P1.0, _LOOP ;为 1 就是抖动,转回去inc 30h ;主黄灯参数加一MOV A, 30Hlcall xs1 ;加一后再显示,inc 21h ;支红灯参数加一MOV A, 21Hlcall xs2JNB P1.0, $SJMP _LOOP ;继续检测按键lp1:LCALL dl10JB P1.1, _LOOPinc 40h ;主绿灯参数加一MOV A, 40Hlcall xs1inc 21h ;支红灯参数加一MOV A, 21Hlcall xs2JNB P1.1, $SJMP _LOOP ;继续检测按键lp2:LCALL dl10JB P1.2, _LOOPinc 31h ;支黄灯参数加一MOV A, 31Hlcall xs2inc 20h ;主红灯参数加一MOV A, 20Hlcall xs1JNB P1.2, $SJMP _LOOP ;继续检测按键lp3:lCALL dl10JB P1.3, _LOOPinc 41h ;支绿灯参数加一MOV A, 41Hlcall xs2inc 20h ;主红灯参数加一MOV A, 20Hlcall xs1JNB P1.3, $ ;等待松开SJMP _LOOP ;继续检测按键lp4:lCALL dl10JB P1.4, _LOOPJNB P1.4, $;退出前,把修改的参数,保存在缓冲空间mov 50h, 20H ;主红灯参数mov 51h, 30H ;主黄灯参数mov 52h, 40H ;主绿灯参数mov 53h, 21Hmov 54h, 31Hmov 55h, 41HPOP ACCSETB EAreti;=时钟脉冲设置=clk0:clr p0.0setb p0.0clr p0.0ret;-clk1:clr p0.4setb p0.4clr p0.4ret;=延时子程序=delay: mov r7,#20del0: mov r6,#50del1: mov r5,#250del2: nopnopdjnz r5, del2djnz r6,del1djnz r7,del0ret;-dl10: mov 60h, #10 ;10 毫秒d1: mov 61H, #250djnz 61H, $djnz 60H, d1ret;-TAB: DB 0C0H,0F9H,0A4H,0B0HDB 99H,92H,82H,0F8HDB 80H,90H,88H,83HDB 0C6H,0A1H,86H,8EH 1
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号