单片机实验分解.docx

  1. 1、本文档共47页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
(1).按键相关知识:轻触开关是一种电子开关,使用时,轻轻按开关按钮就可以使开关接通,当松开手时,开关断开,如下图:(2).独立按键原理图解析:(3).按键闭合或断开时,触点会存在抖动现象:(4).程序思路:(1).相关知识: LED数码管是由多个发光二极管封装在一起组成“8”的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。LED数码管通常为七段,有的另加小数点。根据LED的接法不同,分为共阴和共阳两类 (1).原理图解析: (2).矩阵键盘扫描原理: 方法一: 逐行扫描:我们可以通过高四位轮流输出低电平来对矩阵键盘逐行扫描,当低四位接收到的数据不全为1的时候,说明有按键按下,然后通过接收到的数据哪一位为0来判断是哪一个按键被按下。方法二:行列扫描:我们可以通过高四位全部输出低电平,低四位输出高电平。当接收到的数据,低四位不全为高电平时,说明有按键按下,然后通过接收的数据值,判断是哪一列有按键按下,然后再反过来,高四位输出高电平,低四位输出低电平,然后根据接收到的高四位的值判断是那一行有按键按下,这样就能够确定是哪一个按键按下了。(3).函数示例:/*************************************************************** 函数名 : KeyDown * 函数功能: 检测有按键按下并读取键值* 输入 : 无* 输出 : 无**************************************************************/void KeyDown(void){char a=0;GPIO_KEY=0x0f;if(GPIO_KEY!=0x0f)//读取按键是否按下{Delay10ms();//延时10ms进行消抖if(GPIO_KEY!=0x0f)//再次检测键盘是否按下{GPIO_KEY=0X0F; //测试列switch(GPIO_KEY){case(0X07):KeyValue=0;break;case(0X0b):KeyValue=1;break;case(0X0d): KeyValue=2;break;case(0X0e):KeyValue=3;break;}//测试行GPIO_KEY=0XF0;switch(GPIO_KEY){case(0X70):KeyValue=KeyValue;break;case(0Xb0):KeyValue=KeyValue+4;break;case(0Xd0): KeyValue=KeyValue+8;break;case(0Xe0):KeyValue=KeyValue+12;break;}while((a50)(GPIO_KEY!=0xf0))//按键松手检测{Delay10ms();a++;}}}}(1).原理图解析:数码管的位选端通过138译码器连接到单片机的P2.2,P2.3,P2.4口。(2).138译码器相关知识: 138译码器如图所示,G1,G2,G3都是选通脚,当G1,G2,G3为100时138译码器开始工作。(3).动态扫描原理:在实时单片机系统中,往往需要多位显示,动态显示是一种常见的多位显示方法,应用的十分广泛。动态显示是多个数码管,交替显示,利用人的视觉暂停作用使人看到多个数码管同时显示的效果。就像我们看的电影是有一帧一帧的画面显示的,当速度够快的时候我们看到它就是动态的。当我们显示数码管的速度够快的时候,也就可以看到它们是同时显示了。(4).函数示例:/************************************************************** 函数名 : DigDisplay * 函数功能 : 使用数码管显示* 输入 : 无* 输出 : 无*************************************************************/void DigDisplay(){unsigned char i;unsigned int j;for(i=0;i8;i++){switch(i) //位选,选择点亮的数码管,{case(0):LSA=0;LSB=0;LSC=0; break;//显示第0位case(1):LSA=1;LSB=0;LSC=0; break;//显示第1位case(2):LSA=0;LSB=1;LSC=0; break;//显示第2位case(3):LSA=1;LSB=1;LSC=0; break;//显示第3位case(4):LSA=0;LSB=0;LS

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档