欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于C8051F310單片機的LED燈控制器匯編語言程序調試

[復制鏈接]
跳轉到指定樓層
樓主
ID:849000 發表于 2020-11-25 16:55 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
加深對51單片機及其接口電路的理解,掌握定時/計數器、中斷的應用編程技術及程序的調試方法。
2.實驗內容
利用C8051F310單片機設計一個倒計時定時器,功能要求如下:
模式1:基本功能
主要技術指標要求如下
1.  定時時間為9秒,定時精度為1秒 。
2.  在LED數碼管上顯示剩余時間。
3.  時間到0時,蜂鳴器鳴響1次(0.5秒鐘)。
4.  通過KINT鍵實現啟動和暫停功能,暫停時D9燈亮。
5.  利用單片機內部定時器定時,KINT鍵輸入和定時器控制均要求采用中斷方式。   
模式2:提高要求
1. 定時時間可通過鍵盤設定,最大為200秒。
2. 其它個性化設計。

二、設計思路
1.給主程序,T0、T1中斷和外部KINT鍵中斷設置入口地址;
2.初始化,將所要用到的寄存器都清零,將T0,T1的中斷都開啟,都設為方式1模式,并裝填各自的TH和TL,設好定時時間;
3.采用數據指針,指向TABLE表,TABLE表中存取數碼管中0-9的轉換值;
4.進行鍵盤掃描程序,若無鍵盤按下,則繼續主程序;若有鍵盤按下,進入按鍵識別程序,識別出具體哪個按鍵按下。若為數字鍵,則將相應的數字暫存人R6;若為功能鍵,則轉入相應的功能程序。當有鍵盤按下時,R5自加1,當R5=2時,將其清零;
5.當為數字鍵時,將按下的鍵值,根據R5的大小,將R6轉存入R2、R3、R4即百、十、個位。當R5=0,R6值轉存入R2;當R5=1,R6值轉存入R3;當R5=2,R6值轉存入R4;
6.控制P0.6,P0.7的0/1值,根據需求點亮數碼管;
7.當KINT鍵按下時,開啟T0計時控制位,T0開始計時。計時1秒后,秒數減一。數碼管上顯示的數字相應的減一;
8.當KINT鍵再次按下,計時停止,關閉T0計時控制位,T0停止計時,數碼管顯示的數字不變。
9.當計時到達000時,關閉T0計時,開啟T1計時,開啟蜂鳴器,蜂鳴0.5秒后,關閉T1計時和蜂鳴器。
10.當為功能鍵時,轉入功能子程序,完成相應的功能。
三、資源分配
R0: 用于300ms延遲循環
R1: 用于10ms消抖循環
R2:存取數碼管百位
R3:存取數碼管十位
R4:存取數碼管個位
R5:用于控制暫存值R5的轉存到R2或R3或R4
R6:用于鍵盤輸入值暫存
R7:用于個性化設計延時
000BH:T0中斷入口地址
0013H:外部中斷KINT鍵入口地址
001BH:T1中斷入口地址
P0.0:控制LED燈D9的開關
P0.1:控制外部中斷KINT鍵
P0.6:數碼管位位控
P0.7:數碼管位位控
P1:控制數碼管段的開關
P2:P0.0-P0.3行掃描,P0.4-P0.7列掃描
P3.1:控制蜂鳴器
TABLE:數碼管0-9數字轉換表

四、流程圖主程序:

判斷有無按鍵按下子程序
掃描子程序

百十個賦值子程序
鍵盤釋放子程序

10ms消抖子程序
蜂鳴子程序
外部KINT鍵中斷

T0中斷
T1中斷


