打印

51汇编4*4键扫描程序

[复制链接]
1790|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fanxing789|  楼主 | 2012-6-3 21:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
;===============================  
                  ;      建扫描程序
                  ;----------------------------   
键扫描:               nop
                      nop
                      mov          3fh,#5
                       ;clr           EA                            ; 键扫描禁止中断,试验
                     ;--------------------
                     ;  扫一列    上开始 行1照度上
                     ;----------------                 
                      clr         列1
                      nop
                      lcall       延时1ms
                      mov         3fh,#5
                   ;=============
K1行q1循环h1:         nop                                          ;键1
                      jb          行1,K1行q1无效
                      lcall       延时5ms
                      djnz        3fh,K1行q1循环h1
                      mov          3fh,#5
                    ;---------------------------
                       mov         缓冲,#1
                       lcall         数据处理     
                       lcall         显示时间单位
                    ;--------------------------
                      ljmp         键扫描完成
K1行q1无效:           nop                    
                    ;----------------
                     ;--------------------
                     ;  扫一列    上开始 K1行2,红1
                     ;----------------
                       mov         3fh,#5
K1行q2循环h2:          nop                     
                       jb          行2,K1行q2无效
                       lcall       延时5ms
                       djnz        3fh,K1行q2循环h2  
                      ;---------------------------
                       mov         缓冲,#4
                        lcall         数据处理     
                       lcall         显示时间单位
                    ;--------------------------             ;
                       ljmp        键扫描完成
K1行q2无效:            nop                    
                    ;----------------
                    
                      ;--------------------
                     ;  扫一列    上开始 K1行2,紫1
                     ;----------------
                       mov          3fh,#5
K1行q3循环h3:          nop                     
                       jb           行3,K1行q3无效
                       lcall        延时5ms
                       djnz         3fh,K1行q3循环h3
                      ;---------------------------
                       mov         缓冲,#7
                        lcall         数据处理     
                       lcall         显示时间单位
                    ;--------------------------
                       ljmp         键扫描完成
K1行q3无效:            nop     
                       nop
                      ;--------------------
                     ;  扫一列    上开始 K1行2,白1
                     ;----------------  
                       mov          3fh,#5
K1行q4循环h4:          nop                     
                       jb           行4,K1行q4无效
                       lcall        延时5ms
                       djnz         3fh,K1行q4循环h4
                       ;---------------------------
                       mov         缓冲,#0                  ;星号键,清除
                        mov         2fh,#03h              ;设置标志
                         mov         缓冲,#00h
                         mov         键值,#00h
                    ;--------------------------  
                       ljmp          键扫描完成
K1行q4无效:            nop   
                       setb          列1
                       nop
                       nop
                      ; lcall         延时1ms
                     
                   ;==========================================
                       ;--------------------
                     ;  扫二列    上开始 行1照度上
                     ;------  ----------                 
                     clr         列2
                     lcall       延时1ms                                        ;
                     nop
                     mov         3fh,#5
                   ;===============================
                   ;        向下
                   ;---------------------------
K2行q1循环h1:        nop                     
                     jb          行1,K2行q1无效
                     lcall       延时5ms
                     djnz        3fh,K2行q1循环h1
                     mov         3fh,#5
                    ;---------------------------
                       mov         缓冲,#2
                        lcall         数据处理     
                       lcall         显示时间单位
                    ;--------------------------   
                     ljmp        键扫描完成
K2行q1无效:          nop                    
                    ;----------------
                    
                     ;--------------------
                     ;  扫二列    上开始 K2行2,红1
                     ;----------------
                      mov       3fh,#5
K2行q2循环h2:         nop                     
                      jb        行2,K2行q2无效
                      lcall     延时5ms
                      djnz      3fh,K2行q2循环h2
                     ;---------------------------
                       mov         缓冲,#5
                        lcall         数据处理     
                       lcall         显示时间单位
                    ;--------------------------   
                      ljmp       键扫描完成
K2行q2无效:           nop                    
                    ;----------------
                    
                      ;--------------------
                     ;  扫一列    上开始 K2行2,紫1
                     ;----------------  
                       mov       3fh,#5
K2行q3循环h3:          nop                     
                       jb         行3,K2行q3无效
                       lcall      延时5ms
                       djnz       3fh,K2行q3循环h3
                    ;---------------------------
                       mov         缓冲,#8
                        lcall         数据处理     
                       lcall         显示时间单位
                    ;--------------------------   
                        ljmp      键扫描完成
K2行q3无效:              nop                    
                    ;----------------
                    
                      ;--------------------
                     ;  扫一列    上开始 K2行2,白1
                     ;----------------  
                         mov        3fh,#5
