13键控彩灯.pptVIP

  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文档。上传文档
查看更多
13键控彩灯

任务三 键控彩灯(中断) 用按键控制彩灯的运行。通过按动按键,彩灯在三种闪亮方式(左移、右移和自定义花样)之间切换。学会使用单片机的外部中断实现各种控制功能。 键盘 键盘是单片机应用系统常用的输入设备。 按键是一个简单的开关: 当按键按下时,相当于开关闭合; 当按键松开时,相当于开关断开。 功能:判断哪个键按下。 所有行线输出0,然后读列线的输入状态。 所有列线输出0,然后读行线的输入状态。 将行号和列号叠加形成扫描码。根据扫描码找到按键编码。 CPU在正常执行程序时,系统中出现特殊请求,CPU暂时中止当前程序,转去处理更紧急的事件,处理完毕后,CPU返回主程序的过程。 中断解决了快速主机与慢速I/O设备的数据传送问题。 中断优先级控制 同一优先级的优先权排队如下表: 中断响应条件 有中断请求; 对应中断允许位为1; 开中断(即EA=1)。 同时满足时,才可能响应中断。 外部中断请求源 中断程序结构 1、主程序部分 1)设置中断触发方式。 2)中断优先级。 3)开放中断。 中断程序结构 2、中断服务程序部分 1)根据需要保护现场。(C语言自动完成) 2)若为电平触发的外部中断,应有中断信号撤除操作。 3)中断操作。 4)恢复现场。(C语言自动完成) 5)中断返回。(C语言自动完成) C51中的中断服务程序的格式: 函数类型 函数名(参数)interrupt 中断号[using 寄存器组号] void int_0( ) interrupt 0 //外部中断0 void int_1( ) interrupt 2 //外部中断1 P1口:连接8个发光二极管。 P3.2(INT0,外部中断0输入端口):连接一个按钮。 软件设计 采用模块化设计方法: 1、主程序:完成初始化工作,控制程序的走向。 2、中断服务子程序:完成显示花样的改变。 3、左移显示子程序:实现彩灯的左移显示。 4、右移显示子程序:实现彩灯的右移显示。 5、花样显示子程序:实现彩灯的花样显示。 6、10ms延时子程序:延时10ms,实现按键软件消抖。 7、0.5s延时子程序:延时0.5s。 主程序 uchar flag,light,assum; void main( ) { IT0=1; EX0=1; EA=1; flag=1; light=0x01; assum=0; while(1) { switch(flag) { case 1:left( );break; case 2:right( );break; case 3:assume( );break; } delay05s( ); } } 中断服务子程序 void int_0( ) interrupt 0 { delay10ms( ); if(INT0==0) { flag++; if(flag3)flag=1; } } void delay05s(void) { unsigned char i,j,k; for(i=5;i0;i--) for(j=200;j0;j--) for(k=250;k0;k--); } 1、扫描独立按键控制彩灯控制。 2、利用中断实现彩灯控制。 3、增加数码管显示花样编号。 主程序流程 功能:判断是否有键按下。 设置列线输出,行线输入。 列线全部输出0,看行线是否有0输入。 若行线有0输入,说明有键按下。 若行线没有0输入,说明没有键按下。 设置行线输出,列线输入。 行线全部输出0,看列线是否有0输入。 若列线有0输入,说明有键按下。 若列线没有0输入,说明没有键按下。 功能:判断哪个键按下。 行(列)线逐行(列)输出0,看哪一列(行)有0输入。 若列(行)线输入全部为1,说明没有键按下。 若某列(行)有0输入,说明这一列(行)有键按下,记录下当时的行号和列号。将行号和列号叠加形成扫描码。根据扫描码找到按键编码。 #include reg51.h“ #define uchar unsigned char uchar flag; uchar light,assum; void delay10ms(void) { unsigned char i,k; for(i=20;i0;i--) for(k=250;k0;k--); } void left(void) { uchar i,j; j=0x01; for(i=8;i0;i--) { P1=~j; delay05s( ); j=j1; } } void right(

文档评论(0)

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

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

1亿VIP精品文档

相关文档