找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3672|回复: 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 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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