PIC16F877A控制4*4键盘的汇编语言

时间: 2023-10-14 18:06:38 浏览: 54
以下是使用PIC16F877A控制4*4键盘的汇编语言代码,可以实现按键扫描和检测功能: ```assembly ;******************************************************************************* ; 4*4键盘扫描程序 ;******************************************************************************* ;配置P0-P3为输出引脚,用于控制4行 ;配置P4-P7为输入引脚,用于检测4列上按键状态 ;扫描方式为:按下某个键,相应的列电平会变为低电平 ; 检测到低电平后,确定对应的行和列,得到按键值 ;******************************************************************************* ORG 0000h ;初始化程序 INIT: MOVLW 0x00 ;配置为输出模式 TRIS PORTB ;将PORTB设置为输出端口,用于控制行 MOVLW 0xFF ;配置为输入模式 TRIS PORTD ;将PORTD设置为输入端口,用于检测列 CLRF PORTB ;将PORTB全部输出高电平 GOTO MAIN ;跳转到主程序 ;主程序 MAIN: MOVLW 0x01 ;先将第一行输出低电平 MOVWF PORTB CALL DELAY ;延时一段时间,等待行电平稳定 BTFSS PIND, 4 ;检测第一列 GOTO KEY11 ;如果是第一列,跳转到KEY11处理 BTFSS PIND, 5 ;检测第二列 GOTO KEY12 ;如果是第二列,跳转到KEY12处理 BTFSS PIND, 6 ;检测第三列 GOTO KEY13 ;如果是第三列,跳转到KEY13处理 BTFSS PIND, 7 ;检测第四列 GOTO KEY14 ;如果是第四列,跳转到KEY14处理 MOVLW 0x02 ;将第二行输出低电平 MOVWF PORTB CALL DELAY ;延时一段时间,等待行电平稳定 BTFSS PIND, 4 ;检测第一列 GOTO KEY21 ;如果是第一列,跳转到KEY21处理 BTFSS PIND, 5 ;检测第二列 GOTO KEY22 ;如果是第二列,跳转到KEY22处理 BTFSS PIND, 6 ;检测第三列 GOTO KEY23 ;如果是第三列,跳转到KEY23处理 BTFSS PIND, 7 ;检测第四列 GOTO KEY24 ;如果是第四列,跳转到KEY24处理 MOVLW 0x04 ;将第三行输出低电平 MOVWF PORTB CALL DELAY ;延时一段时间,等待行电平稳定 BTFSS PIND, 4 ;检测第一列 GOTO KEY31 ;如果是第一列,跳转到KEY31处理 BTFSS PIND, 5 ;检测第二列 GOTO KEY32 ;如果是第二列,跳转到KEY32处理 BTFSS PIND, 6 ;检测第三列 GOTO KEY33 ;如果是第三列,跳转到KEY33处理 BTFSS PIND, 7 ;检测第四列 GOTO KEY34 ;如果是第四列,跳转到KEY34处理 MOVLW 0x08 ;将第四行输出低电平 MOVWF PORTB CALL DELAY ;延时一段时间,等待行电平稳定 BTFSS PIND, 4 ;检测第一列 GOTO KEY41 ;如果是第一列,跳转到KEY41处理 BTFSS PIND, 5 ;检测第二列 GOTO KEY42 ;如果是第二列,跳转到KEY42处理 BTFSS PIND, 6 ;检测第三列 GOTO KEY43 ;如果是第三列,跳转到KEY43处理 BTFSS PIND, 7 ;检测第四列 GOTO KEY44 ;如果是第四列,跳转到KEY44处理 GOTO MAIN ;循环执行主程序 ;按键处理程序 KEY11: MOVLW '1' ;将按键值'1'存入W GOTO ENDKEY ;跳转到ENDKEY KEY12: MOVLW '2' ;将按键值'2'存入W GOTO ENDKEY ;跳转到ENDKEY KEY13: MOVLW '3' ;将按键值'3'存入W GOTO ENDKEY ;跳转到ENDKEY KEY14: MOVLW 'A' ;将按键值'A'存入W GOTO ENDKEY ;跳转到ENDKEY KEY21: MOVLW '4' ;将按键值'4'存入W GOTO ENDKEY ;跳转到ENDKEY KEY22: MOVLW '5' ;将按键值'5'存入W GOTO ENDKEY ;跳转到ENDKEY KEY23: MOVLW '6' ;将按键值'6'存入W GOTO ENDKEY ;跳转到ENDKEY KEY24: MOVLW 'B' ;将按键值'B'存入W GOTO ENDKEY ;跳转到ENDKEY KEY31: MOVLW '7' ;将按键值'7'存入W GOTO ENDKEY ;跳转到ENDKEY KEY32: MOVLW '8' ;将按键值'8'存入W GOTO ENDKEY ;跳转到ENDKEY KEY33: MOVLW '9' ;将按键值'9'存入W GOTO ENDKEY ;跳转到ENDKEY KEY34: MOVLW 'C' ;将按键值'C'存入W GOTO ENDKEY ;跳转到ENDKEY KEY41: MOVLW '*' ;将按键值'*'存入W GOTO ENDKEY ;跳转到ENDKEY KEY42: MOVLW '0' ;将按键值'0'存入W GOTO ENDKEY ;跳转到ENDKEY KEY43: MOVLW '#' ;将按键值'#'存入W GOTO ENDKEY ;跳转到ENDKEY KEY44: MOVLW 'D' ;将按键值'D'存入W GOTO ENDKEY ;跳转到ENDKEY ;按键处理结束 ENDKEY: MOVWF PORTC ;将按键值存入PORTC,用于输出 CALL DELAY ;延时一段时间,等待按键稳定 CLRF PORTC ;清空PORTC,准备下一次输入 GOTO MAIN ;跳转到主程序 ;延时程序 DELAY: MOVLW 0xFF ;循环计数值 DELAY1: NOP ;空操作 NOP ;空操作 NOP ;空操作 NOP ;空操作 NOP ;空操作 NOP ;空操作 NOP ;空操作 NOP ;空操作 NOP ;空操作 NOP ;空操作 NOP ;空操作 NOP ;空操作 NOP ;空操作 NOP ;空操作 NOP ;空操作 NOP ;空操作 NOP ;空操作 NOP ;空操作 NOP ;空操作 NOP ;空操作 NOP ;空操作 NOP ;空操作 NOP ;空操作 NOP ;空操作 NOP ;空操作 NOP ;空操作 NOP ;空操作 NOP ;空操作 DECFSZ W, F ;循环计数器减1 GOTO DELAY1 ;继续循环 RETURN ;返回 ``` 此代码仅供参考,具体实现方式可能会因硬件连接方式和需要实现的功能而有所变化。

