- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
矩阵键盘扫描 矩阵键盘扫描 3.2.3 源程序编写 #include reg52.h? sbit ADDR0 = P1^0; sbit ADDR1 = P1^1; sbit ADDR2 = P1^2; sbit ADDR3 = P1^3; sbit ENLED = P1^4; ?#define uchar unsigned char #define uint unsigned int uchar key; unsigned char code LedChar[] = { 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E }; 矩阵键盘扫描 unsigned char code key_code[]={ 0xee, 0xde, 0xbe, 0x7e, 0xed, 0xdd, 0xbd, 0x7d, 0xeb, 0xdb, 0xbb, 0x7b, 0xe7, 0xd7, 0xb7, 0x77 }; ? void delayms(uint ms) { uchar t; while(ms--) { for(t = 0; t 120; t++); } } 矩阵键盘扫描 uchar keyscan() //键盘扫描程序 { uchar scan1,scan2,keycode,j; P2=0x0f; scan1=P2; if((scan10x0f)!=0x0f) //判键是否按下 { delayms(30); //延时30ms scan1=P2; if((scan10x0f)!=0x0f) //二次判键是否按下 { P2=0xf0; scan2=P2; keycode=scan1|scan2; //组合成键编码 for(j=0;j=15;j++) { if(keycode== key_code[j]) //查表得键值 { 矩阵键盘扫描 key=j; return(key); } } } } else P2=0xff; return (16); } void keydown() //判断是否有键按下 { P2=0xf0; if((P20xf0)!=0xf0) { keyscan(); P0=LedChar[key]; //在数码管上显示键值 } } 矩阵键盘扫描 main() { ENLED = 0; //使能U3,选择数码管DS1 ADDR3 = 1; ADDR2 = 0; ADDR1 = 0; ADDR0 = 0;? P0 = 0xbf; //数码管显示- P3 = 0xff; while(1) { keydown(); } } 矩阵键盘扫描 将上述程序编译一下,并下载到单片机中,就可 以看到程序运行的结果是当每按下一个按键,其编 号(0~F)在最右侧的数码管上显示。 思考:1、修改3.1节中的程序,使6个数码管同时循 环显示0~F。 2、矩阵键盘中,如果有两个按键同时按下,能否识 别? 项目三 数码管基础与矩阵键盘扫描 项目描述 单片机项目开发过程中经常要用到“0~9”的数 字显示,如:显示实时时钟、显示检测到的温度、 电压等。数码管是实现“0~9”的数字显示的最简 单的元件,其结构简单、价格便宜、驱动程序编写 容易,因此得到广泛应用。本项目通过编程扫描 4×4矩阵键盘,并将键值编号(0~F)显示在数码管 上。 数码管基础 3.1.1 数码管的基本介绍 七段LED数码管显示器能够显示十进制或十六进制数字及 某些简单字符。从原理图可以看出数码管共有a、b、c、d、 e、f、g、dp这么8个段,而实际上,这8个段每一段都是一个 LED小灯,所以一个数码管就是由8个LED小灯组成的。 数码管基础 从开发板的电路图上能看出来,我们所用的数码管都是共 阳数码管,一共有6个。 6个数码管的com都是接到了正极上,
原创力文档


文档评论(0)