五、源代碼 (含文件頭說明、語句行注釋)
  1. ;Filename: F310_frame.asm
  2. ;Designed by: 賀森濤
  3. ;Date:  2019/05/28
  4. ;P1:ABCDEFG,dp  P0.7和P0.6控制哪個數碼管亮
  5. ;P2.0-P2.7行輸入4,列輸入4
  6. ;K0-K9數字鍵,K10鍵轉個性化設計程序
  7. ;-------------------------------------------------------------------------------

  8.                             $include(C8051F310.inc)
  9. LED                            BIT P0.0
  10. BEEP              BIT P3.1
  11. KINT              BIT P0.1
  12.                             INIT SEGMENT CODE
  13.                             rseg INIT
  14.                             ORG 0000H
  15.                             LJMP MAIN
  16.                             ORG 000BH
  17.                             LJMP T0INT
  18.                             ORG 0013H
  19.                             LJMP KINT0
  20.                             ORG 001BH
  21.                             LJMP T1INT
  22.             
  23.                             ORG 0100H
  24. MAIN:              
  25.                             LCALL Init_Device                 ;設備初始化
  26.                             LCALL INIT0                                                        ;定時器初始化
  27.                             MOV R0,#0                                             ;延遲循環
  28.                             MOV R1,#0                                             ;消抖循環
  29.                             MOV R2,#0                                             ;百位
  30.                             MOV R3,#0                                             ;十位
  31.                             MOV R4,#0                                                        ;個位
  32.                             MOV R5,#0                                                        ;位選信號
  33.                             MOV R6,#0                                                        ;鍵盤輸入數值
  34.                             MOV R7,#0             ;個性化設計用

  35.                             MOV DPTR,#TABLE                            ;0-9轉換表
  36.                             CLR BEEP
  37.                             CLR LED


  38. LOOP:                                                                                                  ;LED數碼管不停顯示
  39.                             ACALL LED100                                                      
  40.                             MOV A,R2
  41.                             MOVC A,@A+DPTR                                          ;百位
  42.                             MOV P1,A
  43.                             ACALL DELAY_300ms

  44.                             ACALL LED10                                         
  45.                             MOV A,R3
  46.                             MOVC A,@A+DPTR                                          ;十位
  47.                             MOV P1,A
  48.                             ACALL DELAY_300ms

  49.                             ACALL LED1                                         
  50.                             MOV A,R4
  51.                             MOVC A,@A+DPTR                                          ;個位
  52.                             MOV P1,A
  53.                             ACALL DELAY_300ms
  54.                                          
  55.                             JB LED,LOOP                            ;等待鍵盤

  56.                             LCALL KKEY
  57.                             AJMP LOOP

  58. ;-----------------定時器初始化子程序--------------------------------------------                           
  59. INIT0:
  60.                             SETB EX1                              ;開外部中斷允許
  61.                             SETB IT1                            ;外部中斷1設置為下降沿觸發                                         
  62.                             SETB PT0                            ;外部中斷為高優先級
  63.                             MOV IT01CF,#10H                ;
  64.                             MOV TMOD,#11H              ;定時器0和1都設為定時方式1
  65.                             MOV TH0,#06H                              ;轉載定時器T0初始值
  66.                             MOV TL0,#0C5H                           
  67.                             SETB EA                                          ;開總中斷
  68.                             SETB ET0                            ;開定時器0中斷
  69.                             SETB ET1                            ;開定時器1中斷
  70.                             RET
  71.                                          

  72. ;------------蜂鳴子程序---------------------------------------
  73. ENDD:
  74.                             CLR TR0
  75.                             SETB BEEP
  76.                             MOV TH1,#83H
  77.                             MOV TL1,#63H
  78.                             SETB TR1
  79.                             RET

  80.                            
  81. ;---------------選LED子程序-----------------------------------                                         
  82. LED100:                                                                                                     ;位選信號賦值(百位)
  83.                             CLR P0.6
  84.                             SETB P0.7
  85.                             RET
  86. LED10:                                                                                                     ;位選信號幅值(十位)
  87.                             SETB P0.6
  88.                             CLR P0.7
  89.                             RET
  90. LED1:                                                                                        ;位選信號幅值(個位)
  91.                             CLR P0.7
  92.                             CLR P0.6
  93.                             RET

  94. ;--------------300ms延時子程序------------------------------------------
  95. DELAY_300ms:
  96.                                           MOV R0,              #200
  97.                                           DJNZ R0,$
  98.                                           MOV R0,              #200
  99.                                           DJNZ R0,$
  100.                                           MOV R0,              #200
  101.                                           DJNZ R0,$
  102.                                           RET


  103. ;------------10ms延時消抖子程序-----------------------------------------------------------
  104. DELAY_10ms:
  105.                                           MOV R1,#20
  106.                                           DJNZ R1,$
  107.                                           RET

  108. ;-----------------判斷是否有鍵按下子程序---------------------------------------------------------

  109. KKEY:                                 ; 低4位置零,高4位如果有一個為0,有鍵按下
  110.    MOV  P2, #0F0H
  111.    MOV  A,  P2
  112.    ORL  A,  #0FH
  113.    CPL  A
  114.    JNZ  YES_KEY                 
  115.    RET

  116. YES_KEY:
  117.    LCALL  DELAY_10ms                                                           ;10ms消抖程序
  118.    MOV  P2, #0F0H
  119.    MOV  A,  P2
  120.    ORL  A,  #0FH
  121.    CPL  A
  122.    JNZ  key                                                                           
  123. RET

  124. ;---------------按鍵掃描子程序--------------------------------------------------------


  125. ROW1:                            CLR              P2.0
  126.                                                         SETB P2.1
  127.                                                         SETB P2.2
  128.                                                         SETB P2.3
  129.                                                         RET

  130. ROW2:                                          CLR              P2.1
  131.                                                         SETB P2.0
  132.                                                         SETB P2.2
  133.                                                         SETB P2.3
  134.                                                         RET

  135. ROW3:                                          CLR              P2.2
  136.                                                         SETB P2.0
  137.                           SETB P2.1
  138.                                                         SETB P2.3
  139.                                                         RET

  140. ROW4:                                          CLR              P2.3
  141.                                                         SETB P2.0
  142.                            SETB P2.1
  143.                           SETB P2.2
  144.                                                         RET
  145. key:                                    
  146. LCALL              ROW1                                         
  147.                 JNB              P2.4, K0                                    ;ROW1, SCAN LINES
  148.                 JNB              P2.5, K4
  149.                 JNB              P2.6, K8
  150.                 JNB              P2.7, K12
  151.                
  152. LCALL              ROW2
  153.                 JNB  P2.4,  K1                               ;ROW2, SCAN LINES
  154.                 JNB  P2.5,  K5
  155.                 JNB  P2.6,  K9
  156.                 JNB  P2.7,  K13
  157.                                                       
  158. LCALL ROW3
  159.                  JNB              P2.4, K2                              ;ROW3, SCAN LINES
  160.                  JNB              P2.5, K6
  161.                  JNB              P2.6, K10
  162.                  JNB              P2.7, K14
  163.                                                       
  164. LCALL ROW4
  165.                             JNB              P2.4, K3                            ;ROW4, SCAN LINES
  166.                             JNB              P2.5, K7
  167.                             JNB              P2.6, K11
  168.                             JNB              P2.7, K15
  169.                             RET

  170. K0:
  171.                             MOV R6,#0
  172.                             LJMP SHOW   
  173. K1:   
  174.                             MOV R6,#1
  175.                             LJMP SHOW
  176. K2:
  177.                             MOV R6,#2
  178.                             LJMP SHOW
  179. K3:  
  180.                             MOV R6,#3
  181.                             LJMP SHOW
  182. K4:  
  183.                             MOV R6,#4
  184.                             LJMP SHOW
  185. K5:   
  186.                             MOV R6,#5
  187.                             LJMP SHOW
  188. K6:   
  189.                             MOV R6,#6
  190.                             LJMP SHOW
  191. K7:   
  192.                             MOV R6,#7
  193.                             LJMP SHOW
  194. K8:   
  195.                             MOV R6,#8
  196.                             LJMP SHOW
  197. K9:     
  198.                             MOV R6,#9
  199.                             LJMP SHOW

  200. K10:    LCALL DISUP
  201.                             LJMP RELEASE
  202. K11:    LJMP RELEASE
  203. K12:    LJMP RELEASE
  204. K13:    LJMP RELEASE
  205. K14:    LJMP RELEASE
  206. K15:    LJMP RELEASE
  207. ;---------------------判斷按鍵是否松開子程序--------------------------------------------------------------
  208. RELEASE:                            LCALL  DELAY_10ms                                                         ;判斷按鍵是否松開
  209.                  MOV   P2,  #0F0H
  210.                  MOV A, P2
  211.                  ORL A, #0FH
  212.                  CPL A
  213.                  JNZ  RELEASE
  214.                  RET


  215. ;-------------顯示倒計時的百十個數字-------------------------------------------------------------------------
  216. SHOW:                                                                                   
  217.                             MOV A,R5
  218.                             CJNE A,#1,SHOW0                            ;R=0時,轉百位,R=1時,轉十位
  219.                             LCALL LED10
  220.                             MOV A,R6                                             ;十位
  221.                             MOV R3,A
  222.                             INC R5
  223.                             LJMP RELEASE              
  224.                            
  225. SHOW0:            
  226.                             JNC SHOW1                                            ;R5=(10)_B時,轉個位
  227.                             LCALL LED100
  228.                             MOV A,R6                                                        ;百位
  229.                             MOV R2,A
  230.                             INC R5
  231.                             LJMP RELEASE

  232. SHOW1:
  233.                             LCALL LED1
  234.                             MOV A,R6                                                        ;個位
  235.                             MOV R4,A
  236.                             MOV R5,#0
  237.                             LJMP RELEASE



  238. ;---------------T1中斷--------------------------------------
  239. T1INT:            
  240.                             CLR BEEP
  241.                             CLR TR1
  242.                             MOV TH0,#06H
  243.                             MOV TL0,#0C5H
  244.                             MOV TH1,#83H
  245.                             MOV TL1,#63H
  246.                             RETI
  247. ;------------T0中斷和倒計時-----------------------------------------
  248. T0INT:            
  249.                             CJNE R4,#0,DEC1
  250.                             CJNE R3,#0,DEC2
  251.                             CJNE R2,#0,DEC3
  252.                             LCALL ENDD
  253.                             RETI
  254. DEC1:            
  255.                             DEC R4
  256.                             MOV TH0,#06H
  257.                             MOV TL0,#0C5H
  258.                             RETI
  259. DEC2:            
  260.                             DEC R3
  261.                             MOV R4,#9
  262.                             MOV TH0,#06H
  263.                             MOV TL0,#0C5H
  264.                             RETI
  265. DEC3:            
  266.                             DEC R2
  267.                             MOV R3,#9
  268.                             MOV R4,#9
  269.                             MOV TH0,#06H
  270.                             MOV TL0,#0C5H
  271.                             RETI

  272. ;---------------外部KINT中斷-------------------------------------------
  273. KINT0:            

  274.                                                                                                                                                                                 ;kint外部中斷程序
  275. LOOP1:        LCALL  DELAY_10ms                                                                                    ;消抖10ms
  276.                         JNB   KINT,  LOOP2
  277.                         LJMP  LOOP1

  278. LOOP2:        LCALL  DELAY_10ms                     ;消抖10ms
  279.               JNB  KINT,  LOOP2                                                            ;檢測按鍵是否松開

  280.                                              CPL TR0                                                                      ;中斷操作
  281.                                              CPL P0.0

  282.                                              RETI




  283. ;---------------數字表-----------------------------------------------
  284.                            
  285.                                                                      
  286.                                           ORG              1000H
  287. TABLE:                            DB  0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6H  ;數字0-9

  288. ;--------------------------------------------------------------------------
  289. DISUP:
  290.                             MOV R7,#255
  291. Y:                            SETB P0.7;
  292.                             CLR              P0.6;
  293.                             MOV P1,#01110110B
  294.                             LCALL DELAY_300ms

  295. O:                            SETB P0.6;
  296.                             CLR P0.7;
  297.                             MOV P1,#00111010B;
  298.                             LCALL DELAY_300ms;

  299. U:                            CLR              P0.6;
  300.                             CLR P0.7;
  301.                             MOV P1,#00111000B;
  302.                             LCALL DELAY_300ms;

  303.                             DJNZ R7,Y
  304. ;-----------------------------------------------------------


  305.                             MOV R7,#255
  306. A1:                            SETB P0.7;
  307.                             CLR P0.6;
  308.                             MOV P1,#11101110B;
  309.                             LCALL DELAY_300ms;

  310. R:                            SETB P0.6;
  311.                             CLR P0.7;
  312.                             MOV P1,#00001110B;
  313.                             LCALL DELAY_300ms;

  314. E:                            CLR              P0.6;
  315.                             CLR P0.7;
  316.                             MOV P1,#11011110B;
  317.                             LCALL DELAY_300ms;


  318.                             DJNZ R7,A1

  319. ;-----------------------------------------------------

  320.                             MOV R7,#255
  321. G:                            SETB P0.7;
  322.                             SETB P0.6;
  323.                             MOV P1,#10111100B;
  324.                             LCALL DELAY_300ms;

  325. O1:                            SETB P0.7;
  326.                             CLR P0.6;
  327.                             MOV P1,#00111010B;
  328.                             LCALL DELAY_300ms;

  329. O2:                            SETB P0.6;
  330.                             CLR P0.7;
  331.                             MOV P1,#00111010B;
  332.                             LCALL DELAY_300ms;

  333. D:                            CLR              P0.6;
  334.                             CLR P0.7;
  335.                             MOV P1,#01111010B;
  336.                             LCALL DELAY_300ms;
  337.                             DJNZ R7,G

  338.                             LJMP DISUP
  339. ;--------------------------------------------------------------


  340. ;-------end of your code-------------------------------------------------


  341. ;------------------------------------------------------------------------
  342. ;-  Generated Initialization File                                      --
  343. ;------------------------------------------------------------------------

  344. ; Peripheral specific initialization functions,
  345. ; Called from the Init_Device label
  346. PCA_Init:
  347.     anl  PCA0MD,    #0BFh
  348.     mov  PCA0MD,    #000h
  349.     ret

  350. Timer_Init:
  351.     mov  TMOD,      #001h
  352.     mov  CKCON,     #002h
  353.     ret

  354. Port_IO_Init:
  355.     ; P0.0  -  Unassigned,  Push-Pull,  Digital
  356.     ; P0.1  -  Unassigned,  Open-Drain, Digital
  357.     ; P0.2  -  Unassigned,  Open-Drain, Digital
  358.     ; P0.3  -  Unassigned,  Open-Drain, Digital
  359.     ; P0.4  -  Unassigned,  Open-Drain, Digital
  360.     ; P0.5  -  Unassigned,  Open-Drain, Digital
  361.     ; P0.6  -  Unassigned,  Open-Drain, Digital
  362.     ; P0.7  -  Unassigned,  Open-Drain, Digital

  363.     ; P1.0  -  Unassigned,  Open-Drain, Digital
  364.     ; P1.1  -  Unassigned,  Open-Drain, Digital
  365.     ; P1.2  -  Unassigned,  Open-Drain, Digital
  366.     ; P1.3  -  Unassigned,  Open-Drain, Digital
  367.     ; P1.4  -  Unassigned,  Open-Drain, Digital
  368.     ; P1.5  -  Unassigned,  Open-Drain, Digital
  369.     ; P1.6  -  Unassigned,  Open-Drain, Digital
  370.     ; P1.7  -  Unassigned,  Open-Drain, Digital
  371.     ; P2.0  -  Unassigned,  Open-Drain, Digital
  372.     ; P2.1  -  Unassigned,  Open-Drain, Digital
  373.     ; P2.2  -  Unassigned,  Open-Drain, Digital
  374.     ; P2.3  -  Unassigned,  Open-Drain, Digital

  375.     mov  P0MDOUT,   #001h
  376.     mov  P3MDOUT,   #002h
  377.     mov  XBR1,      #040h
  378.     ret

  379. ; Initialization function for device,
  380. ; Call Init_Device from your main program
  381. Init_Device:
  382.     lcall PCA_Init
  383.     lcall Timer_Init
  384.     lcall Port_IO_Init
  385.     ret
  386. END

  387. 六、程序測試方法與結果

  388. 1.外部KINT中斷

  389. KINT0:                                                                                                                        ;kint外部中斷程序
  390. LOOP1:        LCALL  DELAY_10ms                                                                                    ;消抖10ms
  391.                         JNB   KINT,  LOOP2
  392.                         LJMP  LOOP1
  393. LOOP2:        LCALL  DELAY_10ms                     ;消抖10ms
  394.               JNB  KINT,  LOOP2                                                            ;檢測按鍵是否松開
  395.                                              CPL TR0                                                                      ;中斷操作
  396.                                              CPL P0.0
  397.                                              RETI
