久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5575|回復: 6
打印 上一主題 下一主題
收起左側

關于c51單片機交通燈匯編程序怎么加一個緊急狀態按鍵的問題

[復制鏈接]
跳轉到指定樓層
樓主
能不能在這個交通燈系統里,加上一個緊急狀態按鍵,使所有紅燈亮。


單片機程序在下面:
         ORG 0000H ;主函數地址
         LJMP MAIN
         ORG 000BH ;中斷定時器0 地址
         LJMP INTERPUT

         ORG 0030H ;表的首地址
         LJMP TABLE
TABLE:   DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

MAIN:
         MOV P2, #00H             ;給P2 口賦初值,讓數碼管剛開始都不亮
         MOV R2, #60              ;給R2 賦60,使東西的數碼管顯示初值為60
         MOV R3, #40              ;給R3 賦40,使南北的數碼管顯示初值為40
         MOV P3, #0              ;使人形道的燈初始都不亮
         MOV R5, #0                ;給R5,R6 賦初值0
         MOV R6, #0
         MOV TMOD, #01H              ;定時器0 工作方式1
         MOV TH0, #79                  ;給定時器賦初值
         MOV TL0, #0AEH
         SETB EA                     ;允許總中斷
                 SETB EX0
                 SETB IT0
         SETB ET0             ;開啟定時器0 中斷
         SETB TR0                  ;開啟定時器計時
                  
L2:
       LCALL DISPLAY1                    ;顯示東西數碼管
       LCALL DISPLAY2               ;顯示南北數碼管
       LCALL CHOOSE1                ;調用東西判斷函數
       LCALL CHOOSE2             ;調用南北判斷函數
       SJMP L2                     ;一直循環




INTERPUT:
            MOV TH0, #22H           ;定時器中斷里重現給定時器0 賦初值
            MOV TL0, #0D8H
            MOV A, R4
            INC R4                  ;定時器中斷一次50MS,中斷一次R4+1
            CJNE A, #20,L3           ; 判斷是不是加到20 了,即定時器定時1S
            MOV R4, #0              ;R4 加到20,則清0
            DEC R3                  ;要是定時1S 到了,則把R2,和R3 的值都減1
            DEC R2
L3:
             RETI                   ;中斷退出




CHOOSE1:                            ;東西判斷函數
            MOV A, R5                   ;R5是一個標志
           CJNE A, #1, K1               ;判斷R5 是不是等于1,不等于1 跳到K1
           MOV A, R2                ;要是標志位等于1
           CJNE A, #4, K5              ;而且R2 等于4,則開啟黃燈,關閉車道綠燈
           SETB P3.2
             CLR P3.3
            SJMP K3
  K5:      JNC K3                  ;要是R2 小于4 則閃爍綠燈
           CPL P1.7
           MOV A, R2
           CJNE A, #0, K3               ;判斷R2 是不是等于0,
              INC R5                    ;等于0 則讓標志位+1
             CLR P3.2                  ;清黃燈,開車道的左行綠燈,置人行道紅燈
           SETB P3.0
            MOV R2, #20
          SETB P2.6
           CLR P2.7
           SJMP K3
   K1:        JNC K2                     ;CJNE 這個指令比較好R5 和1 的值,要是R5 大于1,則C=0,反之C=1,這里判斷C 是否等于0,既判斷是否小于1,小于1 執行下行, 大于1 則跳轉K2
           MOV A, R2
           CJNE A, #60, K7               ;初值狀態R2 是60,判斷R2 是不是60,60 的話開車道的紅燈,開人行道的綠燈
           SETB P3.1
            SETB P2.7
           CLR P2.6
            SJMP K3                      ;退出
  K7:     CJNE A, #0, K3                 ;要是R2 不等于60,判斷R2 是不是等于0,等于0 則把標志位R5 加1,讓車道綠燈亮,紅燈滅,人行道紅燈亮
          INC R5
          CLR P3.1
           SETB P3.3
          MOV R2, #40                      ;再給數碼管賦初值
           CLR P2.7
          SETB P2.6
          SJMP K3                          ;退出
  K2:     MOV A, R2                        ;標志位R5 大于1 則跳到這里
          CJNE A, #4, K6                      ;判斷R2 和4 的值, 等于4 則開啟黃燈, 關閉車道的綠燈,要是不等于是,則跳到K6
           CLR P3.0
            SETB P3.2           SJMP K3
K6:     JNC K3                          ;判斷R2 是不是小于4,小于4 則閃爍黃燈,大于4 則直接退出
          CPL P3.2                       ;取反
         MOV A, R3
          CJNE A, #0, K3                     ;判斷R2 是不是等于0
            MOV R5, #0                         ;等于0 則清標志位,因為我們只設置了0.1.2 這三個狀態,到2了以后要清0,讓他重新開始循環
           MOV R2, #60                         ;給R2 賦初值,開車道紅燈,關車道左行綠燈,開人行道綠燈,關人行道紅燈
            SETB P3.1
           CLR P3.2
          SETB P2.7
          CLR P2.6
  K3:     RET








CHOOSE2:                       ;南、北判斷函數,程序和東、西判斷一致
              MOV A, R6
               CJNE A, #1, H2
                MOV A, R3
                CJNE A, #4, H6
               SETB P3.6
                CLR P3.4
                SJMP H3
  H6:             JNC H3
                 CPL P3.6
                CJNE A, #0, H3
                 INC R6
                 CLR P3.6
                  SETB P3.5
                MOV R3, #60
                 SETB P2.4
                 CLR P2.5
                 SJMP H3
  H2:           JNC H4
             MOV A, R3
            CJNE A, #40,H7
            SETB P3.7
            SETB P2.5
            CLR P2.4
            SJMP H3
