📄 keyled.c
字号:
/************************************************************************/
/* 该程序用于键盘的识别,按键情况通过LED表示 */
/* */
/* 修改日期: 2005.3.23 */
/* 修改人: 杨广龙 */
/*************************************************************************/
#include "register.h"
void initial()
{
asm(" setc SXM "); // 抑制符号位扩展
asm(" clrc OVM "); // 累加器中结果正常溢出
asm(" clrc CNF "); // B0被配置为数据存储空间
*SCSR1=0x81FE; // CLKIN=6M,CLKOUT=4*CLKIN=24M
*WDCR=0x6f; // 不使能看门狗,因为SCSR2中的WDOVERRIDE
// 即WD保护位复位后的缺省值为1,故可以用
// 软件禁止看门狗
*IMR=0x0000; // 禁止所有中断
*IFR=0x0FFFF; // 清除全部中断标志,"写1清0"
*MCRA=*MCRA&0x0FF; // IOPB端口配置为一般的I/O功能
*PBDATDIR=*PBDATDIR|0x0FF00; // IOPB端口设置为输出方式
*MCRC=*MCRC&0x03FF; // IOPF2端口和IOPF3~6配置为一般的I/O功能
*PFDATDIR=*PFDATDIR|0x0400; // IOPF2端口为输出端口,IOPF3-IOPF6为输入端口
*PBDATDIR=*PBDATDIR&0x0FF00; // 熄灭全部的LED灯
*PFDATDIR=*PFDATDIR|0x0404; // IOPF2 设置为输出方式,且IOPF2=1
*PFDATDIR=*PFDATDIR&0x0FFFB; // IOPF2=0
// 以上的操作产生一个脉冲,使LED全部熄灭
}
// 屏蔽中断子程序
void inline disable()
{
asm(" setc INTM ");
}
int keyscan( )
{
int k,j; // 定义局部变量
k=*PFDATDIR&0x0078; // 读入键盘状态并屏蔽掉相应的位
if(k==0x0078) k=0;
else k=1; // 有键按下,则k=1
if(k == 1) // 若无键按下,则直接返回
{
for(j=30000;j>0;j--)j=j; // 若有键按下,则延时消抖动
k=*PFDATDIR&0x0078; // 读入键盘状态并屏蔽掉相应的位
if(k==0x0078)k=0;
else k=1; // 有还有键按下,则k=1
}
return(k); // 返回K值
}
int keyserver( ) // 键服务子程序
{
int k; // 定义局部变量
k=*PFDATDIR&0x0078; // 读入键盘状态并屏蔽掉相应的位
switch(k)
{
case 0x0070: *PBDATDIR=(*PBDATDIR&0xFF00)|0x0001; break; // 若按下K1键,则显示"1"
case 0x0068: *PBDATDIR=(*PBDATDIR&0xFF00)|0x0002; break; // 若按下K2键,则显示"2"
case 0x0058: *PBDATDIR=(*PBDATDIR&0xFF00)|0x0003; break; // 若按下K3键,则显示"3"
case 0x0038: *PBDATDIR=(*PBDATDIR&0xFF00)|0x0004; break; // 若按下K4键,则显示"4"
default:*PBDATDIR=*PBDATDIR;
}
*PFDATDIR=*PFDATDIR|0x0404; // IOPF2 设置为输出方式,且IOPF2=1
*PFDATDIR=*PFDATDIR&0x0FFFB; // IOPF2=0
// 以上给一个脉冲,使B端口的值显示出来
}
main( )
{
disable(); // 屏蔽所有中断
initial();
while(1)
{
int i; // 定义局部变量
i=0;
i=keyscan(); // 键盘扫描,若有键按下,则返回值为"1",否则返回值为"0"
if(i==1) keyserver(); // 如果有键按下,则进行键服务程序
}
}
// 直接返回中断服务子程序
void interrupt nothing()
{
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -