主题 : 帮忙看看怎么才能节省代码了? 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 70001
精华: 0
发帖: 21
金钱: 105 两
威望: 21 点
综合积分: 42 分
注册时间: 2012-05-14
最后登录: 2012-08-14
楼主  发表于: 2012-07-21 21:43

 帮忙看看怎么才能节省代码了?

今天写了个代码,用于按键控制led灯,最后还是运行起来了,但是发现我写这个代码太繁琐了,代码量很大。大神们帮忙分析下,怎么样才能简洁点呢?我找了些同样功能的代码,是用c语言实现的,显得比较简洁。

复制代码
  1. GPBCON    EQU    0X56000010
  2. GPBDAT    EQU    0X56000014
  3. GPBUP    EQU    0X56000018
  4. GPGCON    EQU    0X56000060
  5. GPGDAT    EQU    0X56000064
  6. GPGUP    EQU 0X56000068
  7. LED1    EQU    ~(1<<5)                    ;led1亮
  8. LED2    EQU    ~(1<<6)                    ;led2亮
  9. LED3    EQU    ~(1<<7)                    ;led3亮
  10. LED4    EQU    ~(1<<8)                    ;led4亮
  11. LED5    EQU ~((1<<8) | (1<<5))        ;led5亮
  12. LED6    EQU ~((1<<8) | (1<<6))        ;led6亮
  13. K1MSK    EQU    (1<<0)                    ;判断按键1按下的掩码
  14. K2MSK    EQU    (1<<3)                    ;判断按键2按下的掩码
  15. K3MSK    EQU    (1<<5)                    ;判断按键3按下的掩码
  16. K4MSK    EQU    (1<<6)                    ;判断按键4按下的掩码
  17. K5MSK    EQU    (1<<7)                    ;判断按键5按下的掩码
  18. K6MSK    EQU    (1<<11)                    ;判断按键6按下的掩码
  19.             AREA LED,CODE,READONLY
  20.             ENTRY
  21.             CODE32
  22. START
  23.             LDR R0,=GPBCON        ;led控制初始化
  24.             LDR R1,=0X15400
  25.             STR R1,[R0]            ;led数据初始化
  26.             LDR R0,=GPBDAT
  27.             LDR R1,=0X3FF
  28.             STR R1,[R0]    
  29.             
  30.             LDR R0,=GPGCON        ;按键控制初始化
  31.             LDR R1,=0XFF3F033C
  32.             STR R1,[R0]
  33.             LDR R0,=GPGDAT        ;按键数据初始化
  34.             LDR R1,=0X8E9
  35.             STR R1,[R0]
  36.             
  37. LOOP        
  38.             LDR R1,=GPGDAT        ;查询按键1是否按下
  39.             LDR    R0,[R1]
  40.             AND R0,R0,#K1MSK    ;GPGDAT的数据和K1的掩码相与,若为0表示按键1按下
  41.             CMP R0,#0
  42.             BEQ    L1ON
  43.             
  44.             LDR R1,=GPGDAT        ;查询按键2是否按下
  45.             LDR    R0,[R1]
  46.             AND R0,R0,#K2MSK    ;
  47.             CMP R0,#0
  48.             BEQ    L2ON
  49.             
  50.             LDR R1,=GPGDAT        ;查询按键3是否按下
  51.             LDR    R0,[R1]
  52.             AND R0,R0,#K3MSK
  53.             CMP R0,#0
  54.             BEQ    L3ON
  55.             
  56.             LDR R1,=GPGDAT        ;查询按键4是否按下
  57.             LDR    R0,[R1]
  58.             AND R0,R0,#K4MSK
  59.             CMP R0,#0
  60.             BEQ    L4ON
  61.             
  62.             LDR R1,=GPGDAT        ;查询按键5是否按下
  63.             LDR    R0,[R1]
  64.             AND R0,R0,#K5MSK
  65.             CMP R0,#0
  66.             BEQ    L5ON
  67.             
  68.             LDR R1,=GPGDAT        ;查询按键6是否按下
  69.             LDR    R0,[R1]
  70.             AND R0,R0,#K6MSK
  71.             CMP R0,#0
  72.             BEQ    L6ON
  73.             
  74.             B LOOP
  75.         
  76. DELAY
  77.             LDR R3,=0X400000        ;
  78. TAG
  79.             SUB R3,R3,#1
  80.             CMP R3,#0
  81.             BNE TAG
  82.             MOV PC,LR
  83.             
  84. L1ON                            ;LED1亮(下同)
  85.             LDR    R0,=GPBDAT
  86.             LDR R1,=LED1
  87.             STR R1,[R0]
  88.             B    LOOP
  89. L2ON
  90.             LDR    R0,=GPBDAT
  91.             LDR R1,=LED2
  92.             STR R1,[R0]
  93.             B    LOOP
  94. L3ON
  95.             LDR    R0,=GPBDAT
  96.             LDR R1,=LED3
  97.             STR R1,[R0]
  98.             B    LOOP
  99. L4ON
  100.             LDR    R0,=GPBDAT
  101.             LDR R1,=LED4
  102.             STR R1,[R0]
  103.             B    LOOP
  104. L5ON
  105.             LDR    R0,=GPBDAT
  106.             LDR R1,=LED5
  107.             STR R1,[R0]
  108.             B    LOOP
  109. L6ON
  110.             LDR    R0,=GPBDAT
  111.             LDR R1,=LED6
  112.             STR R1,[R0]
  113.             B    LOOP
  114.             
  115.             END