H7:            MOV A, R3
          CJNE A, #4, H5
            SETB P3.6
            CLR P3.7
             SJMP H3
H5:           JNC H3
             CPL P3.6
                CJNE A, #0, H3
                SETB P3.4
           CLR P3.6
           INC R6
              MOV R3, #20
              SETB P2.5
              CLR P2.4
              SJMP H3
H4:
              MOV A, R3
              CJNE A, #0, H3
            SETB P3.7
                  CLR P3.5
               MOV R6, #0
             MOV R3, #40
                SETB P2.5
            CLR P2.4
H3:     RET





DISPLAY1:                            ;顯示東西數碼管(動態顯示)
              MOV A, R2 ;將R2 放到A 中
              MOV B, #10
              DIV AB ;將2 位的10 進制數的十位和個位分開
              MOV DPTR, #TABLE ; 取TABLE 表的首地址給DPTR
              MOVC A, @A+DPTR ;把表的第N 個數據給A
              MOV P1, A ;把數據送到數碼管中
              SETB P2.0 ;顯示數碼管
              LCALL DELAY ;延時
              CLR P2.0 ;把數碼管暗掉
              MOV A ,B ;把個位給A
              MOVC A, @A+DPTR ;把表的個位個數給A
              MOV P1, A ;把數據送到數碼管中
              SETB P2.1 ;顯示數據
              LCALL DELAY ;延時
              CLR P2.1 ;讓數碼管暗掉
              RET




DISPLAY2:                             ;顯示南北數碼管(顯示函數和上面一樣,這里注釋就不寫了)
              MOV A, R3
              MOV B, #10
             DIV AB
             MOV DPTR, #TABLE
             MOVC A, @A+DPTR
             MOV P0, A
             SETB P2.2
             LCALL DELAY
             CLR P2.2
             MOV A, B
             MOVC A, @A+DPTR
             MOV P0, A
             SETB P2.3
             LCALL DELAY
             CLR P2.3
             RET



DELAY:              ;延時函數
             MOV R0, #20
L1:              MOV R1, #25
             DJNZ R1, $
             DJNZ R0, L1
             RET
END

圖片1.png (71 KB, 下載次數: 102)

圖片1.png
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:439075 發表于 2018-12-30 18:05 | 只看該作者
在標號L2之后,加一段檢測緊急按鈕,未按下則執行原有的語句,檢測到按下后全部亮紅燈的代碼,緊急代碼結束后轉到L2。
回復

使用道具 舉報

板凳
ID:447275 發表于 2018-12-30 19:38 | 只看該作者
bucker 發表于 2018-12-30 18:05
在標號L2之后,加一段檢測緊急按鈕,未按下則執行原有的語句,檢測到按下后全部亮紅燈的代碼,緊急代碼結束 ...

那按鈕接到哪個I/O口 ?
回復

使用道具 舉報

地板
ID:447275 發表于 2018-12-30 19:53 | 只看該作者
bucker 發表于 2018-12-30 18:05
在標號L2之后,加一段檢測緊急按鈕,未按下則執行原有的語句,檢測到按下后全部亮紅燈的代碼,緊急代碼結束 ...

檢測程序你可以幫我寫一下,讓我看一下不?   我不太懂那個緊急狀態按鍵接到哪個引腳上去,  仿真上所有引腳都用了,好像沒有地方接按鍵了啊
回復

使用道具 舉報

5#
ID:678072 發表于 2019-12-31 18:31 | 只看該作者
你好老哥,問題解決了嗎
回復

使用道具 舉報

6#
ID:195446 發表于 2020-1-1 17:12 | 只看該作者
緊急按鈕采用的中斷方式,所以按鈕接在P3.2,程序里要寫中斷服務程序:
ORG 0003H ;外部中斷0 地址
LJMP INTERPUT0
。
。
INTERPUT0:MOV ........;全部紅燈亮
                   LCALL DELAY
                   LCALL DISPLAY
                  RETI

你的連接把P3.2口占用了,需要調整空出來。
回復

使用道具 舉報

7#
ID:558309 發表于 2020-1-1 18:04 | 只看該作者
加一個輸入中斷,當你按鍵按下跳入中斷,中斷執行程序讓所有紅燈都亮,同時關閉綠燈
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美天堂一区 | 成年人在线视频 | 国产激情视频在线观看 | 日韩精品一区二区三区老鸭窝 | 自拍视频精品 | 在线免费看黄 | 精品久久国产 | 久久综合成人精品亚洲另类欧美 | 91欧美激情一区二区三区成人 | 国内自拍偷拍 | 成人免费在线观看 | 亚洲 欧美 日韩在线 | 久久精品国产一区 | 欧美精品成人一区二区三区四区 | 久久噜噜噜精品国产亚洲综合 | 午夜网 | 日韩在线中文字幕 | 久久成人国产精品 | 欧美三级视频在线观看 | 欧美视频在线播放 | 黄色一级视频免费 | 日韩中文字幕 | 超碰操| 久久一级免费视频 | 99福利视频导航 | 中文字幕亚洲一区二区va在线 | 成人影视网 | 一二区成人影院电影网 | 亚洲男女视频在线观看 | 国产日韩一区二区三免费高清 | 一区二区三区在线 | 国产高清精品一区二区三区 | 日韩精品久久久 | 中文字幕在线免费 | 毛片1| 国产在线一区二区 | 天天操天天干天天曰 | 国产亚洲欧美日韩精品一区二区三区 | 国产精品成av人在线视午夜片 | 狠狠涩 | 亚洲国产视频一区二区 |