📄 main.c
字号:
//-----------------------------------------------------------------
// 名称: 数码管显示4x4键盘矩阵按键序号
//-----------------------------------------------------------------
// 说明: 本例运行时,数码管会显示所按下的任意按键在键盘矩阵上的位置.
// 扫描程序首先判断按键发生在哪一列,然后判断按键发生在哪一行,
// 由列号和行号即可得到键盘按键序号.
//
//-----------------------------------------------------------------
#include <pic.h>
#define INT8U unsigned char
#define _XTAL_FREQ 4000000UL
#define BEEP() (RA1 = ~RA1) //蜂鸣器
//0~9,A~F的共阴数码管段码
const INT8U SEG_CODE[] =
{
0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71
};
//当前按键序号,该矩阵中序号范围为0~15,16表示无按键
INT8U KeyNo = 16;
//-----------------------------------------------------------------
// 蜂鸣器子程序
//-----------------------------------------------------------------
void Beep()
{
for (INT8U i = 0; i < 100; i++)
{
BEEP(); __delay_us(60);
}
}
//-----------------------------------------------------------------
// 判断键盘矩阵是否有键按下
//-----------------------------------------------------------------
INT8U KeyMatrix_Down()
{
//高四位输出,低四位输入,高四位先置0,放入四行
//四列中如果有一列出现0则表示有键按下
}
//-----------------------------------------------------------------
// 键盘矩阵扫描子程序
//-----------------------------------------------------------------
void Keys_Scan()
{
//在判断是否有键按下的函数KeyMatrix_Down中,
//高四位输出,低四位输入,高四位先置0,放入四行
//按键后00001111将变成0000XXXX,X中有1个为0,3个仍为1
//下面判断按键发生于0~3列中的哪一列
switch (PORTD)
{
}
//高四位输入,低四位输出,低四位先置0,放入四列
//按键后11110000将变成XXXX0000,X中1个为0,3个仍为1
//下面对0~3行分别附加起始值0,4,8,12
switch (PORTD)
{
}
}
//-----------------------------------------------------------------
// 主程序
//-----------------------------------------------------------------
void main()
{
ADCON1 = 0x06; //关闭模拟端口
TRISA1 = 0; //蜂鸣器输出端口(RA1)
TRISB = 0x00; //配置数码管显示输出端口
PORTB = 0x00; //数码管初始时黑屏
while(1)
{
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -