单片机按键与显示实验报告.docx

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

1

单片机原理及应用随堂实验报告

学院计算机与电子信息学院专业电子信息工程班级电信11-1班

姓名··坚学号11034030132

指导教师左敬龙

实验报告评分:

2

一、实验原理及电路

实验原理:在电路图中,单片机AT89C51的P1口接有一按键矩阵,P0和P2口接15个灯,P3口接一个led数码显示管。刚开始时,电路处于扫描按键是否被按下的状态。当有某个按键被按下时,在键盘扫描函数的作用下,会有一小段消抖动的时间。当确定没抖动情况下,程序就会查找出是哪个按键被按下了。之后就会执行按键功能函数。

以下是按键扫描函数(包括消抖动程序)和按键功能函数:

按键扫描函数

ucharrdkeyO

ucharscan1,scan2,keycode,j;

P1=0x0f;

scan1=P1:

if((scan10x0f)!=0x0f)

delayms(30);

scan1=P1:

if((scan10x0f)!=0x0f)

P1=0xf0;

scan2=P1:

keycode=scan1|scan2;

for(j=0;j=15;j++)

按键功能函数

ucharj:

voidk(ucharn)

{P3=tab[n];

if(n=8)

{

for(i=0;i=8;i++)

{P2=led[i];PO=0x00;

delayms(100);

}}

else{

for(i=0;i=n;i++)

{

PO=led[i];P2=0xff;delayms(100);

if(keycode==key_code[j])

key=j;

return(key);

elseP1=0xff:

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个按键):

4

LBL4

U1

19TALI

18XTAL2

9

RST

FsEW

1

28

48

8

P10

PI

P1.2

P1.3

P1.4

P1.6

P17

A79ch

P0/ADO

P0.1/AD1P02/ADQ

P0.3/ADSP0.4/AD4P0.5/AD5P0.6/ADPD,7/AD7

P2.0/48P2.,1/A0

P2.2/A10

P23/AII

P2.41A12

P2、51A13P2.N/A14P2.7/A15

P3D/RXD

P3.2/Nm

P3.3INTP3.4/T0

P3.6R

P3,7/RO

*39

38

37

36

K36

34

#33

882

1

222

23

24

025

027

028

m?0

12V12V

L5

V

tV断

12NE

12N

i2V12V

12V

1V

ET

cn

12VTE

4

二、实验程序框图

定义头文件

定义变量key,定义

组合键编码,段码

值,灯状态值

定义按键功能函数,当第n

号按键按下时,连接在P3的

显示器显示n,同时连接在

P0,P2上的灯会从第0个开

始逐一亮到第n个灯

定义一个键盘扫描函数

定义变量scan1,

scan2,keycode,j,

并将0x0f赋给P1,将

P1赋给scan1

N(scan10x0f)!=

N

OxOf

Y

scan1=

P1

N(scan10x0f)!=0

N

xOf

Y

P1=0xf0;

scan2=P1;

keycode=

scan||scan2:

查组合键键值,算出键

值并返回键值

if(keycode==

key_code[j])

key=j;

return(key);

主函数,等待按

键被按下

P1=0xOf

文档评论(0)

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

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

1亿VIP精品文档

相关文档