版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、programname : keyboard ; 功能描述 : 扫描16个按键(4X4),并把键值显示在数码管上(两位); 要点 : 在扫描按键时运用了比较复杂的两个for()循环嵌套式 扫描方案,大大减少了程序量,循环嵌套方案让我纠结了好久,键值有09,上,下,左,右,确认,清零; 体会: 又一个里程碑,泪奔啊.我似乎成了 代码男神 啊.; 实验用时: 约等于14小时(每天2小时X7天);完成时间: 2013-11-19 23:58:22*/#include #include #define uint8 unsigned char /宏定义8位数据类型;#define uint16 unsi
2、gned 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) /数码管数据使能函
3、数; 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); /数码管
4、共阴极全零; 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); /八个数码管
5、共阴极置一(低电平有效);switch(g) case 0: PORTA=akge ;dat(0);PORTA=0XFE;break;/数码管个位; case 1: PORTA=akshi;dat(0);PORTA=0XFD;break; /数码管十位; default: break; /否则. bit(0); g+; if(g=2) g=0;shu(uint8 c) if(c=8)&(c=10)c-=1; /79;else if(c=12)ge=0;return 0;else ; /46;ge=c; shi=0;key() uint8 i=0 ,y=0,temp=0x10 ,v=0,ke=0
6、 ,en=0xfe,0xfd,0xfb,0xf7;/ temp用于检测每一行某个键是否按下; en数组是四列检测;for(v=0;v4;v+) /v每加一代表检测一列;PORTD=env; /检测四列;temp=0x10;for(y=0;y4;y+) /y每加一,代表检测一列中的一个按键;if(PIND&temp)=0) /如果有键被按下,进入; for(i=0;i250;i+)led(); /去抖延时并且扫描数码管;if(PIND&temp)=0) /再次确认有键被按下; buzz(1); /蜂鸣器开;for(i=0;i200;i+)led(); /鸣响延时;for(i=0;i200;i+)
7、led(); /鸣响延时;buzz(0); /蜂鸣器关;/=生成键值部分=if(v=1)y+=3; /检测到第二行; /else if(v=2)y+=6; /检测到第三行; /else if(v=3)y+=9; /检测到第四行; /else ; /检测到第一行; /ke=v+y; /生成键值; /=shu(ke); / 发送键值; while(PIND&temp)=0)led(); /等待按键弹起; for(i=0;i250;i+)led(); /等待一下; while(PIND&temp)=0)led(); /再次确认一下按键是否弹起; return 0; /结束函数; temp=temp1; /左移一下代表检测下一个按键; void main(void) mega16(); /初始化各个IO口;buzz(1); /蜂鸣器开;delay(15); /延时1.5万计数周期;buzz(0);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 汽车行业研发项目经理面试技巧大全
- 37.-XX区实验初级中学2026年春季学期教导处教学仪器设备管理方案
- 专门学校考勤制度
- 安保人员日常考勤制度
- 中国电信考勤制度
- 浙江金华市义乌市2025-2026学年第一学期七年级道德与法治期末考试试卷(无答案)
- 2025-2026学年第二学期北京东直门中学九年级数学开学测试卷(无答案)
- 小规模企业考勤制度
- 居家办公按照考勤制度
- 巢湖市城管局考勤制度
- 多胎羊养殖技术培训课件
- 隧洞爆破安全培训课件
- 2026年泰山职业技术学院单招综合素质笔试模拟试题带答案解析
- 博物馆讲解培训课件
- 《机械设计》课件-上
- 卧底侦查话术手册
- 2026年-高中语文阅读理解专题训练50篇(含答案)
- 2026年湖南高速铁路职业技术学院单招职业技能考试必刷测试卷及答案1套
- 2025福建福港拖轮有限公司招聘7人笔试历年备考题库附带答案详解试卷2套
- 广东省惠州市示范名校2025-2026学年物理高二第一学期期末学业水平测试试题含解析
- 多模态信息环境下虚假新闻智能检测技术研究
评论
0/150
提交评论