復制代碼

KINT鍵控制啟動和暫停,暫停時D9燈亮,采用
CPL TR0
CPL P0.0實現所需功能,其效果如圖。
啟動:

暫停,D9燈亮:


2.T0中斷和倒計時
T0INT:            
                            CJNE R4,#0,DEC1
                            CJNE R3,#0,DEC2
                            CJNE R2,#0,DEC3
                            LCALL ENDD
                            RETI
DEC1:            
                            DEC R4
                            MOV TH0,#06H
                            MOV TL0,#0C5H
                            RETI
DEC2:            
                            DEC R3
                            MOV R4,#9
                            MOV TH0,#06H
                            MOV TL0,#0C5H
                            RETI
DEC3:            
                            DEC R2
                            MOV R3,#9
                            MOV R4,#9
                            MOV TH0,#06H
                            MOV TL0,#0C5H
                            RETI
設置T0的TH和TL來實現1秒計時,同時使數碼管上的數字減一,效果如圖。



3.顯示輸入的倒計時預設值
SHOW:                                                                                   
                            MOV A,R5
                            CJNE A,#1,SHOW0                            ;R=0時,轉百位,R=1時,轉十位
                            LCALL LED10
                            MOV A,R6                                             ;十位
                            MOV R3,A
                            INC R5
                            LJMP RELEASE              
                           
