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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機數碼管那一段匯編程序看不懂

[復制鏈接]
跳轉到指定樓層
樓主
ID:928089 發表于 2021-6-7 17:12 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. DQ      EQU     P3.3            ;P3.3定義接口,參考STC89C51數據手冊
  2. EX2     EQU     P3.2            ;外部中斷0,參考STC89C51數據手冊
  3. SEG1    EQU     0ffech          ;數碼管1(最右)
  4. SEG2    EQU     0ffedh          ;數碼管2
  5. SEG3    EQU     0ffeeh          ;數碼管3
  6. SEG4    EQU     0ffefh          ;數碼管4(最左)
  7. BYT_DLY EQU     5FH             ;延時函數參數變量
  8. DA_BUF  EQU     40H             ;解碼出的數據緩沖區,包括41H


  9.                 ORG 0000h
  10.                 LJMP MAIN

  11.                 ORG 003H       ;外部中斷0入口地址,參考STC89C51數據手冊
  12.                 LJMP EINT3

  13.                 ORG 40H
  14. MAIN:           MOV SP,#60H
  15.                 SETB EA
  16.                 SETB EX0
  17.                 SJMP $;         ;原地踏步,等中斷解碼


  18. ;//中斷接收解碼模塊

  19. EINT3:          CLR EA;//關閉
  20.                 MOV R6,#10
  21. SB:             MOV BYT_DLY,#13 ;834uS
  22.                 LCALL DELAY     ;調用834微秒延時子程序
  23.                 JB DQ,EXIT      ;延時834微秒后判斷DQ腳是否出現高電平如果有就退出解碼程序
  24.                 DJNZ R6, SB     ;重復 10 次,目的是檢測在 9000 微秒內如果出現高電平就退出解碼程序
  25. ;-------------------------------;以上完成對遙控信號 起始碼 的 9000 微秒的初始低電平信號的識別!!!!!

  26.                 JNB DQ, $;      ;等待,避開 起始碼 低電平
  27.                 JB DQ,$;        ;避開結果碼


  28. ;/*;測試按鍵一次有多少位低電平,不同遙控器不一樣*/
  29. ;/*;電工電子中心投影遙控器只有32位,這對后邊程序參數設置關系重大
  30. ;                CLR A
  31. ;ADDLOOP:        JNB DQ,$
  32. ;               ADD A,#1
  33.   ;              MOV P1,A
  34.    ;             JB DQ,cADD
  35.    ;             sjmp $
  36. ;*/

  37.                 MOV R7,#16      ;忽略前16位系統識別碼 (即地址碼)
  38. AAQQ:           JNB DQ,$;       ;通過低電平段
  39.                 ;JB DQ,[        DISCUZ_CODE_1        ]nbsp;       ;以下6行代碼可以用本行替換,但這樣容易出現死機。
  40.                 MOV R6,#255
  41. CTN2:           JNB DQ,DER7     ;等待有效低電平到來,避開 結果碼 高電平
  42.                 MOV BYT_DLY,#3  ;42uS
  43.                 ACALL DELAY     ;調用42微秒延時子程序,延時太短,計數器R6不夠大,延時太長,會錯過最佳檢測點
  44.                 DJNZ R6,CTN2                     
  45.                 LJMP EXIT       ;防止死機
  46. DER7:           DJNZ R7,AAQQ

  47.                 MOV R1,#DA_BUF  ;設定1AH為起始RAM區
  48.                 MOV R2,#2       ;接收從DA_BUF到DA_BUF+1的2個內存,用于存放操作碼 (即數據碼) 和操作反碼
  49. PP:             MOV R3,#8       ;每組數據為8位
  50. JJJJ:           JNB DQ,[        DISCUZ_CODE_0        ]nbsp;       ;等待通過數據碼的低電平信號,等高電平到來后出去;
  51.                 MOV BYT_DLY,#13 ;834uS
  52.                 ACALL DELAY     ;高電平開始后用840(560<t<1125,)微秒的時間尺去判斷信號此時的高低電平狀態
  53.                 MOV C,DQ        ;將DQ引腳此時的電平狀態0或1存入C中
  54.                 JNC UUU         ;如果為0就跳轉到UUU
  55.                 ;JB DQ,[        DISCUZ_CODE_1        ]nbsp;       ;以下6行代碼可以用本行替換,但這樣容易出現死機。
  56.                 MOV R6,#255
  57. CTN3:           JNB DQ,UUU      ;等待有效低電平到來,避開 結果碼 高電平
  58.                 MOV BYT_DLY,#3  ;42uS
  59.                 ACALL DELAY     ;調用840微秒延時子程序
  60.                 DJNZ R6,CTN3            
  61.                 LJMP EXIT       ;防止死機

  62. UUU:            MOV A,@R1       ;將R1中地址的給A
  63.                 RRC A           ;將C中的值0或1移入A中的最低位
  64.                 MOV @R1,A       ;將A中的數暫時存放在R1數值的內存中
  65.                 DJNZ R3,JJJJ    ;接收滿8位換一個內存

  66.                 INC R1          ;對R1中的值加1,換下一個RAM
  67.                 DJNZ R2,PP      ;接收完8位數據碼和8位數據反碼,存放在1AH/1BH中                          

  68.                 MOV A,DA_BUF
  69.                 CPL A           ;對1AH取反后和1BH比較
  70.                 CJNE A,DA_BUF+1,EXIT    ;如果不等表示接收數據發生錯誤,放棄

  71.                 MOV R7,DA_BUF   ;將按鍵的鍵值通過數碼管顯示出來!
  72.                 ACALL DISP
  73. ;               CLR P1.0        ;蜂鳴器鳴響-嘀嘀嘀-的聲音,表示解碼成功               
  74.   ;              MOV BYT_DLY,#50
  75.   ;              ACALL DELAY
  76.   ;              SETB P1.0       ;蜂鳴器停止
  77. EXIT:           SETB EA
  78.                 RETI


  79. ;-------------------------延時子程序---------------------------------
  80. ;晶振22.1184M

  81. DELAY:   ;誤差 0us
  82.     MOV R6,#03H
  83. DL0:
  84.     MOV R5,#89H
  85.     DJNZ R5,$
  86.     DJNZ R6,DL0
  87.     RET

  88. ;//數碼管顯示,數據由R7傳入
  89. DISP:          MOV DPTR #LEDMAP
  90.                MOV A,R7
  91.                ANL A,#0FH
  92.                MOVC A,@A+DPTR
  93.                MOV DPTR,#SEG1
  94.                CPL A
  95.                MOVX @DPTR,A

  96.                MOV DPTR,#LEDMAP
  97.                 mov a,r7
  98.                 swap a                                 
  99.                 anl a,#0fh
  100.                 movc a,@a+dptr
  101.                 mov dptr,#SEG2
  102.                 cpl a
  103.                 movx @dptr,a

  104.                 mov dptr,#SEG3
  105.                 mov a,#0ffh
  106.                 movx @dptr,a
  107.                 mov dptr,#SEG4         
  108.                 movx @dptr,a  
  109.                 ret

  110. ledmap: db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,77h,7ch,39h,5eh,79h,71h,

  111.                 END
