网站大量收购独家精品文档,联系QQ:2885784924

AVR编程矩阵键盘AVR编程矩阵键盘.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
AVR编程矩阵键盘AVR编程矩阵键盘

???program?name :?? keyboard ; ???? 功能描述 :? 扫描16个按键(4X4),并把键值显示在数码管上(两位); ? ???? 要点 :? 在扫描按键时运用了比较复杂的两个for()循环嵌套式 ???? 扫描方案,大大减少了程序量,循环嵌套方案让我纠结了好久, ?键值有0~9,上,下,左,右,确认,清零; ? ? 体会:? 又一个里程碑,泪奔啊...我似乎成了 代码男神? 啊...; ? 实验用时:? 约等于14小时(每天2小时X7天);? ? ? ?完成时间: 2013-11-19 23:58:22 ? */ #include iom16v.h #include macros.h #define uint8? unsigned char????? //宏定义8位数据类型; #define uint16 unsigned int?????? //宏定义16位数据类型; ? ????????? //? 0 , 1? ,? 2? , 3? , 4? , 5? , 6? ,? uint8 ak[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, ??????? //??? 7? , 8? , 9 , 上? , 下?? 左 , 右? ; ??????????? 0x07,0x7f,0x6f,0x62 ,0x54,0x21,0x0c}; uint8? ge=8,shi=8 ,si=0; void bit(uint8 h)??? //数码管位选使能函数; { ?? PORTB|=0X02;?? //数码管位选置1(透明状态); ?? if(h==0) ??? { PORTB=0XFD;?? //清零(锁存状态); } } void dat(uint8 u)?? //数码管数据使能函数;??? { ?? PORTB|=0X01;??? ?? if(u==0) ?? { ???? PORTB=0XFE; ?? } } void buzz(uint8 k)??? //蜂鸣器函数; { ?? if(k==0) ??? { ?PORTC=~(0X80); } ????? else? PORTC|=0X80; } void delay(uint8 j)????????? //1=1000个计数周期; { ?? uint16? h=0; ?? while(j--) ??? { for(h=0;h1000;h++); } } void mega16()?????? //初始化各个IO口; { ? DDRA=0XFF;??? //PA输出; ? DDRB=0XFF;??? //PB输出; ? PORTA=0X00;?? //PA 输出全0; ? delay(1);???? //延时一下,1000个计数周期; ? bit(0);????????? //数码管共阴极全零; ? PORTA=0X3F;??? //数码管数据口装载数据显示0; ? PORTB=12;??? //打开led流水灯灯; ? dat(0);??????? //锁存数码管数据口数据,八个数码管显示0; ? delay(30);??? //延时一下;??? ? DDRD=0X0F;?? //PD口高四位输入,第四位输出; ? PORTD=0XFF;? //PD输入口内部上拉,输出口输出全1; ? DDRC=0XFF;?? //PC口全部输出模式; ? PORTC=0X00;?? //PC口输出全零; } void led() { ?? static uint8 g=0; ??? PORTA=0Xff;? //向数码管输入显示数据时,必先将共阴极全部置一, ???????? //否则数码管会出现阴影; bit(0);???? //八个数码管共阴极置一(低电平有效); ???switch(g) {? case 0:? PORTA=ak[ge] ;dat(0);PORTA=0XFE;break;//数码管个位; ? case 1:? PORTA=ak[shi];dat(0);PORTA=0XFD;break; //数码管十位; ? default: break;?? //否则... } ????? bit(0); ?????? g++; ??????????? if(g==2) { ? g=0; } } ? shu(uint8 c) { ????????? if(c=2) {c++;}? //1~3; else if(c==3) {ge=10;shi=10; return 0;}?? //上; ???? else if(c==11){ge=c ; shi=c; return 0;}?? //下; else if(c==7) {ge=

文档评论(0)

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

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

1亿VIP精品文档

相关文档