相关推荐

最新推荐

recommend-type

PIC16F877A万年历程序

为了把KS0108系列的液晶吃透,特别制作了这款万年历,感觉效果还是不错的.希望大家分享我的喜悦,毕竟有了更多志同道合的朋友支持,我才能更进一步提高.
recommend-type

PIC16F877A串口发送字符串问题

本文总结一些PIC16F877A串口发送字符串问题,感性趣的朋友可以参考下。
recommend-type

基于PIC16F877A的简易时钟控制器设计

利用工作与比较模式的ccp1模块,与可用作其周期寄存器的TMR1配合工作,从引脚RC6上输出一个超低频的占空比为50%的对称方波,方波信号的周期为32s。单片机初次加电或者复位后,发光二极管LED7不停地烁。
recommend-type

PIC16F877头文件

// Register Declarations for Microchip 16F877 Processor // // // This header file was automatically generated by: // // inc2h.pl V1.6 // // Copyright (c) 2002, Kevin L. Pauba, All Rights Reserved // /...
recommend-type

采用PIC16F877单片机的汽车电动助力转向系统

采用PIC16F877单片机的汽车电动助力转向系统随着电子控制技术的发展及其在汽车领域的广泛应用, 电动助力转向系统(Electric Power Steering, 简称EPS)越来越成为目前汽车电子技术研究的热点之一。与传统的转向系统...
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

用 Python 画一个可以动的爱心

好的,我可以帮助您使用Python来绘制一个动态的爱心。您可以使用turtle库来实现。以下是实现代码: ```python import turtle import math # 设置画布和画笔 canvas = turtle.Screen() canvas.bgcolor("black") pencil = turtle.Turtle() pencil.speed(0) pencil.color("red", "pink") pencil.pensize(3) # 定义爱心函数 def draw_love(heart_size, x_offset=0, y_offset=0):
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。