单片机按键与显示实验报告_第1页
单片机按键与显示实验报告_第2页
单片机按键与显示实验报告_第3页
单片机按键与显示实验报告_第4页
单片机按键与显示实验报告_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1单片机原理及应用随堂实验报告指导教师左敬龙2一、实验原理及电路口接15个灯,P3口接一个led数码显示管。刚开始时,电路处于扫描按键是否被按下的状态。当有某个按键被按下时,在键盘扫描函数的作用下,会有一小段消抖动的时间。当确定没抖动情况下,程序就会查找出是哪个按键被按下了。之后就会执行按键功能函数。以下是按键扫描函数(包括消抖动程序)和按键功能函数:按键扫描函数ucharrdkeyOucharscan1,scan2,keycode,j;P1=0x0f;if((scan1&0x0f)!=0x0f)delayms(30);if((scan1&0x0f)!=0x0f)P1=0xf0;for(j=0;j<=15;j++)按键功能函数ucharj:voidk(ucharn)if(n>=8){for(i=0;i<=8;i++)delayms(100);{PO=led[i];P2=0xff;delayms(100);if(keycode==key_code[j])key=j;return(16);}按键扫描函数是通过首先检查行(给P1赋值为0x0f,再将P1赋给变量scan1,用0x0f与scan1相与,可检查出第几行的按键被按下),再检查列的方法(将P1赋值为0xf0,再将P1赋给scan2,此时被按下键的那一列的值会变为0),然后再将两次检查的数按位或,最后将按位或后的那个数与组合键编码对比组合键编码,找出被按下的按键数,返回按键值。按键功能函数是当第n号按键按下时,连接在P3的显示器显示n,同时连接在PO,P2上的灯会从第0个开始,逐一亮到第n个。由于用到两个I/0口,所以当按键号数大于8时,程序应该将PO口赋值为0x00(共阳极)。实验电路图如下(此时被按下的按键是六号按键,即第7个按键):4U19RST畿18P10P1.3P1.6P17P0.1/AD1P0.3/ADSP0.4/AD4P0.5/AD5P0.6/ADPD,7/AD7P23/AIIP2.41A12P2、51A13P2.7/A15P3.2/NmP3.3INTP3.6R*39K36#338821025027028m₁0L5V前E口cn4二、实验程序框图定义头文件定义变量key,定义组合键编码,段码显示器显示n,同时连接在P0,P2上的灯会从第0个开始逐一亮到第n个灯定义一个键盘扫描函数scan2,keycode,j,P1赋给scan1NNYP1NNxOfY查组合键键值,算出键值并返回键值键被按下判断有无键按下,并调用按键扫描函数和按键功能函数5此实验实现的功能是当第n号按键被按下时,连接在P3的显示器显示n,同时连接在P0,P2上的灯会从第0个开始,逐一亮到第n个。实现了矩阵按键#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintucharkey;unsignedcharcodeucharled[]={0xff,Oxfe,Oxfc,0xf8,0xf0,0xe0,0xc0,0x8voiddelayms(uintms)uchart;while(ms--){uchari;P3=tab[n];PO=led[i];P2=0xff;delayms(100);f6P1=0x0f;scan1=P1;if((scan1&0x0f)!=0x0f)(scan1=P1;if((scan1&0x0f)!=0x0f)fP1=0xf0;for(j=0;j<=15;j++)if(keycode==key_code[j])}}elseP1=0xff;fvoidmain()while(1){if((P1&0x0f)!=0x0f){(k(0);7k(10);k(12);k(14);8这个实验做得比较急,因为当我做这个实验时,我的上一个实验串行口实验刚刚做完上传,而做完这个实验的第二天就要检查了。所以这次实验做得比较简做这个实验,自己的程序出现的问题也不少。由于在实验中用到了两个I/O口,当显示i(i>8)时,本来预期的功能是第一个I/O口的8个灯会逐一亮,之后一直亮,此时第二个I/O口中的前(i-8)个灯会逐一亮。但是自己做的的却不是这样,自己做的实现的是当亮的个数大于8的时候,前面8个会暗下去,并不是全亮。当自己将代码改为以下时,问题就解决了:if(n>=8)for(i=0;i<=8;i++){PO=led[i];P2=0xff;delayms(100);}for(i=0;i<n-7;i++)()P2=led[i];PO=0x00;delayms(100);当亮的灯个数大于8时,亮到第九个时,将接在P0口的灯状态设为亮,大于8的部分会逐一亮。六、实验小结这是我们单片机实验中的最后一个实验,想想,自己在做实验的过程遇到过许多不同的问题,有简单的,有难的,可是自己没

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论