教案-嵌入式系统原理附件第9章.pdfVIP

  • 2
  • 0
  • 约1.05万字
  • 约 10页
  • 2022-04-26 发布于北京
  • 举报
9.1.2 键盘接口示例 示例9-1:假设键盘阵列是5 ×4 ,利用S3C2440 的端口C、端口E 来完成键盘的 连接,其中,GPC0~GPC3 作为输入用于连接“键盘列”,GPE0~GPE4 作为输出,用于 连接“键盘行”,键码采用 16 位,是行信号值和列信号值合并而成。具体键盘接口程 序代码如下: //**keyoutput 是键盘扫描时的输出地址,keyinput 是键盘读入时的地址 #define KEYOUTPUT (*(volatile INT8U *)0 #define KEYINPUT (*(volatile INT8U *)0 //****************************************************************** //** 函数名:Scankey(),无参数 //**返回值:键扫描码 (高8 位是行信号值,低8 位是列信号值,键码是两者合并) //**功 能:调用一次此函数,可以实现对键盘一次全扫描 //****************************************************************** INT16U ScanKey() { INT16U key=0xffff; INT16U i; INT8U temp=0xff,output; //初始化端口C、端口E rPCONC= rPCONC 0xffffff00; //GPC0~GPC3 为输入 rPUPC = rPUPC | 0x000f; rPCONE= (rPCONE 0xfffffc00)|0 //GPE0~GPE4 为输出; rPUPE = rPUPE | 0x001f; //**扫描时,循环往键盘(5 ×4 )输出线送低电平,**// //**其中输出为5 根所以循环5 次就可以了,输入为4 根**// for (i=1;(( i=16)(i0)); i=1) { //**将第i 根输出引脚置低,其余输出引脚为高,即对键盘按行进行扫描**// output |= 0xff; output = (~i); KEYOUTPUT=output; //**读入此时的键盘输入值**// temp = KEYINPUT; //**判断4 根输入线上是否有低电平出现,若有说明有键输入,否则无**// if ((temp0x0f)!=0x0f) { //**将此时的输出值左移8 位,并和读入的值合并为16 位键码**// key = (~i); key = 8; key |= ((temp0x0f)|0xf0); 9.1.2 键盘接口示例 示例9-1:假设键盘阵列是5 ×4 ,利用S3C2440 的端口C、端口E 来完成键盘的 连接,其中,GPC0~GPC3 作为输入用于连接“键盘列”,GPE0~GPE4 作为输出,用于 连接“键盘行”,键码采用 16 位,是行信号值和列信号值合并而成。具体键盘接口程 序代码如下: //**keyoutput 是键盘扫描时的输出地址,keyinput 是键盘读入时的地址 #define KEYOUTPUT (*(volatile INT8U *)0 #define KEYINPUT (*(volatile INT8U *)0 //****************************************************************** //** 函数名:Scankey(),无参数 //**返回值:键扫描码 (高8 位是行信号值

文档评论(0)

1亿VIP精品文档

相关文档