历史上的今天
返回首页

历史上的今天

今天是:2025年01月26日(星期日)

2018年01月26日 | KEY_按键示例程序

2018-01-26 来源:eefocus

KEY_按键示例程序

;*************************************************************

   #include ht48c10.inc
;------------------------------------------------------------------------data

            data  .section  'data'           ;数据段
            temp  db  ?                   ; 暂时数据寄存器
            disp   db  ?                  ; 键值显示寄存器
            count1 db  ?                   ; 延时计数指针
            mask  db  ?                   ; 屏蔽寄存器
           matrix  db  ?                   ; 键盘阵列寄存器
            temp1  db ?
            temp2  db ?
;------------------------------------------------------------------------------------------------------code
         code     .section   at  0 'code'     ;程序段
                   org 00h                 ; ISR 地址初始
                    jmp       start
             start:                         ; 程序开始
                   clr     pbc             ; 设置PB口为输出口
                   MOV     a,   0f0h   ;(1)  ; 设置PA高4位为输入口                       
                                           ; 设置PA低四位为输出口
                   MOV     PAC,  a          ;
                   clr      pa              ; 清PA 口
                   set      pb              ; 清PB 口
         keyloop:                           ; 键扫描循环
                  MOV     a,  0feh     ;(2) ;扫描第一行是否被按下
                  MOV    matrix,   a        ; 将第一行的代码送matrix
                  MOV    pa,      a        ; 输出扫描码到PA 口
                  MOV    a,       pa       ; 读入PA口 的状态到ACC
                  xor  a,      0feh      ;屏蔽高四位,取出键所在的列
                   sz    acc               ; 第一行是否有键按下
                  jmp   get_key            ;有键按下跳到读键值
                  MOV     a,     0fdh   ;(2) ; 扫描第二行是否被按下
                  MOV     matrix,  a       ; 将第二行的代码送matrix
                  MOV     pa,     a       ;
                  MOV     a,     pa       ;
                  xor     a,     0fdh     ;
                  sz      acc ;
                  jmp    get_key         ;
                  MOV   a,      0fbh  ;(2) ; 扫描第三行是否被按下
                  MOV matrix,   a         ; 将第三行的代码送matrix     
                  MOV    pa,    a         ;
                  MOV    a,    pa         ;
                  xor    a,   0fbh        ;
                  sz       acc           ; 
                  jmp   get_key          ;
                  MOV   a,   0f7h   ;(2)    ; 扫描第四行是否被按下
                  MOV   matrix,  a         ; 将第三行的代码送matrix
                  MOV      pa,  a         ;
                  MOV     a,    pa        ;
                   xor     a,   0f7h       ;
                 sz     acc               ;
                 jmp     get_key          ;
                 jmp     keyloop          ;?跳到键循环扫描
         get_key:                  ;  取键值
                  call    key_in                ;(3) ;  调用key_in 子程序
                 
                 MOV   pb,     a      ;(11) ; 从PB口显示键值
                 jmp  keyloop            ; 跳到键循环扫描
                 key_in proc              ; 键值读入子程序
                 MOV      a,  pa ;
                 MOV   temp,   a      ;(4) ; 将PA口的状态读入的 temp寄存器中
                 MOV   temp1,a
                 MOV    temp2,a
                call delays           ;(5) ; 调用延时子程序
      get_release:                        ; 等待键松开
                MOV    a,  pa           ;将PA口的主状态值送ACC
                 
                 and   a,  0f0h
                  xor a,0f0h         ; 屏蔽ACC高四位,取按键状态
                 sz     acc         ;(6) ; 等键松开 , 键如松开则acc=0
                 jmp   get_release       ;  
                MOV    a,   0fh          ; 取屏蔽寄存器的低四位
               andm   a,  temp        ;
                  MOV   a,temp
                   MOV    a,    0  
                 set  c         ;
     get_row:                            ; 取行数
               rrc      temp          ;(7) ; 右移 matrix 指针
               snz      status.0             ; 检查并取键行
              jmp      get_column1            ; 如果找到键行,跳到 get_next 
               clr      c                  ; 如果还未找到键行,清carry_c
              add      a,   4h         ;(8) ; 加4到显示指针
              jmp        get_row          ;  跳回get_row
        
     get_column1:                            ; 取列值
               MOV   temp,a
                MOV    a,0f0h
               andm   a, temp2
               swap   temp2
               MOV   a,0h
       get_column: 
                rrc temp2
                snz   status.0
                jmp   next
                clr c
                add   a,1h
                 jmp  get_column
          next:  add  a,temp
                  xor  a,0ffh
              ret
        key_in endp
       delays proc                           ; 延时子程序
               MOV    a,  0ffh ;
               MOV    count1,     a          ;
           d1:
              sdz     count1
              jmp     d1
          ret
         delays endp
            org 300h ; light up table
            dc 0ffh, 0feh, 0fdh, 0fch
            dc 0fbh, 0fah, 0f9h, 0f8h
            dc 0f7h, 0f6h, 0f5h, 0f4h
        dc 0f3h, 0f2h, 0f1h, 0f0h
   end


推荐阅读

史海拾趣

Don Connex Electronics Co Ltd公司的发展小趣事

Don Connex Electronics始终将研发创新作为公司的核心竞争力。公司每年将大量资金投入到新技术、新产品的研发中,不断推出具有市场竞争力的产品。同时,公司还积极与高校、科研机构合作,引进高端人才,加强技术研发力量。这些举措使Don Connex Electronics在激烈的市场竞争中始终保持领先地位。

CTC Coils Ltd公司的发展小趣事

CTC Coils Ltd公司早期以生产传统电感线圈为主,随着电子技术的飞速发展,公司意识到必须进行技术升级。于是,公司投入大量研发资源,成功开发出一种新型高效能电感线圈,该产品在性能上大幅提升,同时降低了能耗。这一技术突破使CTC Coils Ltd的产品在市场上脱颖而出,公司迅速赢得了大量客户,并扩大了生产规模。

ESS [ESS Technology,Inc]公司的发展小趣事

ESS不仅在个人电脑音频领域取得了显著成就,还在HIFI领域实现了突破。ESS的HIFI传承可以追溯到其创始人对音频技术的深刻理解和对市场需求的敏锐把握。通过多年的技术积累和不断创新,ESS成功推出了多款高性能的HIFI音频芯片,如ES9018,这些产品凭借其卓越的性能和音质赢得了广泛好评。

GTM公司的发展小趣事

ESS科技公司的创始人在1984年创建了这家位于美国加利福尼亚州的公司,起初专注于将音响压缩重建技术应用于电子音响图书和问候卡。然而,随着个人电脑的普及和多媒体市场的快速增长,ESS决定调整战略,全力发展个人电脑音频技术。1993年,ESS推出了其首批PC音频半导体产品ES488,这是一个12位的单声道音质硅片。随后,ESS不断推出新产品,如ES688,一个16位立体音质硅片,这些产品为ESS带来了可观的收益。1995年,ESS成功在美国纳斯达克上市,标志着公司进入了一个全新的发展阶段。

CUI Devices公司的发展小趣事

在COVID-19全球大流行期间,CUI Devices展现出了高度的社会责任感。公司决定向那些致力于设计和制造抗击疫情关键医疗设备的OEM、制造商、志愿者和组织提供免费的产品样本。这些样本涵盖了呼吸器、呼吸机、血液分析仪、测试设备、患者监护仪、成像系统和家庭医用器材等多个领域。此外,公司还与全球的制造设施和分销合作伙伴紧密合作,以确保其多样化的产品组合能够随时满足市场需求。

上海国芯(Gcore)公司的发展小趣事
确保电源稳定,避免因电源波动影响电路的准确性和稳定性。

问答坊 | AI 解惑

STN液晶显示原理

本帖最后由 jameswangsynnex 于 2015-3-3 20:00 编辑 STN液晶显示原理STN型的显示原理与TN相类似,不同的是TN扭转式向列场效应的液晶分子是将入射光旋转90度,而STN超扭转式向列场效应是将入射光旋转180~270度。  要在这里说明的是,单 ...…

查看全部问答>

广州青少年机器人大赛太难 学生难以单独完成

本帖最后由 paulhyde 于 2014-9-15 09:49 编辑 有感于现在小学生都在玩机器人,转贴 ============================= 题目越来越难,一般学生难以单独完成,只能由老师一手包办 昨日,广州市青少年机器人竞赛在芳村小学举行。照明节能日光灯、 ...…

查看全部问答>

ISP下载如何制作

各位高手:             我是一位单片机初学者,现在用AT89S52,想自已做一根并口下载线,网上搜索了下确实很多这方面的资料,我也试着制作,但无论用74LS244还是用74HC373都不行,图和软件如附档,请高手帮忙看 ...…

查看全部问答>

【电子书】电子设计竞赛赛题解析

本帖最后由 paulhyde 于 2014-9-15 03:32 编辑 一本电子设计竞赛赛题解析,希望各位好运~~~ 打开这本电子书需要用到超新星图书浏览器,也放在附件中了 下载地址:http://www.ssreader.com/download/download.html [ 本帖最后由 open82977352 于 ...…

查看全部问答>

讨论最有性价比的TPMS方案

TPMS已经成为汽车电子的一个热点,随着相关法规的出台,它的需求量将会激增。对于TPMS的设计师来说,求得一个高的性能/价格比的方案是至关重要的。TPMS的发射器涉及P/T/A/V+ASIC传感器模块、MCU、RF、电池、天线和外型的工业设计,如何来选型?如何 ...…

查看全部问答>

一个比较全面的放大器参数说明 (转)

工作频率范围(F): 指放大器满足各级指标的工作频率范围。放大器实际的工作频率范围可能会大于定义的工作频率范围。 功率增益(G): 指放大器输出功率和输入功率的比值,单位常用“dB”。 增益平坦度(ΔG): 指在一定温度下,在整个工作 ...…

查看全部问答>

关天fseek(fp_Write, 0L, SEEK_END);指向文件未尾应用

关天fseek(fp_Write, 0L, SEEK_END);指向文件未尾应用 bool SaveToBookMark3(char* pBookMarkTitle, char* pUrl ) {         //char FullPath[256] = {\"\\\\Windows\\\\收藏夹\\\\\"};         char ...…

查看全部问答>

求助:保定飞凌OK2440-III开发板,启动wince时,无法进入系统,始终停止在启动画面。

开发板:ok2440-III 问题:启动wince时,无法进入系统,始终停留在启动画面。指示灯LED0亮。(注:可启动Linux操作系统,但无法使用触屏功能。) DNW启动时内容如下: +------------------------------------------------------------+ |  ...…

查看全部问答>

如何调整 程序安装 对话框的宽度

我们的CE产品要求显示是potrait mode。为了降低成本,我们用的是landscape形式的LCD。然后在注册表中旋转90度。这样,显示就成了标准的portrait mode。大部分对话框的显示也是正常的,但是只有程序安装界面还是landscape mode的宽度和高度。所以, ...…

查看全部问答>

Verilog一些简单问题解答

1.为什么仿真时总出现脉冲?那就是竞争冒险吗?可是实验给出的图形是很完美的响应啊,我的却总是激励过后一段时间才有响应的波形   答:数据的过渡状态,可以认为是冒险竞争,不是所有的情况都是这样的2.在引脚分配时同样的字母大小写不一致 ...…

查看全部问答>