復制代碼

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

使用道具 舉報

沙發
ID:94031 發表于 2021-6-7 19:26 | 只看該作者
要看懂,先要理解數碼管顯示原理。
回復

使用道具 舉報

板凳
ID:155507 發表于 2021-6-7 20:24 | 只看該作者
軟件都是基于硬件條件編寫的,沒有原理圖 …不知道可不可以幫到你……

  1. ;//數碼管顯示,數據由R7傳入     數碼管靜態顯示電路 總線方式驅動
  2. DISP:          MOV DPTR #LEDMAP ;指針指向 數碼管段碼表
  3.                MOV A,R7         ;將數據由R7放入累加器
  4.                ANL A,#0FH       ;清除高 4 位
  5.                MOVC A,@A+DPTR   ;將數碼管段碼表 轉換數據放入累加器
  6.                MOV DPTR,#SEG1   ;指針指向數碼管1 0FFECH
  7.                CPL A            ;將 累加器 A中的值按位取反
  8.                MOVX @DPTR,A     ;輸出段碼

  9.                MOV DPTR,#LEDMAP ;指針指向 數碼管段碼表
  10.                 MOV A,R7        ;將數據由R7放入累加器
  11.                 SWAP A          ;累加器 A 中 低四位與高四位內容交換
  12.                 ANL A,#0FH      ;清除高 4 位
  13.                 MOVC A,@A+DPTR  ;將數碼管段碼表 轉換數據放入累加器
  14.                 MOV DPTR,#SEG2  ;指針指向數碼管2 0FFEDH
  15.                 CPL A           ;將 累加器 A中的值按位取反
  16.                 MOVX @DPTR,A    ;輸出段碼

  17.                 MOV DPTR,#SEG3  ;指針指向 數碼管3 0FFEEH
  18.                 MOV A,#0FFH     ;將數據0FFH 放入累加器  消隱       
  19.                 MOVX @DPTR,A    ;輸出段碼
  20.                 MOV DPTR,#SEG4  ;指針指向 數碼管4 0FFEFH        
  21.                 MOVX @DPTR,A    ;輸出段碼
  22.                 RET

  23. LEDMAP: db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,77h,7ch,39h,5eh,79h,71h, ;共陰極數碼管段碼表
復制代碼
回復

使用道具 舉報

地板
ID:298123 發表于 2021-6-8 15:04 | 只看該作者
為什么還要匯編?如果純粹學習,倒是可以研究一番
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕不卡在线观看 | 国产精品亚洲综合 | 欧美成人免费在线视频 | 欧美性一区二区三区 | 国产高清自拍视频在线观看 | 亚洲天堂精品一区 | 91精品国产麻豆 | 久久久久亚洲av毛片大全 | 男女性毛片 | 日韩精品在线播放 | 天天干狠狠操 | 一区二区在线免费观看 | 亚洲精品www | 亚洲一区二区在线播放 | 久久精品黄色 | 欧美.com | 中文字幕一区二区三区不卡在线 | 免费日韩网站 | 久久精品手机视频 | 日韩一区二区三区精品 | 国产高清区| 日韩欧美在线视频 | 精品欧美乱码久久久久久 | 精品国产乱码久久久久久1区2区 | 欧美精品一区二区三区在线 | 久久丝袜| 久久国产精品无码网站 | 中文字幕免费观看 | 久久三区 | 国产女人与拘做视频免费 | 91精品国产一区 | 精品在线免费看 | 日本在线免费看最新的电影 | 国产亚洲网站 | 精品国产乱码久久久久久老虎 | 亚洲国产精品一区二区三区 | 搞av.com| 欧美九九 | 在线观看黄色 | 日韩欧美一区二区三区免费观看 | 午夜影院在线观看视频 |