实验一矩阵键盘检测docx文档格式.docx

上传人:b****8 文档编号:22617652 上传时间:2023-02-04 格式:DOCX 页数:35 大小:108.15KB
下载 相关 举报
实验一矩阵键盘检测docx文档格式.docx_第1页
第1页 / 共35页
实验一矩阵键盘检测docx文档格式.docx_第2页
第2页 / 共35页
实验一矩阵键盘检测docx文档格式.docx_第3页
第3页 / 共35页
实验一矩阵键盘检测docx文档格式.docx_第4页
第4页 / 共35页
实验一矩阵键盘检测docx文档格式.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

实验一矩阵键盘检测docx文档格式.docx

《实验一矩阵键盘检测docx文档格式.docx》由会员分享,可在线阅读,更多相关《实验一矩阵键盘检测docx文档格式.docx(35页珍藏版)》请在冰豆网上搜索。

实验一矩阵键盘检测docx文档格式.docx

ST.

--W-1

S6_

1γ⅛e,P~H

*JΓ⅛se"

-W-1

S3

1Γ⅛eL

1P3!

P3.6

SlL

SiL

SiL——ES⅞⅛∕

tP3.2

R3.7

513M

Po—»

314

k

*J"

⅛sfP"

H

1P33

P34

K2

6

YO-

PrT

FTT

K3_

iYO

肩D独立键盘

上面的图的意思是P3.1~P3.3跟P3.4~P3.7不一样的,他们是相互连接(当按下键时),组成4*4=16个键的。

如果给P3一个扫描初值的话:

如OXoF,则没有键按下时为:

P3.1~P3.3为1P3.4~P3.7为0如果有键按下,贝『情况发生变化:

高电平接入低电平:

女口P3.3与P3.7连接

的键按下,则P3.3与P3.7为0,即接地了。

则P3此时为:

00000111,

这时如果用P3&

0x0F,则高四位为0低四位保留,可以得到低四位的内容了。

通过去抖操作,即一个delay,可以得到低四位内容。

这里设为:

h=P3&

0x0F;

如果再得到高四位内容,则可以组成一个数,来定位哪个

键了。

程序框图:

 

C语言源程序:

#include<

reg51.h>

Sbitbeep=P2^3;

SbitduIa=P2^6;

SbitWeIa=P2^7;

UnSignedChari=100;

UnSignedCharj,k,temp,key;

voiddelay(unsignedChari){

for(j=i;

j>

0;

j--)for(k=125;

k>

k--);

code

}

UnSignedChar

table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,

0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

