找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2247|回复: 2
收起左侧

求大神解答单片机交通灯程序问题,后面的display读不懂啊。

[复制链接]
ID:507371 发表于 2019-5-22 20:48 | 显示全部楼层 |阅读模式

(1)开关键盘a、改变数码管显示的时间;b、开关控制十字路口十个方向的灯同时显示红灯且数码管显示00。

(2) 由AT89C51单片机每秒钟通过P0、P2口向74LS47的数据口送信息,由P1口显示红、绿、黄灯的燃亮情况;由7SEG-MPX2-CA显示每个灯的燃亮时间。

(3)AT89C51 P3.3为低电平时,P1口对应的红灯即四个方向的红灯亮,数码显示为00.

(4 AT89C51 P3.2有下降沿触发时,时间暂停,进入时间显示状态,当P3.6为低电平时,时间显示以240ms的速度进行加1;当P3.7为低电平时,时间显示以240ms的速度进行减1;当P1.0为低电平时,时间暂停消除,恢复正常。

(5)初始状态东西方向绿灯60秒南北方向红灯65秒。

(6)当东西方向绿灯60秒倒计时完了。进入下一阶段,东西方向黄灯3秒,且黄灯以40ms的速度闪烁;南北方向红灯5秒。

(7)当东西方向黄灯3秒倒计时完。进入第三阶段,东西方向红灯40秒;南北方向红灯2秒。

(8)当南北方向红灯2秒倒计时完。进入第四阶段,东西方向红灯38秒;南北方向绿灯35秒。

(9)当南北方向绿灯35秒倒计时完。进入第五阶段,东西方向红灯3秒;南北方向黄灯3秒,且黄灯以40ms的速度闪烁。

(10)东西方向红灯和南北方向黄灯3秒同时倒计时完毕,重新循环。

ORG 0000H      ;伪指令、程序开始、中断入口地址

     LJMP MAIN

     ORG 0003H

     LJMP ZHD1

     ORG 000BH

     LJMP ZHD2

     ORG 0013H

     LJMP ZHD3

     ORG 1000H

;主程序

MAIN:MOV TMOD,#01H     ;设工作方式

     MOV TL0,#0F0H      ;设初值 ,单片机晶振12M,定时10ms

     MOV TH0,#0D8H

     SETB EA           ;开放总中断

     SETB ET0          ;开放T0中断

     SETB TR0          ;启动T0定时

     SETB EX0          ;开放外中断0

     SETB EX1          ;开放外中断1

     SETB IT0          ;设外中断0为边沿触发

     CLR IT1           ;设外中断1为低电平有效

     SETB PT0

CYCLE:MOV R0,#60        ;AB方向绿灯显示时间

     MOV R1,#65        ;CD方向红灯显示时间

     MOV R2,#25        ;为延时1秒而用

;CD红灯 AB绿灯

LOOP1:SETB P3.4

      MOV P1,#01H

      SETB P1.7        ;点亮红灯

      SETB P1.4        ;点亮绿灯

      LCALL DISPLAY    ;调用显示程序

      DJNZ R2,LOOP1

      MOV R2,#25

      DEC R1

      DJNZ R0,LOOP1

      MOV R0,#3        ;AB方向黄灯显示时间

;CD红灯 AB黄灯

LOOP2:MOV P1,#01H

      SETB P1.7        ;点亮红灯

      SETB P1.3        ;点亮黄灯

LLJ:  LCALL DISPLAY     ;调用显示程序

      CPL P1.3

      DJNZ R2,LLJ

      DEC R1

      MOV R2,#25

      DJNZ R0,LOOP2

      MOV R0,#40       ;AB方向红灯显示时间

;CD红灯 AB红灯

LOOP3:MOV P1,#01H

      SETB P1.7        ;点亮红灯

      SETB P1.2        ;点亮红灯

      LCALL DISPLAY    ;调用显示程序

      DJNZ R2,LOOP3

      MOV R2,#25

      DEC R0

      DJNZ R1,LOOP3

      MOV R1,#35       ;CD方向绿灯显示时间

;CD绿灯  AB红灯

LOOP4:MOV P1,#01H

      SETB P1.5         ;点亮绿灯

      SETB P1.2         ;点亮红灯

      LCALL DISPLAY     ;调用显示程序

      DJNZ R2,LOOP4

      MOV R2,#25

      DEC R0

      DJNZ R1,LOOP4

      MOVR1,#3          ;CD方向黄灯显示时间

;CD黄灯  AB红灯

LOOP5:MOV P1,#01H

      SETB P1.6          ;点亮黄灯

      SETB P1.2          ;点亮红灯

LLJ1: LCALL DISPLAY       ;调用显示程序

      CPL P1.6

      DJNZ R2,LLJ1

      MOV R2,#25

      DEC R0

      DJNZ R1,LOOP5

      LJMP CYCLE

;键盘中断程序

ZHD1: LCALL DISPLAY

      JB P3.6,Q2

      INC R1

      INC R0

      CJNE R1,#99,TIAO2

      MOV R1,#00H

TIAO2:CJNE R0,#99,TIAO3

      MOV R0,#00H

TIAO3:LCALL DISPLAY                                          

      LCALL DISPLAY

      LCALL DISPLAY

      LCALL DISPLAY

      LCALL DISPLAY

      LCALL DISPLAY

      JNB P1.0,Z2

Q2:   JB P3.7,WAIT1

      DEC R1

      DEC R0

      CJNE R1,#00H,TIAO

      MOV R1,#99

TIAO: CJNE R0,#00H,TIAO1

      MOV R0,#99

TIAO1:LCALL DISPLAY

      LCALL DISPLAY

      LCALL DISPLAY

      LCALL DISPLAY

      LCALL DISPLAY

      LCALL DISPLAY

WAIT1:JNB P1.0,Z2

WAIT: LJMP ZHD1

Z2:   RETI

;时间中断程序

ZHD2: MOV TL0,#0F0H      ;重先赋值

      MOV TH0,#0D8H

      CLR P3.4

      RETI

;应急通道中断程序

ZHD3:MOV P1,#85H

     MOV P0,#30H        

     MOV P2,#30H

     JNB P3.3,ZHD3

     RETI

;数显显示

DISPLAY:MOV A,R0      ;AB方向时间的显示

        MOV B,#10

        DIV AB        ;把要显示的数的十位存放在A中,个位存放在B中

        ADD A,#10H    ;位选通十位

        MOV P0,A      ;显示十位数字

TI0:    JNB P3.4,TT

        SJMP TI0

TT:     SETB P3.4

        MOV A,B

        ADD A,#20H    ;位选通个位

        MOV P0,A      ;显示个位数字

TI1:    JNB P3.4,TT1

        SJMP TI1

TT1:    SETB P3.4

;CD方向的显示

        MOV A,R1       ;CD方向时间的显示

        MOV B,#10

        DIV AB

        ADD A,#10H     ;位选通十位

        MOV P2,A      ;显示十位数字

TI2:    JNB P3.4,TT2

        SJMP TI2

TT2:    SETB P3.4

        MOV A,B

        ADD A,#20H     ;位选通个位

        MOV P2,A       ;显示个位数字

TI3:    JNB P3.4,TT3

        SJMP TI3

TT3:    SETB P3.4

   RET
回复

使用道具 举报

ID:507371 发表于 2019-5-22 20:49 | 显示全部楼层
键盘中断哪里也是一头雾水,能不能简单一点。
回复

使用道具 举报

ID:401564 发表于 2019-5-23 15:36 | 显示全部楼层
汇编就是这样的了,你得自己去,一条指令一条指令的去理解,然后再把整个子程序的意思关联起来,自下向上的一个一个子程序的去理解。没有人帮得了你的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表