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

標題: 基于C8051F310單片機的LED燈控制器匯編語言程序調(diào)試 [打印本頁]

作者: 0QAQ0    時間: 2020-11-25 16:55
標題: 基于C8051F310單片機的LED燈控制器匯編語言程序調(diào)試
加深對51單片機及其接口電路的理解,掌握定時/計數(shù)器、中斷的應用編程技術(shù)及程序的調(diào)試方法。
2.實驗內(nèi)容
利用C8051F310單片機設(shè)計一個倒計時定時器,功能要求如下:
模式1:基本功能
主要技術(shù)指標要求如下
1.  定時時間為9秒,定時精度為1秒 。
2.  在LED數(shù)碼管上顯示剩余時間。
3.  時間到0時,蜂鳴器鳴響1次(0.5秒鐘)。
4.  通過KINT鍵實現(xiàn)啟動和暫停功能,暫停時D9燈亮。
5.  利用單片機內(nèi)部定時器定時,KINT鍵輸入和定時器控制均要求采用中斷方式。   
模式2:提高要求
1. 定時時間可通過鍵盤設(shè)定,最大為200秒。
2. 其它個性化設(shè)計。

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

四、流程圖主程序:

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

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

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控制哪個數(shù)碼管亮
  5. ;P2.0-P2.7行輸入4,列輸入4
  6. ;K0-K9數(shù)字鍵,K10鍵轉(zhuǎn)個性化設(shè)計程序
  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                 ;設(shè)備初始化
  26.                             LCALL INIT0                                                        ;定時器初始化
  27.                             MOV R0,#0                                             ;延遲循環(huán)
  28.                             MOV R1,#0                                             ;消抖循環(huán)
  29.                             MOV R2,#0                                             ;百位
  30.                             MOV R3,#0                                             ;十位
  31.                             MOV R4,#0                                                        ;個位
  32.                             MOV R5,#0                                                        ;位選信號
  33.                             MOV R6,#0                                                        ;鍵盤輸入數(shù)值
  34.                             MOV R7,#0             ;個性化設(shè)計用

  35.                             MOV DPTR,#TABLE                            ;0-9轉(zhuǎn)換表
  36.                             CLR BEEP
  37.                             CLR LED


  38. LOOP:                                                                                                  ;LED數(shù)碼管不停顯示
  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設(shè)置為下降沿觸發(fā)                                         
  62.                             SETB PT0                            ;外部中斷為高優(yōu)先級
  63.                             MOV IT01CF,#10H                ;
  64.                             MOV TMOD,#11H              ;定時器0和1都設(shè)為定時方式1
  65.                             MOV TH0,#06H                              ;轉(zhuǎn)載定時器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. ;-------------顯示倒計時的百十個數(shù)字-------------------------------------------------------------------------
  216. SHOW:                                                                                   
  217.                             MOV A,R5
  218.                             CJNE A,#1,SHOW0                            ;R=0時,轉(zhuǎn)百位,R=1時,轉(zhuǎn)十位
  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時,轉(zhuǎn)個位
  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. ;---------------數(shù)字表-----------------------------------------------
  284.                            
  285.                                                                      
  286.                                           ORG              1000H
  287. TABLE:                            DB  0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6H  ;數(shù)字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. 六、程序測試方法與結(jié)果

  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實現(xiàn)所需功能,其效果如圖。
啟動:

暫停,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
設(shè)置T0的TH和TL來實現(xiàn)1秒計時,同時使數(shù)碼管上的數(shù)字減一,效果如圖。



3.顯示輸入的倒計時預設(shè)值
SHOW:                                                                                   
                            MOV A,R5
                            CJNE A,#1,SHOW0                            ;R=0時,轉(zhuǎn)百位,R=1時,轉(zhuǎn)十位
                            LCALL LED10
                            MOV A,R6                                             ;十位
                            MOV R3,A
                            INC R5
                            LJMP RELEASE              
                           
SHOW0:            
                            JNC SHOW1                                            ;R5=(10)_B時,轉(zhuǎn)個位
                            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的大小來選擇不同的數(shù)碼管亮,將預存在R6中的數(shù)字轉(zhuǎn)存人相應的百、十、個位,達到在顯示正確輸入的時間數(shù)字,效果如下圖。

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

到零時轉(zhuǎn)蜂鳴子程序,開T1計時,計時0.5秒,然后關(guān)閉蜂鳴器,效果如圖。

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消抖。若無,則繼續(xù)主程序;若有,則掃描出具體哪個按鍵按下。若為數(shù)字鍵,則將數(shù)字值暫存如R6中;若為功能鍵,則調(diào)用功能子程序。最后判斷按鍵是否松開,返回。
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鍵,轉(zhuǎn)顯示“You Are Good”的程序,效果如圖。



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

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







歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1