display(unsignedcharnum){

P0=table[num];

dula=1;

dula=0;

P0=0xc0;

wela=1;

wela=0;

voidmain()

{

while

(1)

P3=0xfe;

temp=P3;

temp=temp&

0xf0;

if(temp!

=0xf0)

delay(10);

if(temp!

switch(temp)

case0xee:

key=0;

break;

case0xde:

key=1;

break;

case0xbe:

key=2;

case0x7e:

key=3;

}while(temp!

{temp=P3;

temp=temp&

beep=0;

}beep=1;

display(key);

P1=0xfe;

}

P3=0xfd;

temp=P3;

{delay(10);

switch(temp)

{case0xed:

key=4;

case0xdd:

key=5;

case0xbd:

key=6;

case0x7d:

key=7;

}}

P3=0xfb;

case0xeb:

key=8;

case0xdb:

key=9;

case0xbb:

key=10;

case0x7b:

key=11;

beep=1;

P3=0xf7;

case0xe7:

key=12;

case0xd7:

key=13;

case0xb7:

key=14;

case0x77:

key=15;

汇编程序:

dulabitP2.0;

welabitP2.1;

KEYBUFEQU30H

ORG00H

START:

MOVKEYBUF,#2

WAIT:

MOVP3,#0FFH

CLRP3.4

MOVA,P3

ANLA,#0FH

XRLA,#0FH

JZNOKEY1

LCALLDELY10MS

CJNEA,#0EH,NK1

MOVKEYBUF,#0movp1,#11111110b

LJMPDK1

NK1:

CJNEA,#0DH,NK2

MOVKEYBUF,#4movp1,#11111100b

NK2:

CJNEA,#0BH,NK3

MOVKEYBUF,#8movp1,#11111000b

NK3:

CJNEA,#07H,NK4

MOVKEYBUF,#12movp1,#11110000b

NK4:

NOP

DK1:

;

等待释放

calldisplay

DK1A:

MOVA,P3

JNZDK1A

NOKEY1:

CLRP3.5

JZNOKEY2

CJNEA,#0EH,NK5

MOVKEYBUF,#1

movp1,#11111110b

NK5:

LJMPDK2

CJNEA,#0DH,NK6

MOVKEYBUF,#5

movp1,#11111100b

NK6:

CJNEA,#0BH,NK7

MOVKEYBUF,#9

movp1,#11111000b

NK7:

CJNEA,#07H,NK8

MOVKEYBUF,#13

movp1,#11110000b

NK8:

NOP

DK2:

calldisplay

DK2A:

MOVA,P3;

释放

JNZDK2A

NOKEY2:

CLRP3.6

JZNOKEY3

CJNEA,#0EH,NK9

MOVKEYBUF,#2

NK9:

LJMPDK3

CJNEA,#0DH,NK10

MOVKEYBUF,#6

NK10:

CJNEA,#0BH,NK11

MOVKEYBUF,#10

NK11:

CJNEA,#07H,NK12

MOVKEYBUF,#14

NK12:

DK3:

DK3A:

JNZDK3A

NOKEY3:

CLRP3.7

JZNOKEY4

CJNEA,#0EH,NK13

MOVKEYBUF,#3

LJMPDK4

NK13:

CJNEA,#0DH,NK14

MOVKEYBUF,#7

NK14:

CJNEA,#0BH,NK15

MOVKEYBUF,#11

NK15:

CJNEA,#07H,NK16movp1,#11110000b

MOVKEYBUF,#15

NK16:

DK4:

DK4A:

JNZDK4A

NOKEY4:

LJMPWAIT

DELY10MS:

MOVR6,#10

D1:

MOVR7,#248

DJNZR7,$

DJNZR6,D1

RET

display:

MOVA,KEYBUF

MOVDPTR,#TABLE

查表

MOVCA,@A+DPTR

MOVP0,A

setbdula

clrdula

movP0,#0c0h

setbwela

clrwela

clrp2.3

acallds1ms;

延时,以便人眼可以观察到

setbp2.3

acallds1ms

ret

ds10ms:

movr1,#1

ds1lo:

movr2,#200

ds2lo:

movr3,#200

djnzr3,$

djnzr2,ds2lo

djnzr1,ds1lo

ret;

延时返回

TABLE:

DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H

DB7FH,6FH,77H,7CH,39H,5EH,79H,71H

END

五、实验现象:

当你按下矩阵键盘中的任何一个键,蜂鸣器响一声,并在数码管上显

示相应的键值。

图为实际演示图片

六、实验小结:

本实验介绍了单片机键盘的工作原理并给出了实例,从中我们可以知

道一个完善的键盘控制程序应具备以下功能:

(1)检测有无按键按下,并采取硬件或软件措施,消除键盘按键机械触点抖动的影响。

(2)有可靠的逻辑处理办法。

每次只处理一个按键,其间对任何按

键的操作对系统不产生影响,且无论一次按键时间有多长,系统仅执行一次按键功能程序。

(3)准确输出按键值,以满足按键功能要求。

对于矩阵键盘而言,

必须将行线、列线信号配合起来作适当处理,才能确定闭合键的位置

实验二交通灯

实验目的:

1、了解单片机中断与定时器工作原理,掌握中断与定时器程序结构。

2、理解七段数码管的工作原理,并在此基础上能可以进行简单的数码管驱动操作。

3、可以灵活的用I/O口原理控制LED小灯的亮和灭。

51/AVR实验板、USB连接线、电脑。

本实验以P1口作为输出。

程序初始化是绿灯先亮,具体顺序为绿-黄-

红-黄-绿-黄-红,重复循环。

其中,红灯与绿灯显示时间均为50s,中间的黄

灯显示时间为15s。

绿灯用八位发光二极管流动闪烁作代表;

红灯用八位发光二极管全亮作代表;

黄灯用八位发光二极管全亮全灭闪烁作代表。

此外,还用到定时器To作为倒计时使用,Po口作为LED灯的显示。

在实验中利用软件延时的方法来控制红黄绿灯的亮的时间。

考虑到延时

时间较长,所以先用T0产生终端然后计数的方法来实现延时,利用P1口作

∣∣□κυ扎

fb373⅛⅝⅛SIOD⅛POjO-÷

07时应FeB网P谱∙⅛ΣX~"

trΓ⅛ff^f÷

AE.^Γ∣ΞF3HV7√7-1H片

囂陌Ir严TwE卜以办,肝商^4H<

'

■1.;

-2-二⅛

DUP2.6ft⅛⅛⅛!

⅛∣∣MHC57上^口口丄^口工占BL-口鼻亠口工

WEp37辭Z険杯昭W静赛亠口2』£

口J罷口IM口Jj

旧日8|8阿

J*

卜OlMD

WFI

JWll

:

WEi

TS

hIF

]aHC573-lWCC

.toIr丨

STT

∏1Γ

I诃D

_L:

LMI-

∏5~57

^IrTr

ΛIn½

κn⅞w⅝n

DODb-DDDD

HHCr7JVCC

UT

IQ弱常玛碗MBQ

为红黄绿灯控制端口。

实验模块图1

J4

ΠC.∙.T⅛j∩^T1卄

≤TC83C52

20

1?

IS

Ie

!

4

13

12

11

10

9

E

7

5

3

2

1

RS-PLDDBL

WR.PLi

FnPl.2C63

123456789

lJ234t松7T.111111■B14■■.1APPPPPPFR

FOPOPOPOPOPOFOPO

10FjXD

11TXD

12IyTro

13Irm

14To

15TI

16WR

17KD

ALE

匹日T

P26

P25

P2.4

P2.3

1*XTAL2P2.2

19XTALlP2.1

20GNDP2Q

O927-65431fl9-T-⅛54321

4Vl-5_J3335333^F4222-222

VCC

£

POD

DlFOl

DJFU2

DSP03

D4POJ

D5FOJ

D6PO.6茁P(H

AU

WEP2.7-Etr-FΣΓβ-LClzJENPJ.S

.…F_」•一

PM一刃•丁:

—1SB20F2.2

⅛ħ∙-

p∑o

)5

8

IL

14

15

16

17

19

Pl

L

Db

Dl

D2

D3

c+

C

D4

UJl

Γ5

D6

DT-

IOK

日单片机垠小系统

G⅛團上标注的为PCB网络编号*可以对应相关的外部摸块

实验模块图2

四、实验步骤:

1、熟悉单片机内部原理图,掌握各实验模块的使用方法

2、设计实验方案,画出流程图。

开始

Γ

绿灯先亮

■R

r

50秒倒计时显示

黄灯亮

15秒倒计时显示

红灯亮

F

3、根据流程图编写程序。

程序如下:

#defineUCharUnSignedChar

#defineuintunsignedintsbitdula=P2^6;

sbitwela=P2^7;

sbitbeep=P2^3;

unsignedintpp;

unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,

ucharj,k,l=255;

uchara1,a0;

ucharshijian,deng=2;

voiddelay(unsignedinti)

voiddisplay(unsignedcharsh_c,unsignedcharg_c)

P0=table[sh_c];

P0=0xfe;

wela=1;

wela=0;

delay(5);

P0=table[g_c];

P0=0xfd;

delay(5);

TMOD=0x01;

TR0=1;

TH0=(65536-46080)/256;

//由于晶振为11.0592,故所记次数应为

TL0=(65536-46080)%256;

//46080ET0=1;

EA=1;

if(shijian==0)

switch(deng)

case0:

shijian=50;

deng=1;

case1:

shijian=15;

的来历,为50000*11.0592/12

//红灯

//黄灯

46080,计时器每隔50000微秒发起一次中断。

deng=2;

case2:

deng=3;

case3:

deng=0;

if(pp==20)

{pp=0;

shijian--;

}a0=shijian%10;

a1=shijian/10;

display(a1,a0);

switch(deng)

P1=0X00;

//黄灯if(shijian%2==0)P1=0x00;

if(shijian%2==1)P1=0xff;

//绿灯if(shijian%2==0)P1=0x55;

if(shijian%2==1)P1=0xaa;

//绿灯

if(shijian%2==0)//黄灯

P1=0x00;

voidtime0()interrupt1

{TH0=(65536-46080)/256;

pp++;

4、下载程序到单片机,观察实验现象。

上电后,绿灯(八位发光二极管流动闪烁)先亮,数码管50秒倒计时;

黄灯(八位发光二极管全亮全灭闪烁)亮,数码管15秒倒计时;

接着红灯亮(八位发

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1