#include "pic.h"
#include "delay.h"
#include "keyboard.h"
const char c_KeyM[16][2]={
{0b11101110,7},{0b11101101,8},{0b11101011,9},{0b11100111,'/'},
{0b11011110,4},{0b11011101,5},{0b11011011,6},{0b11010111,'*'},
{0b10111110,1},{0b10111101,2},{0b10111011,3},{0b10110111,'-'},
{0b01111110,0},{0b01111101,'C'},{0b01111011,'='},{0b01110111,'+'}
};
char ScanKeypad()
{
char key4H=0,key4L=0,ScanM=0;
KEYBOARD_PORT_DIR=0xF0; // 低四位输出,高四位输入
KEYBOARD_PORT=0x00; // 低四位输出0
asm("nop");
asm("nop"); // 等待输出信号稳定
key4H=KEYBOARD_PORT; //读取高四位内容
key4H=key4H&0xF0; // 只需要高四位,所以把低四位屏蔽掉
if(key4H!=0xF0) // 有键盘按下
{
delay10ms(20); //软件消除抖动
key4H=KEYBOARD_PORT; //重新读取KEYBOARD_PORT高四位
if(key4H!=0xF0) // 真的有键盘按下吗?
{
KEYBOARD_PORT_DIR=0x0F; //高低四位IO方向转换
KEYBOARD_PORT=0x00; // 高四位输出0,第四位等待输入
asm("nop");
asm("nop"); //等待输出稳定。
key4L=KEYBOARD_PORT; //读取低四位
key4L=key4L&0x0F; //屏蔽高四位内容
if(key4L!=0x0F) // 如果不为0x0F,说明有按键按下
{
ScanM=key4H | key4L; //高四位与低四位组合成键盘扫描码
while(KEYBOARD_PORT!=0x0F) ; // 若按键为未松开则循环等待
return(ScanM); // 返回某按键的扫描码
}
}
}
return NO_KEY; // 返回无按键按下时对应的值
}
char GetKeyValue() // 获取某按键的键值,如0、1、8等
{
char KeyValue=0,i=0;
KeyValue=ScanKeypad(); // 先获得扫描码
if(KeyValue!=NO_KEY) // 不等于NO_KEY说明有按键按下
{
while(KeyValue!=c_KeyM[i][0]) //在二维数组中查找当前按键扫描码对应的序号
{
i++;
}
return(c_KeyM[i][1]); // 返回某序号对应的键值
}
return NO_KEY; // 返回无按键时对应值
}
PIC16F877简易加法计算器
5星 · 超过95%的资源 需积分: 0 184 浏览量
2024-05-17
21:59:11
上传
评论 2
收藏 125KB RAR 举报
无限虚空
- 粉丝: 606
- 资源: 154
最新资源
- 基于PHP+swoole实现的微信机器人,依赖vbot和微信网页版的功能,帮助管理微信群/聊天/踢人等+源码+开发文档+运行教程
- com.xunmeng.pinduoduo_Release_cd290ca9_ARM64.apk
- 2788727d-25a0-41b2-b6b4-265d193edb95.doc
- 基于AVR单片机的伺服电机系统研究
- Lab-Electronic Craft Practicum-2-Simulation of a Single Tube Com
- 贪吃蛇基于TypeScript
- CS-CP1-2C3WF固件
- 软件测试测试用例设计方法大全
- 计算机与网络基础知识要点学习
- 移动通信(RC-YDTX-III)实验指导书
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