SHOW0:            
                            JNC SHOW1                                            ;R5=(10)_B時,轉個位
                            LCALL LED100
                            MOV A,R6                                                        ;百位
                            MOV R2,A
                            INC R5
                            LJMP RELEASE

SHOW1:
                            LCALL LED1
                            MOV A,R6                                                        ;個位
                            MOV R4,A
                            MOV R5,#0
                            LJMP RELEASE

通過R5的大小來選擇不同的數碼管亮,將預存在R6中的數字轉存人相應的百、十、個位,達到在顯示正確輸入的時間數字,效果如下圖。

4.到零時蜂鳴器響0.5秒
;------------蜂鳴子程序---------------------------------------
ENDD:
                            CLR TR0
                            SETB BEEP
                            MOV TH1,#83H
                            MOV TL1,#63H
                            SETB TR1
                            RET
;---------------T1中斷--------------------------------------
T1INT:            
                            CLR BEEP
                            CLR TR1
                            MOV TH0,#06H
                            MOV TL0,#0C5H            
                            RETI

到零時轉蜂鳴子程序,開T1計時,計時0.5秒,然后關閉蜂鳴器,效果如圖。

7.掃描鍵盤,獲取輸入鍵值程序

KKEY:                                 ; 低4位置零,高4位如果有一個為0,有鍵按下
   MOV  P2, #0F0H
   MOV  A,  P2
   ORL  A,  #0FH
   CPL  A
   JNZ  YES_KEY                 
   RET