K2行q4循环h4:            nop                     
                         jb         行4,K2行q4无效
                         lcall      延时5ms
                         djnz       3fh,K2行q4循环h4
                     ;---------------------------
                       mov         缓冲,#0
                        lcall         数据处理     
                       lcall         显示时间单位
                    ;--------------------------   
                        
                         ljmp        键扫描完成
K2行q4无效:              nop  
                         nop
                         setb        列2
                         lcall       延时1ms                  
                    ;----------------
                        
                        ;--------------------
                     ;  扫三列    上开始 行1照度上
                     ;----------------                 
                     clr         列3                        ;扫描第三列
                     lcall       延时1ms                      ;
                     nop
                     nop
                     mov         3fh,#5
                   ;=============
K3行q1循环h1:        nop                     
                     jb          行1,K3行q1无效
                     lcall       延时5ms
                     djnz        3fh,K3行q1循环h1
                     mov         3fh,#5
                   ;---------------------------
                       mov         缓冲,#3
                        lcall         数据处理     
                      lcall         显示时间单位
                    ;--------------------------  
                     ljmp        键扫描完成
K3行q1无效:          nop                    
                    ;----------------
                    
                     ;--------------------
                     ;  扫三列    上开始 K3行2,红1
                     ;----------------  
K3行q2循环h2:         nop                     
                      jb        行2,K3行q2无效
                      lcall    延时5ms
                      djnz     3fh,K3行q2循环h2
                      mov      3fh,#5
                      ;---------------------------
                       mov         缓冲,#6
                        lcall         数据处理     
                       lcall         显示时间单位
                    ;--------------------------
                       ljmp       键扫描完成
K3行q2无效:             nop                    
                    ;----------------
                    
                      ;--------------------
                     ;  扫三列     
                     ;----------------  
                         mov        3fh,#5
K3行q3循环h3:            nop                     
                         jb         行3,K3行q3无效
                         lcall      延时5ms
                         djnz       3fh,K3行q3循环h3
                     ;---------------------------
                        mov          缓冲,#9
                        lcall         数据处理     
                       lcall         显示时间单位
                    ;--------------------------
                         ljmp        键扫描完成
K3行q3无效:              nop                    
                    ;----------------
                    
                      ;--------------------
                     ;  扫三列    上开始 K3行2,白3
                     ;----------------  
                         mov          3fh,#5
K3行q4循环h4:            nop                     
                         jb           行4,K3行q4无效
                         lcall        延时5ms
                         djnz         3fh,K3行q4循环h4
                      ;---------------------------  
                         mov           a,#5ah                            ;#号键发送数据
                         lcall         发数据q2
                         clr           工作灯
                         ;MOV          2FH,#03H                         ;
                         lcall         显示时间单位
                         lcall         显示时间单位
                         lcall         显示时间单位
                         lcall         显示时间单位
                         lcall         显示时间单位
                         mov           a,键值                             ;#号键发送数据
                         lcall        发数据q2
                         MOV          2FH,#03H  
                          
                        
                          lcall         显示延时                           ;延时100ms
                        
                          mov           a,#5ah                             ;#号键发送数据
                         lcall         发数据q2
                         clr           工作灯
                         ;MOV          2FH,#03H                         ;
                         lcall         显示时间单位
                         lcall         显示时间单位
                         lcall         显示时间单位
                         lcall         显示时间单位
                         lcall         显示时间单位
                        
                          mov           a,键值                             ;#号键发送数据  
                         lcall        发数据q2
                         MOV          2FH,#03H
                          
                        
                         setb        工作灯
                           
                    ;--------------------------
                         ljmp         键扫描完成
K3行q4无效:              nop   
                         nop
                         lcall        延时1ms
                         setb          列3   
                    ;----------------
键扫描完成:             nop
                        nop
                        setb          列1
                        setb          列2
                         setb          列3  
                         setb          列4        
                        ret
                   ;===========================

相关帖子

沙发
fanxing789|  楼主 | 2012-6-3 21:10 | 只看该作者
我没有整理,把我的原程序copy来了,中间夹杂着处理子程序.大家参考.中间的显示是有3位数码管显示数据的.这个是在数字键盘上选一个00-99数据发到RS-232C通讯的程序.是经过样机使用的程序.供大家参考.我用的子程序名字都是中文的.大家要注意.

使用特权

评论回复
板凳
ayb_ice| | 2012-6-4 08:50 | 只看该作者
这种程序结构严重阻塞主循环

使用特权

评论回复
地板
fanxing789|  楼主 | 2012-6-4 19:25 | 只看该作者
是有这个缺点,谢谢

使用特权

评论回复
5
fanxing789|  楼主 | 2012-6-4 19:25 | 只看该作者
是否谈谈优化建议,

使用特权

评论回复
6
ayb_ice| | 2012-6-5 08:25 | 只看该作者
最起码要将延时程序拿掉,

另外程序太长,优化空间巨大

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

147

帖子

1

粉丝