软件设计调试结论范例.docVIP

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
软件设计调试结论范例

4 软件设计 4.1 主程序设计 软件设计主要包括主程序,键盘扫描程序,电机驱动程序,LCD显示程序,4.1所示。 图4.1 主程序流程图2 键盘软件设计 本设计实验采用4×4键盘,选择P0口来分时控制键盘的行和列键盘扫描程序流程如图4.2所示VCC,在没有任何按键按下时,P0低4位能始终保持为高电平,送入扫描信号中只有一个为低电平,其余为高电平。 图4.2 键盘扫描流程图int Getkey() { char col,row; //行列 char scan,keyin,kcode; //扫描信号 列按键值 扫描码 scan=0xef; for(col=0;col4;col++) //开始行扫描 { P0=scan; keyin=rowkey(); if(keyin!=0) //有键按下 { for(row=0;row4;row++) { if(keyin==(0x01row)) //只有第row列按下 { kcode=row+4*col; //计算出键码 break; } } while(rowkey()!=0); debouncer(); //防抖动函数 } scan=(scan1)|0x01; //产生左移一位扫描信号 } return(kcode); } rowkey()为(~P0)0x0f,也就是将P0读入的按键状态反向,再与0x0f进行AND运算,其目的是屏蔽高4位(使之为0),而低4位(按键状态)保持原状。 在if(keyin==(0x01row))指令中,(0x01row)是把0x01左移row位,也就是判断第row列,就先把0x01左移row位。若输入的按键状态与0x01左移row位的状态一样,表示该列的按键被按下。 kcode=row+4*col指令是将当时扫描的列值(row),加上4倍的行(col)值,作为定位按键的方法。 指令是将扫描码左移一位,而其最右边填入1.例如原本扫描码左移一位变再与0x01进行OR运算,就变 4.3 中断程序设计 中断是暂时放下目前所执行的程序,先去执行特定的程序(即中断子程序),待完成特定的程序后,再返回执行刚才放下的程序。因为键盘扫描常以中断的形式出现。8051提供5个中断服务,即外部中断INT0,外部中断INT1,定时器/计数器中断TF0,定时器/计数器中断TF1与串行口中断UART(RI/TI).中断常用到3个寄存器: 中断启用寄存器IE:开闭中断功能的开关,可位寻址的8位寄存器。 中断优先级寄存器IP:判断各中断优先级的开关,可位寻址的8位寄存器。 定时器/计数器控制寄存器TCON:是一个8位的可位寻址寄存器,其中IT0,IT1两位分别为INT0,INT1的采样信号设置位。若要采用负边缘触发信号,则可将它设定为1;若要采用低电平动作信号,则可将它设定为0. 中断的应用包括中断向量的设置以及中断子程序的编写。 (1)中断设定: 中断的设定包括开启中断开关(即IE寄存器的设定),中断优先级的设定(即IP寄存器的设定),中断信号的设定(即TCON寄存器的设定)。我们可以在程序中直接设定IE寄存器,IP寄存器及TCON寄存器,例如要开启“总开关”,“INT0”开关,可以使用以下命令: IE=0x80; //启用INT0中断 其中0x80就相当于把IE寄存器中的EA与EX0设定为1.同理,若要开启“总开关”,“INT0开关”及“INT1开关”,我们可以使用下面的命令: IE=0x85; //启用INT0,INT1中断 对于中断优先级的设定,也使用类似的命令,只是操作的对象为IP寄存器,例如要提高INT1的优先级,可以使用以下命令: IP=0x04; //设定INT1中断具最高优先级 而外部中断信号的种类,可在TCON寄存器里设定,例如INT1中断采用负边缘触发方式,可以使用以下命令: TCON=0x08; //设定INT1采用负边缘触发 (2)中断子程序; 中断子程序是一种特殊的子程序(函数),其第一行的格式如下: void 中断子程序名称(void)interrupt中断编号 using 寄存器组 例如要定义一个INT1(其中断编号为2)的中断子程序,其名称定义为“song”,而在该中断子程序中使用RB1寄存器组,则应作如下声明: void song(void) int

文档评论(0)

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

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档