YES_KEY:
   LCALL  DELAY_10ms                                                           ;10ms消抖程序
   MOV  P2, #0F0H
   MOV  A,  P2
   ORL  A,  #0FH
   CPL  A
   JNZ  key                                                                           
RET

;---------------按鍵掃描子程序--------------------------------------------------------


ROW1:                            CLR              P2.0
                                                        SETB P2.1
                                                        SETB P2.2
                                                        SETB P2.3
                                                        RET

ROW2:                                          CLR              P2.1
                                                        SETB P2.0
                                                        SETB P2.2
                                                        SETB P2.3
                                                        RET

ROW3:                                          CLR              P2.2
                                                        SETB P2.0
                          SETB P2.1
                                                        SETB P2.3
                                                        RET

ROW4:                                          CLR              P2.3
                                                        SETB P2.0
                           SETB P2.1
                          SETB P2.2
                                                        RET
key:                                    
LCALL              ROW1                                         
                JNB              P2.4, K0                                    ;ROW1, SCAN LINES
                JNB              P2.5, K4
                JNB              P2.6, K8
                JNB              P2.7, K12
               
LCALL              ROW2
                JNB  P2.4,  K1                               ;ROW2, SCAN LINES
                JNB  P2.5,  K5
                JNB  P2.6,  K9
                JNB  P2.7,  K13
                                                      
