键盘中断实验.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
南通大学实验报告 院系:计算机科学与技术?姓名: 课程名称:接口技术 成绩: 学号:1213022013 指导教师:李跃华 同组实验者: 实验日期:2014-5-7 实验名称:键盘中断实验 1.实验目的 1.熟练运用?CodeWarrior?嵌入式开发系统环境、C?语言、 调试方式。 2.复习串行通信接口(SCI)的内容。 3.加强键盘中断基本原理及编程原理的理解。 4.理解“行扫描”法的原理并能进行键值识别和键值编码 2.实验内容 键盘的?c?语言编程: 1)初始化,先按?IO?口方式初始化,即定义列线为输入且 上拉,行线为输出,然后依 输入口的键盘功能初始化相应的寄存器。 2)定义键值表 3)扫描一次,读取键值 4)获得键盘定义值 行扫描法是使键盘的某一行输出为低电平,其余行为高电 平,然后读取列值,如果列值 中有某位为低电平,则表明该行和列交点处的键被按下; 若为全高则再扫描下一行,直至扫 描完全部的行线为止。这样就可以确定是哪一行哪一列交 点的键被按下。 2.?软件设计 三?程序流程图  主程序中构件初始 化 在主函数里添加波特率 在中断中加接受函数 Tool?测试 按键值在?pc?上显示 四?编程 1.内核定时器中断 void?tpm0_isr(void) { static?uint_32?TPMCounter?=?0; //计时器 uint_8?value; //键盘变量 static?uint_8?LEDindex=0; //位选口声明 uint_8?LEDDataBuffer[4]; //LED?显示缓冲区 uint_8?i; //LED?缓冲区赋值 LEDDataBuffer[0]=0; LEDDataBuffer[1]=2; LEDDataBuffer[2]=3; LEDDataBuffer[3]=5; //LCD?显示缓冲区,其中.表示按下的数字 uint_8?kbv[32]=The?keyboard?you?just?input?is?.; if((TPM_SC_REG(TPM0_BASE_PTR) TPM_SC_TOF_MASK)?==?TPM_SC_TOF_MASK) { TPMCounter++; } BSET(TPM_SC_TOF_SHIFT,TPM_SC_REG(TPM0_BASE_P TR)); //中断置标志位写?1?清?0 //处理?LED?部分 LEDindex++; //位选位+1 if (LEDindex=4) LEDindex=0; //大于?4?位选口置?0 i=LEDchangeCode(LEDDataBuffer[LEDindex]-0); //转码 LEDshow1(LEDindex,i); // 显示?LED if(TPMCounter100) { TPMCounter?=?0; //键盘得到扫描值 value?=?KBScanN(2); //扫描键值,存于?value?中 if(KBDef(value)?!=?0xff) //发送键值 { //修改.成为按键值 kbv[31]?=?KBDef(value); //通过?LCD?显示出来 LCDShow(kbv); uart_send_string(UART_2,kbv);//键盘发送信 息 } } } 2.程序的入口 int?main(void) { //1.声明主函数使用的局部变量 uint_8?*?g_DispalyInit; //2.关总中断 enter_critical(); //3.初始化底层模块 uart_init?(UART_1,BUSCLK,?9600); //串口?1?初始化, 总线时钟?24000Khz,波特率?9600 LEDInit(); //LED 初始化 LCDInit(); //LCD 初始化 KBInit(); //键盘 初始化 tpm_init(TPM0,TPM_CLKSRC_PLL,1000); // 初始化?TPM?模块,1ms?中断一次 //4.缓冲区赋值 g_DispalyInit?=?(uint_8?*)Wait?Receiving..Soochow 2013.01.; //5.开中断 tpm_enable_int(0); init_critical(); //6.lcd?显示初始字符 LCDShow(g_DispalyInit); //============================================= ============================== for(;;) { } //============================================ return?0; } 四.实验小结 在这次实验中主要让我们熟悉掌

文档评论(0)

lihuamei118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档