LCALL ROW3
                 JNB              P2.4, K2                              ;ROW3, SCAN LINES
                 JNB              P2.5, K6
                 JNB              P2.6, K10
                 JNB              P2.7, K14
                                                      
LCALL ROW4
                            JNB              P2.4, K3                            ;ROW4, SCAN LINES
                            JNB              P2.5, K7
                            JNB              P2.6, K11
                            JNB              P2.7, K15
                            RET

K0:
                            MOV R6,#0
                            LJMP SHOW   
K1:   
                            MOV R6,#1
                            LJMP SHOW
K2:
                            MOV R6,#2
                            LJMP SHOW
K3:  
                            MOV R6,#3
                            LJMP SHOW
K4:  
                            MOV R6,#4
                            LJMP SHOW
K5:   
                            MOV R6,#5
                            LJMP SHOW
K6:   
                            MOV R6,#6
                            LJMP SHOW
K7:   
                            MOV R6,#7
                            LJMP SHOW
K8:   
                            MOV R6,#8
                            LJMP SHOW
K9:     
                            MOV R6,#9
                            LJMP SHOW

K10:    LCALL DISUP
                            LJMP RELEASE
K11:    LJMP RELEASE
K12:    LJMP RELEASE
K13:    LJMP RELEASE
K14:    LJMP RELEASE
K15:    LJMP RELEASE
;---------------------判斷按鍵是否松開子程序--------------------------------------------------------------
RELEASE:                            LCALL  DELAY_10ms                                                         ;判斷按鍵是否松開
                 MOV   P2,  #0F0H
                 MOV A, P2
                 ORL A, #0FH
                 CPL A
                 JNZ  RELEASE
                 RET
首先判斷有無按鍵按下,期間進行10ms消抖。若無,則繼續主程序;若有,則掃描出具體哪個按鍵按下。若為數字鍵,則將數字值暫存如R6中;若為功能鍵,則調用功能子程序。最后判斷按鍵是否松開,返回。
6.個性化功能,顯示You Are Good


K10:    LCALL DISUP
                            LJMP RELEASE
;-----------------------------------------------------------------------
DISUP:
                            MOV R7,#255
Y:                            SETB P0.7;
                            CLR              P0.6;
                            MOV P1,#01110110B
                            LCALL DELAY_300ms

O:                            SETB P0.6;
                            CLR P0.7;
                            MOV P1,#00111010B;
                            LCALL DELAY_300ms;

U:                            CLR              P0.6;
                            CLR P0.7;
                            MOV P1,#00111000B;
                            LCALL DELAY_300ms;

                            DJNZ R7,Y
;-----------------------------------------------------------


                            MOV R7,#255
A1:                            SETB P0.7;
                            CLR P0.6;
                            MOV P1,#11101110B;
                            LCALL DELAY_300ms;

R:                            SETB P0.6;
                            CLR P0.7;
                            MOV P1,#00001110B;
                            LCALL DELAY_300ms;

E:                            CLR              P0.6;
                            CLR P0.7;
                            MOV P1,#11011110B;
                            LCALL DELAY_300ms;


                            DJNZ R7,A1

;-----------------------------------------------------

                            MOV R7,#255
G:                            SETB P0.7;
                            SETB P0.6;
                            MOV P1,#10111100B;
                            LCALL DELAY_300ms;

O1:                            SETB P0.7;
                            CLR P0.6;
                            MOV P1,#00111010B;
                            LCALL DELAY_300ms;

O2:                            SETB P0.6;
                            CLR P0.7;
                            MOV P1,#00111010B;
                            LCALL DELAY_300ms;

D:                            CLR              P0.6;
                            CLR P0.7;
                            MOV P1,#01111010B;
                            LCALL DELAY_300ms;
                            DJNZ R7,G

                            LJMP DISUP

按下K10鍵,轉顯示“You Are Good”的程序,效果如圖。



完整的Word格式文檔51黑下載地址:

LED燈控制器(2019)實驗51hei.docx (5.32 MB, 下載次數: 15)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表