4X4矩阵式键盘输入程序

4X4矩阵式键盘输入程序
4X4矩阵式键盘输入程序

4*4键盘程序readkeyboard:

begin: acall key_on

jnz delay

ajmp readkeyboard

delay:acall delay10ms

acall key_on

jnz key_num

ajmp begin

key_num:acall key_p

anl a,#0FFh

jz begin

acall key_ccode

push a

key_off:acall key_on

jnz key_off

pop a

ret

key_on: mov a,#00h

orl a,#0fh

mov p1,a

mov a,p1

orl a,#0f0h

cpl a

ret

key_p: mov r7,#0efh

l_loop:mov a,r7

mov p1,a

mov a,p1

orl a,#0f0h

mov r6,a

cpl a

jz next

ajmp key_c

next: mov a,r7

jnb acc.7,error

rl a

mov r7,a

ajmp l_loop

error:mov a,#00h

ret

key_c:mov r2,#00h

mov r3,#00h

mov a,r6

mov r5,#04h

again1:jnb acc.0,out1

rr a

inc r2

djnz r5, again1

out1: inc r2

mov a,r7

mov r5,#04h

again2:jnb acc.4,out2

rr a

inc r3

djnz r5,again2

out2: inc r3

mov a, r2

swap a

add a,r3

ret

key_ccode:push a

swap a

anl a,#0fh

dec a

rl a ;行号乘4

rl a

mov r7,a

pop a

anl a,#0fh

dec a

add a,r7

ret

delay10ms:

anl tmod,#0f0h

orl tmod,#01h

mov th0,#0d8h

mov tl0,#0f0h

setb tr0

wait:jbc tf0,over

ajmp wait

clr tr0

over:ret

单片机键盘设计

(二)从电路或软件的角度应解决的问题

软件消抖:如果按键较多,硬件消抖将无法胜任,常采用软件消抖。通常采用软件延时的方法:在第一次检测到有键按下时,执行一段延时10ms的子程序后,再确认电平是否仍保持闭合状态电平,如果保持闭合状态电平,则确认真正有键按下,进行相应处理工作,消除了抖动的影响。(这种消除抖动影响的软件措施是切实可行的。)

2.采取串键保护措施。串键:是指同时有一个以上的键按下,串键会引起CPU错误响应。

通常采取的策略:单键按下有效,多键同时按下无效。

3.处理连击。连击:是一次按键产生多次击键的效果。要有对按键释放的处理,为了消除连击,使得一次按键只产生一次键功能的执行(不管一次按键持续的时间多长,仅采样一个数据)。否则的话,键功能程序的执行次数将是不可预知,由按键时间决定。连击是可以利用的。连击对于用计数法设计的多功能键特别有效。

三、键盘工作方式

单片及应用系统中,键盘扫描只是CPU的工作内容之一。CPU忙于各项任务时,如何兼顾键盘的输入,取决于键盘的工作方式。考虑仪表系统中CPU任务的份量,来确定键盘的工作方式。

键盘的工作方式选取的原则是:既要保证能及时响应按键的操作,又不过多的占用CPU的工作时间。

键盘的工作方式有:查询方式(编程扫描,定时扫描方式)、中断扫描方式。

四、键盘电路结构

(一)独立式按键接口设计

优点:电路配置灵活,软件结构简单。此键盘是用于按键较少或操作速度较高的场合。

也可以用扩展I/O口搭接独立式按键接口电路,可采用8255扩展I/O口,用三态缓冲器扩展。这两种配接方式,都是把按键当作外部RAM某一工作单元的位来对待,通过读片外RAM 的方法,识别按键的工作状态。

上电路中独立式按键电路,各按键开关均采用了上拉电阻,是为了保证在按键断开时,各I/O有确定的高电平。如输入口线内部已有上拉电阻,则外电路的上拉电阻可省去。

(二)矩阵式键盘接口设计

矩阵式键盘适用于按键数量较多的场合,由行线和列线组成,按键位于行列的交叉点上。节省I/O口。

矩阵键盘工作原理:行线通过上拉电阻接到+5V上。无按键,行线处于高电平状态,有键按下,行线电平状态将由与此行线相连的列线电平决定。列线电平为低,则行线电平为低;列线电平为高,则行线电平为高。

五、双功能及多功能键设计

在单片机应用系统中,为简化硬件线路,缩小整个系统的规模,总希望设置最少的按键,获得最多的控制功能。

矩阵键盘与独立式按键键盘相比,硬件电路大大节省。可通过软件的方法让一键具有多功能。方法:选择一个RAM工作单元,对某一个按键进行按键计数,根据不同计数值,转到子程序。这种计数多功能键最好与显示器结合用,以便知道当前计数值,同时配合一个启动键。

复合键是使用软件实现一键多功能的另一个途径。所谓复合键,就是两个或两个以上的键的联合,当这些键同时按下时,才能执行相应的功能程序。实际情况做不到“同时按下”,他们的时间差别可以长到50ms,解决策略是:定义一个或两个引导键,这些引导键按下时没什么意义,执行空操作。引导键的例子:微机键盘上的CTRL、SHIFT、ALT。

缺点:一是操作变得复杂,二是操作时间变长。

多功能键的利用,应具体情况具体分析。要求速度的场合最好做一键一功能。如果系统功能很多,一键一功能不现实,可采取一键多功能。

六、功能开关及拨码盘接口设计

设计原因:键盘输入灵活性大,操纵方便。但某些重要功能或数据由键盘输入,误操作将产生一些不良后果。因此常设定静态开关的方法来执行这些功能或输入数据。静态开关一经设定,将不再改变,一直维持设定的开关状态。通常这些开关状态是在单片机系统加电时由CPU读入内存RAM的,以后CPU将不再关注这些开关的状态,因此,即使加电后,这些开关的状态发生变化,也不会影响CPU的正常工作,只有在下一次加电时,这些新状态才能生效。

第一,功能开关:主要是根据开关的状态执行一些重要的功能。

第二,拨码盘:单片机应用系统中,有时要输入一些控制参数,这些参数一经设定,将维持不变,除非给系统断电后重新设定。这时使用数字拨码盘既简单直观,又方便可靠。

七、按键介绍

常用的按键有三种:机械触点式按键、导电橡胶式和柔性按键(又称触摸式键盘)。

机械触点式按键是利用弹性使键复位,手感明显,连线清晰,工艺简单,适合单件制造。但是触点处易侵入灰尘而导致接触不良,体积相对较大。

导电橡胶按键是利用橡胶的弹性来复位,通过压制的方法把面板上所有的按键制成一块,体积小,装配方便,适合批量生产。但是时间长了,橡胶老化而使弹力下降,同时易侵入灰尘。

柔性按键是近年来迅速发展的一种新型按键,可以分为凸球型和平面型两种。凸球型动作幅度触感明显,富有立体感,但制造工艺相对复杂;平面型幅度微小,触感较弱,但工艺简单,寿命长。柔性按键最大特点是防尘、防潮、耐蚀,外形美观,装嵌方便。而且外形和面板的布局、色彩、键距可按照整机的要求来设计。

八、单片机系统键盘设计实例

键盘工作方式采用定时扫描方式。采用定时器T0定时,CPU每隔200ms扫描键盘一次,即通过读取573的输出数据,识别按键的工作状态。

对于重键(串键:指同时有一个以上的键按下),采用软件提供保护,当判断为一个以上的键按下,则不处理,返回重新进行监测。只有监测到一个键按下时,才判断键值,执行相应键处理工作。

键盘对液晶显示的控制是通过显示画面的页码作为接口参数来完成的。在每一页中,键盘对数据的修改是通过对按键次数的计算作为接口参数来实现的。具体例程如下:

void keyscan() /*键盘扫描*/

{ucher data newz ,temp,pat;

if(time_out)

{ACC=MJP; /*读取573数据*/

temp=ACC&0x0f, /*取低四位*/

if(temp!=0x0f) /*有键按下*/

{msec(10); /*延时10MS*/

ACC=MJP; /*读取573数据*/

temp=ACC&0x0f

if(temp=0x0f)

{newz=temp; /*读取新键值*/

pat=newz^old; /*键值有无变化*/

if(pat)>0) /*有变化*/

{old=newz; /*原键值等于新键值*/

keymana(); /*调键散转程序*/

}

else;

}

else;

}

elsr;

old=temp; /*原键值不变*/

time_out=0 /*标志位置零*/

}

esel;

}

4*4键盘程序

; 0 1 2 3 --P30

; 4 5 6 7 --P31

; 8 9 A B --P32 ; C D E F --P33 ; P34 P35 P36 P37 ORG 0000h

LJMP MAIN

ORG 0030h

MAIN:

MOV DPTR,#TAB

LCALL KEY

MOVC A,@A+DPTR MOV P0,A CLR P1.3

LJMP MAIN

KEY: LCALL KS

JNZ K1

LCALL DELAY2 AJMP KEY

K1: LCALL DELAY2

LCALL KS

JNZ K2

AJMP KEY

K2: MOV R2,#0EFH

MOV R4,#00H

K3: MOV P3,R2

L6: JB P3.0,L1

MOV A,#00H AJMP LK

L1: JB P3.1,L2

MOV A,#04H

AJMP LK

L2: JB P3.2,L3

MOV A,#08H

AJMP LK

L3: JB P3.3,NEXT MOV A,#0cH LK: ADD A,R4

PUSH ACC K4: LCALL DELAY2 LCALL KS

JNZ K4

POP ACC

RET

NEXT:INC R4

MOV A,R2

JNB ACC.7,KEY

RL A

MOV R2,A

AJMP K3

KS: MOV P3,#0FH

MOV A,P3

XRL A,#0FH

RET

DELAY2: MOV R5,#08H

L7: MOV R6,#0FAH

L8: DJNZ R6,L8

DJNZ R5,L7

RET

TAB:DB 0C0H;0

DB 0F9H;1

DB 0A4H;2

DB 0B0H;3

DB 099H;4

DB 092H;5

DB 082H;6

DB 0F8H;7

DB 080H;8

DB 090H;9

DB 088H;A

DB 083H;b

DB 0C6H;C

DB 0A1H;d

DB 086H;E

DB 08EH;F

END

4X4矩阵键盘扫描汇编程序PROC KEYCHK

KEYNAME DATA 40H

;(b7-b5纪录按键状态,b4位为有效位, ;b3-b0纪录按键)

KEYRTIME DATA 43H

SIGNAL DATA 50H

KEY EQU P3

KEYPL EQU P0.6

RTIME EQU 30

KEYCHK: MOV KEY,#0FH

MOV A,KEY

CJNE A,#0FH,NEXT1

; CLR C

NEXT1:

; SETB C

MOV A,KEYNAME

ANL KEYNAME,#1FH

RRC A

ANL A,#0E0H

ORL KEYNAME,A

CJNE A,#0C0H,NEXT2

SJMP KEYSCAN

NEXT2: CJNE A,#0E0H,NEXT3

SJMP WAIT

NEXT3:CJNE A,#0A0H,EXIT

ORL KEYNAME,#0E0H WAIT: MOV A,KEYRTIME

JNZ EXIT

KEYSCAN: MOV R1,#0

MOV R3,#11110111B LOOP: MOV A,R3

RL A

MOV R3,A

MOV KEY,A

MOV A,KEY

ORL A,#0F0H

CJNE A,#0FFH,NEXT31

INC R1

CJNE R1,#4,LOOP

SJMP EXIT

NEXT31: JB ACC.0,NEXT32

MOV R2,#0

SJMP NEXT5

NEXT32:JB ACC.1,NEXT33

MOV R2,#1

SJMP NEXT5

NEXT33:JB ACC.2,NEXT34

MOV R2,#2

SJMP NEXT5

NEXT34:MOV R2,#3

NEXT5: MOV A,R1

RL A

RL A

ADD A,R2

MOV DPTR,#KEYTAB

MOVC A,@A+DPTR

ANL KEYNAME,#0E0H

ORL KEYNAME,A

MOV KEYRTIME,#RTIME

CLR KEYPL

MOV SIGNAL,#10

EXIT: MOV KEY,#0FFH

RET

KEYTAB: ;//=按键名称表=

DB 1AH ;扫描码0,对应A

DB 1BH ;扫描码1,对应B

DB 1CH ;扫描码2,对应C

DB 1DH ;扫描码3,对应D

DB 11H ;扫描码4,对应1

DB 14H ;扫描码5,对应4

DB 17H ;扫描码6,对应7

DB 1EH ;扫描码7,对应E

DB 12H ;扫描码8,对应2

DB 15H ;扫描码9,对应5

DB 18H ;扫描码A,对应8

DB 10H ;扫描码B,对应0

DB 13H ;扫描码C,对应3

DB 16H ;扫描码D,对应6

DB 19H ;扫描码E,对应9

DB 1FH ;扫描码F,对应F

END

4×4矩阵式键盘

org 0000h

ljmp start

org 0030h

start:mov dptr,#table

mov r3,#4

mov p2,#00h

lcall keyscan

response:movc a,@a+dptr

mov p0,a

setb p2.1

keyscan:lcall keypress;

jnz k1

jmp keyscan

k1: lcall delay

lcall keypress

jnz k2

jmp keyscan

k2: mov r0,#00h mov r1,#00h mov p1,#0efh mov a,p1

anl a,#0fh; mov r2,a

xrl a,#0fh

jnz k3

mov p1,#0dfh mov r0,#01h mov a,p1

anl a,#0fh

mov r2,a

xrl a,#0fh

jnz k3

mov p1,#0bfh; mov r0,#02h

mov a,p1

anl a,#0fh; mov r2,a

xrl a,#0fh

jnz k3

mov p1,#07fh; mov r0,#03h; mov a,p1

anl a,#0fh; mov r2,a

xrl a,#0fh

jnz k3

jmp keyscan

k3: mov a,r2

rrc a ;

jnc k4 ;

rrc a

jnc k5 ;

rrc a

jnc k6 ;

jnb p1.3,$

mov r1,#03h

mov a,r0

mov b,r3

mul ab

add a,r1

jmp response

k4: jnb p1.0,$ ; mov r1,#00h

mov a,r0

mov b,#4

mul ab

add a,r1

jmp response

k5: jnb p1.1,$

mov r1,#01h

mov a,r0

mov b,#4

mul ab

add a,r1

jmp response

k6: jnb p1.2,$

mov r1,#02h

mov a,r0

mov b,#4

mul ab

add a,r1

jmp response keypress:mov p1,#0fh mov a,p1

xrl a,#0fh

ret

delay: mov r7,#50

d1: mov r6,#248

djnz r6,$

djnz r7,d1

ret

table: db 3fh,06h,5bh,4fh;0 1 2 3

66h,6dh,7dh,07h;4 5 6 7

7fh,6fh,77h,7ch;8 9 a b

39h,5eh,79h,71h;c d e f

end *********

4×4矩阵式键盘KEYNAME DATA 40H

ORG 0000H

LJMP MAIN

ORG 0030H

MAIN:MOV SP, #80H

CLR F0

LOOP:LCALL KEYCHK

LCALL KEYSCAN

SJMP LOOP

KEYCHK:MOV P1, #0F0H

MOV A, P1

CJNE A, #0F0H, $+3

LCALL DELAY_10MS

MOV A, P1

CJNE A, #0F0H, NEXT11

CLR F0

SJMP EXIT1

NEXT11:SETB F0

EXIT1:RET

KEYSCAN:

JNB F0, EXIT2

MOV R7, #4

MOV R5, #0

MOV R6, #01111111B

LOOP1:MOV A, R6

RL A

MOV R6, A

MOV P1, A

MOV A, P1

ANL A, #0F0H

XRL A, #0F0H

JNZ NEXT21

INC R5

DJNZ R7, LOOP1

SJMP EXIT2

NEXT21:

JNB Acc.4, NEXT22

MOV R4, #0

SJMP NEXT25

NEXT22:

JNB Acc.5, NEXT23

MOV R4, #1

SJMP NEXT25

NEXT23:

JNB Acc.6, NEXT24

MOV R4, #2

SJMP NEXT25

NEXT24:MOV R4, #3

NEXT25:MOV A, R5

RL A

RL A

ADD A, R4

MOV DPTR, #KEYTAB

MOVC A, @A+DPTR

MOV KEYNAME, A

EXIT2:RET

DELAY_10MS:SETB RS1

SETB RS0

MOV R2,#20

DELAY0:MOV R3,#250

DJNZ R3,$

DJNZ R2,DELAY0

RET

KEYTAB:DB 0,1,2,3,4,5,6,

7,8,9,10,11,

12,13,14,15

END

4X4键盘输入数码管移位显示1 #include

#include

#include

uchar num,num1,temp;

sbit dula=P2^6;

sbit wela=P2^7;

uchar code table[]={0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71,0x00};

uchar keyscan();

void delay(uchar z)

{ //10MS延时

uint x;

for(z;z!=0;z--)

for(x=1250;x!=0;x--);

}

void main()

{

wela=1;

dula=0;

P0=0xc0;

num=17;

P0=0;

wela=0; //所有数码管不亮

dula=1;

while(1)

{

num1=keyscan();

P0=table[num1-1];

}

}

uchar keyscan()

{

P3=0xf0;

temp=P3;

while(temp!=0xf0)

{

delay(1);

temp=P3;

while(temp!=0xf0)

{

P3=0xfe;

temp=P3&0xf0;

if(temp!=0xf0)

{

temp=P3;

switch(temp)

{

case 0xee:num=1,temp=0xf0; break;

case 0xde:num=2,temp=0xf0; break;

case 0xbe:num=3,temp=0xf0; break;

case 0x7e:num=4,temp=0xf0; break;

// default:temp=0xf0;

}

P3=0xfd;

temp=P3&0xf0;

while(temp!=0xf0)

{

temp=P3;

switch(temp)

{

case 0xed:num=5,temp=0xf0;break;

case 0xdd:num=6,temp=0xf0;break;

case 0xbd:num=7,temp=0xf0;break;

case 0x7d:num=8,temp=0xf0;break;

// default:temp=0xf0;

}

}

P3=0xfb;

temp=P3&0xf0;

while(temp!=0xf0)

{

temp=P3;

switch(temp)

{

case 0xeb:num=9,temp=0xf0;break; case 0xdb:num=10,temp=0xf0;break; case 0xbb:num=11,temp=0xf0;break; case 0x7b:num=12,temp=0xf0;break;

// default:temp=0xf0;

}

}

P3=0xf7;

temp=P3;

temp&=0xf0;

while(temp!=0xf0)

{

temp=P3;

switch(temp)

{

case 0xe7:num=13,temp=0xf0;break; case 0xd7:num=14,temp=0xf0;break; case 0xb7:num=15,temp=0xf0;break; case 0x77:num=16,temp=0xf0;break;

// default:temp=0xf0;

}

}

}

return (num);

}

4X4键盘输入数码管移位显示2 #include

#include

#include

uchar num,num1,num2,temp;

uchar a,b,c,d,e,f;

sbit dula=P2^6;

sbit wela=P2^7;

uchar code table[]={0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71,0x00};

uchar code table1[]={0xdf,0xef,0xf7,0xfb,

0xfd,0xfe} ;

uchar keyscan();

void display();

void delay(uchar z)

{

uint x;

for(z;z!=0;z--)

for(x=625;x!=0;x--);

}

void inti()

{

num1=0;

a=b=c=d=e=f=16;

wela=0;

dula=0;

}

void main()

{

inti();

while(1)

{

keyscan();

switch(num1)

{

case 1:a=num-1;break;

case 2:b=num-1;break;

case 3:c=num-1;break;

case 4:d=num-1;break;

case 5:e=num-1;break;

case 6:f=num-1;break;

// default:;

}

display();

}

}

uchar keyscan()

{

P3=0xf0;

temp=P3;

while(temp!=0xf0)

{

delay(1);

temp=P3;

while(temp!=0xf0)

{

P3=0xfe;

temp=P3&0xf0;

if(temp!=0xf0)

{

temp=P3;

switch(temp)

{

case 0xee:num=1,temp=0xf0; break;

case 0xde:num=2,temp=0xf0; break;

case 0xbe:num=3,temp=0xf0; break;

case 0x7e:num=4,temp=0xf0; break;

// default:temp=0xf0;

}

}

P3=0xfd; //

temp=P3&0xf0;

while(temp!=0xf0)

{

temp=P3;

switch(temp)

{

case 0xed:num=5,temp=0xf0;break;

case 0xdd:num=6,temp=0xf0;break;

case 0xbd:num=7,temp=0xf0;break;

case 0x7d:num=8,temp=0xf0;break;

// default:temp=0xf0;

}

}

P3=0xfb;

temp=P3&0xf0;

while(temp!=0xf0)

{

temp=P3;

switch(temp)

{

case 0xeb:num=9,temp=0xf0;break;

case 0xdb:num=10,temp=0xf0;break;

case 0xbb:num=11,temp=0xf0;break;

case 0x7b:num=12,temp=0xf0;break;

// default:temp=0xf0;

}

}

P3=0xf7;

temp=P3;

temp&=0xf0;

while(temp!=0xf0)

{

temp=P3;

switch(temp)

{

case 0xe7:num=13,temp=0xf0;break;

case 0xd7:num=14,temp=0xf0;break;

case 0xb7:num=15,temp=0xf0;break;

case 0x77:num=16,temp=0xf0;break;

// default:temp=0xf0;

}

}

P3=0xf0;

while(P3!=0xf0);

delay(1);

while(P3!=0xf0);

}

if(num1==6)

{num1=0;}

num1++;

}

return (num);

}

void display()

{ //最右第1个数码管,下同。

P0=table[a];

dula=1;

dula=0;

num2=num1;

switch(num2)

{

case 1:num2=0;break;

case 2:num2=1;break;

case 3:num2=2;break;

case 4:num2=3;break;

case 5:num2=4;break;

case 6:num2=5;break; }

P0=table1[num2];

wela=1;

delay(1);

P0=0xff;

wela=0;

P0=table[b]; //2

dula=1;

dula=0;

num2=num1;

switch(num2)

{

case 1:num2=5;break;

case 2:num2=0;break;

case 3:num2=1;break;

case 4:num2=2;break;

case 5:num2=3;break;

case 6:num2=4;break; }

P0=table1[num2];

wela=1;

delay(1);

P0=0xff;

wela=0;

P0=table[c]; //3

dula=1;

dula=0;

num2=num1;

switch(num2)

{

case 1:num2=4;break;

case 2:num2=5;break;

case 4:num2=1;break;

case 5:num2=2;break;

case 6:num2=3;break; }

P0=table1[num2];

wela=1;

delay(1);

P0=0xff;

wela=0;

P0=table1[num2];

wela=1;

delay(1);

P0=0xff;

wela=0;

P0=table[d]; //4

dula=1;

dula=0;

num2=num1;

switch(num2)

{

case 1:num2=3;break;

case 2:num2=4;break;

case 3:num2=5;break;

case 4:num2=0;break;

case 5:num2=1;break;

case 6:num2=2;break; }

P0=table1[num2];

wela=1;

delay(1);

P0=0xff;

wela=0;

P0=table1[num2];

wela=1;

delay(1);

P0=0xff;

wela=0;

P0=table[e]; //5

dula=1;

dula=0;

num2=num1;

switch(num2)

{

case 2:num2=3;break;

case 3:num2=4;break;

case 4:num2=5;break;

case 5:num2=0;break;

case 6:num2=1;break;

}

P0=table1[num2];

wela=1;

delay(1);

P0=0xff;

wela=0;

P0=table1[num2];

wela=1;

delay(1);

P0=0xff;

wela=0;

P0=table[f]; //6

dula=1;

dula=0;

num2=num1;

switch(num2)

{

case 1:num2=1;break;

case 2:num2=2;break;

case 3:num2=3;break;

case 4:num2=4;break;

case 5:num2=5;break;

case 6:num2=0;break;

}

P0=table1[num2];

wela=1;

delay(1);

P0=0xff;

wela=0;

}

C51矩阵键盘

#i nclude

#i nclude

void delay(unsigned int i);

const unsigned char leddigit[12]={0x28,0x7e,0xa2,0x62,

0x74,0x61,0x21,0x7a,0x20,0x60,0xff,0xdf}; /* 字符 0-9 编码,0xff为关显示,0xdf为小数点 */ #define disp(a,b) P2=~(1<<(a));P0=leddigit[b]

#define uchar unsigned char

电子琴C程序代码,四乘四矩阵键盘输入

电子琴C程序代码,四乘四矩阵键盘输入#include #define uchar unsigned char #define uint unsigned int sbit duan=P 2八6; sbit wei=P 2八7; sbit bee=P 2八3; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; uchar code tablewe[]={ 0x7f,0xbf,0xdf,0xef, 0xf7,0xfb,0xfd,0xfe}; uchar disp[16]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; // 在里面输入按下键值为0~15 对应要显示的第一位码值uchar disp1[16]={0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71,0x3f}; // 在里面输入按下键值为0~15 对应要显示的第二位码值unsigned char temp; unsigned char key; unsigned char i,j;

unsigned char STH0; unsigned char STL0; unsigned int code tab[]={ //63625, 63833, 64019, 64104, 64260, 64400, 64524 ,// 低音区:1 2 3 4 64580, 64685, 64778, 64820, 64898, 64968, 65030 ,// 中音区:1 2 3 4 5 65058, 65110, 65157, 65178, 65217, 65252, 65283 ,// 高音区:1 2 3 4 5 65297 ,// 超高音:1 }; // 音调数据表可改 void delay(uchar x) uchar y,z; for(y=x;y>0;y--) for(z=0;z<110;z++); void init() TMOD=0x01; ET0=1; EA=1; void display() { for(i=0;i<2;i++)

4乘4矩阵键盘输入数码管显示四位数

综合课程设计三相步进电机控制器电路的设计 学生姓名__________

指导教师_________ 课程设计任务书 一、设计说明 步进电机是工业过程控制及仪表控制中的主控元件之一,作为执行元件其特点为能够快速起启停、精度高且能直接接收数字量,由于这些特点使其在定位场合得到了广泛的应用。 设计一个三相步进电机控制器,使其能够控制步进电机的工作状态,如步进电机正、反转,步进电机的工作方式等。 用键盘设定步进电机的工作频率,工作方式,并用数码管显示设定值,可以通过按键来更换显示内容。用示波器观测三相的输出波形,并用数码管显示电路的工作状态。 二、技术指标 步进电机的工作频率为:<10kHz 三、设计要求 1.进行方案论证,提出一个合理的设计方案并进行理论设计; 2.对所设计的方案部分进行调试; 3.在选择器件时,应考虑成本。 4.设计测量调试电路。 四、实验要求 1.根据技术指标制定实验方案;验证所设计的电路。 2.进行实验数据处理和分析。 五、推荐参考资料 1?谢自美?电子线路设计?实验?测试.[M]武汉:华中理工大学出版社,2000 年 2. 阎石. 数字电子技术基础. [M] 北京:高等教育出版社,2006年 3. 童诗白、华成英.模拟电子技术基础. [M] 北京:高等教育出版社,2006年 4..付家才. 电子实验与实践. [M] 北京:高等教育出版社,2004年 5.沙占友、李学芝著.中外数字万用表电路原理与维修技术. [M] 北京:人民 邮电出版社,1993年

六、按照要求撰写课程设计报告成绩评定表

一、概述 本次毕设的题目是:三相步进电机控制电路的设计。本次毕设使用80C51单片机作为主控芯片,利用ULN2003A集成电路作为三相步进电机的驱动电路,采用单极性驱动方式,使三相步进电机能在(1)三相单三拍,(2)三相双三拍, (3)三相六拍三种工作方式下正常工作;能实现的功能有:启动/停止控制、方向控制;速度控制;用LED数码管显示工作方式。键盘输入工作频率。本次课程设计采用80C51单片机作为主控芯片,程序采用C语言来编写,驱动电路采用ULN2003A集成电路,显示采用 7SEG-MPX4-CC卩四位共阴数码管,P0接段码,并用8只1K欧左右电阻上拉。P2的4位10 口接位选码。正转,数码管显示1。反转,数码管显示2.不转,数码管显示0.采用Proteus软件进行仿真。在Keil uVsuon3编程环境下编程和编译生成HEX文件,导入到 80C51单片机,实现对各个模块的控制,实现我们所需要的功能。 本次课程是对毕业设计的基础设计,即实现4x4键盘输入,数码管显示输入数字的设计。 二、方案论证 1步进电机驱动方案选择 方案1 :使用功率三极管等电子器件搭建成功率驱动电路来驱动电机的运行。这种方案的驱动电路的优点是使用电子器件联接,电路比较简单,但容易受 干扰,信号不够稳定,缺点是器件较大而不便电路的集成,使用时很不方便,联接时容易出错误。 方案2:使用专门的电机驱动芯片ULN2003A来驱动电机运行。驱动芯片的优点是便于电路的集成,且驱动电路简单,驱动信号很稳定,不易受外界环境的干扰,因而设计的三相步进电机控制系统性能更好。 通过对两种方案的比较,我选择方案2使用ULN2003A S机驱动芯片来作为驱动。 2数码管显示方案选择 方案1:把所需要显示的数据通过专用的七段显示译码器(例如7448)的转换输出给LED显示屏。优点是输出比较简单,可以简化程序,但增加了芯片的费用,电路也比较复杂。 方案2:通过程序把所要的数据转化为七段显示的数据,直接通过单片机接 口来显示,其优点是简化了电路,但增加了软件编写的负担。 通过对两种方案进行比较,我选择通过软件编写来输出显示信号,即单片机直接和显示器相连。 3控制状态的读取 方案1:把按键接到单片机的中断口,若有按键按下,单片机接收到中断信 号,再通过软件编写的中断程序来执行中断,优点是接线简单,简化了电路,但软件编写较为复杂,不易掌握。

4X4扫描式矩阵键盘课程设计

4X4扫描式矩阵键盘课程设计 课程设计名称: 4_4扫描式矩阵键盘设计 姓名:DUKE 班级:电子1008班 学号:10086 成绩: 日期:2014年1月6日

摘要 随着21世纪的到来,电子信息行业将是人类社会的高科技行业之一,式设施现代化的基础,也是人类通往科技巅峰的直通路。电子行业的发展从长远来看很重要,但最主要的还是科技问题。 矩阵式键盘提高效率进行按键操作管理有效方法,它可以提高系统准确性,有利于资源的节约,降低对操作者本身素质的要求。是它能准时、实时、高效地显示按键信息,以提高工作效率和资源利用率。 矩阵式键盘乃是当今使用最为广泛的键盘模式,该系统以N个端口连接控制N*N个按键,显示在LED数码管上。单片机控制依据这是键盘显示系统,该系统可以对不同的按键进行实时显示,其核心是单片机和键盘矩阵电路部分,主要对按键与显示电路的关系、矩阵式技术及设备系统的硬件、软件等各个部分进行实现。 4*4矩阵式键盘采用AT89C51单片机为核心,主要由矩阵式键盘电路、译码电路、显示电路等组成,软件选用C语言编程。单片机将检测到的按键信号转换成数字量,显示于LED显示器上。该系统灵活性强,易于操作,可靠性高,将会有更广阔的开发前景。

目录 第一章:系统功能要求-------------------------------------------------------- 1.1 4*4 矩阵式键盘系统概述------------------------------------------------ 1.2 本设计任务和主要内容--------------------------------------------------- 第二章:方案论证--------------------------------------------------------------- 第三章:系统硬件电路的设计------------------------------------------------ 3.1 单片机控制系统原理----------------------------------------------------- 3.2 原理图绘制说明---------------------------------------------------------- 3.3 画出流程图---------------------------------------------------------------- 3.4 原理图绘制--------------------------------------------------------------- 第四章:系统程序的设计------------------------------------------------------ 4.1 程序的编写步骤----------------------------------------------------------- 4.2 编写的源程序-------------------------------------------------------------- 第五章:调试及性能分析------------------------------------------------------ 第六章:心得体会--------------------------------------------------------------- 参考文献----------------------------------------------------------------------------

STM32_4x4矩阵键盘

/*--------------------------------------------------------------------------------------* 矩阵键盘驱动 * 文件: keyboard.c * 编写人:LiuHui * 描述:扫描4x4 矩阵键盘输入,并返回键值 * 适用范围:驱动采用ST3.5 库编写,适用于STM32F10x 系列单片机 * 所用引脚:PA0-PA7 * 编写时间:2013 年11 月22 日 * 版本:1.0 --------------------------------------------------------------------------------------*/ #include "stm32f10x.h" #include "keyboard.h" #include "dealy.h" /*--------------------------------矩阵键盘初始化----------------------------------------* 功能:初始化stm32 单片机GPIO //PA0-PA7 * 参数传递: * 输入:无 * 返回值:无 --------------------------------------------------------------------------------------*/ void KeyBoard_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_SetBits(GPIOA, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3); GPIO_ResetBits(GPIOA, GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7); } /*------------------------------矩阵键盘扫描--------------------------------------------* 功能:扫描矩阵键盘,并返回键值 * 参数: * 输入:无 * 返回:有键按下返回该键值 * 无键按下时则返回0 --------------------------------------------------------------------------------------*/ u8 Read_KeyV alue(void) { u8 KeyV alue=0; if((GPIO_ReadInputData(GPIOA)&0xff)!=0x0f) {

课程设计-制作单片机的4X4矩阵键盘

课程设计-制作单片机的4X4矩阵键盘

目录 摘要.............................................. 错误!未定义书签。第一章硬件部分 (5) 第一节AT89C51 (5) 第二节4*4矩阵式键盘 (8) 第三节LED数码管 (11) 第四节硬件电路连接 (13) 第二章软件部分 (15) 第一节所用软件简介 (15) 第二节程序流程图 (18) 第三节程序 (20) 第三章仿真结果 (23) 心得体会 (26) 参考文献 (27)

第一章硬件部分 第一节AT89C51 AT89C51是一种带4K字节FLASH存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。引脚如图所示 AT89C5 图1 AT89C51管脚 图 AT89C51其具有以下特性: 与MCS-51 兼容 4K字节可编程FLASH存储器 寿命:1000写/擦循环 数据保留时间:10年

全静态工作:0Hz-24MHz 三级程序存储器锁定 128×8位内部RAM 32可编程I/O线 两个16位定时器/计数器 5个中断源 可编程串行通道 低功耗的闲置和掉电模式 片内振荡器和时钟电路 特性概述: AT89C51 提供以下标准功能:4k 字节Flash 闪速存储器,128字节内部RAM,32 个I/O 接口,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。 管脚说明: VCC:供电电压。 GND:接地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P0口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须接上拉电阻。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为低八位地址接收。

单片机课程设计4X4矩阵键盘显示要点

长沙学院 《单片机原理及应用》 课程设计说明书 题目液晶显示4*4矩阵键盘按键号 程序设计 系(部) 电子与通信工程系 专业(班级) 电气1班 姓名龙程 学号2011024109 指导教师刘辉、谢明华、王新辉、马凌 云 起止日期2014.5.19—2014.5.30

长沙学院课程设计鉴定表

《单片机技术及应用》课程设计任务书系(部):电子与电气工程系专业:11级电子一班指导教师:谢明华、刘辉

目录 前言 (5) 一、课程设计目的 (6) 二、设计内容及原理 (6) 2.1 单片机控制系统原理 (6) 2.2阵键盘识别显示系统概述 (6) 2.3键盘电路 (7) 2.4 12864显示器 (8) 2.5整体电路图 (9) 2.6仿真结果 (9) 三、实验心得与体会 (10) 四、实验程序 (10) 参考文献 (18)

前言 单片机,全称单片微型计算机(英语:Single-Chip Microcomputer),又称微控制器 应(不用外接硬件)和节约成本。它的最大优点是体积小,可放在仪表内部,但存储量小,输入输出接口简单,功能较低。由于其发展非常迅速,旧的单片机的定义已不能满足,所以在很多应用场合被称为范围更广的微控制器;从上世纪80年代,由当时的4位、8位单片机,发展到现在的32位300M的高速单片机。现代人类生活中所用的几乎每件有电子器件的产品中都会集成有单片机。手机、电话、计算器、家用电器、电子玩具、掌上电脑以及鼠标等电子产品中都含有单片机。汽车上一般配备40多片单片机,复杂的工业控制系统上甚至可能有数百片单片机在同时工作!单片机的数量不仅远超过PC机和其他计算机的总和,甚至比人类的数量还要多。 是以电流刺激液晶分子产生点、线、面配合背部灯管构成画面。由一定数量的彩色或黑白像素组成,放置于光源或者反射面前方。液晶显示器功耗低,因此倍受工程师青睐,适用于使用电池的电子设备。英国科学家在上世纪制造了第一块液晶显示器即LCD。而第一台可操作的LCD基于动态散射模式(Dynamic Scattering Mode,DSM),是RCA公司乔治·海尔曼带领的小组开发的。 LED点阵屏通过LED(发光二极管)组成,以灯珠亮灭来显示文字、图片、动画、视频等,是各部分组件都模块化的显示器件,通常由显示模块、控制系统及电源系统组成。LED点阵显示屏制作简单,安装方便,被广泛应用于各种公共场合,如汽车报站器、广告屏以及公告牌等。 交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键, 键盘是合理的。

数码管显示4×4矩阵键盘的键盘号程序解释好了大作业.doc

《单片机原理及应用课程设计》报告 ——数码管显示4×4矩 阵键盘的键盘号 专业:电子信息科学与技术 班级: 姓名: 学号: 指导教师: 2012年5月15日

1、课程设计目的 1.1巩固和加深对单片机原理和接口技术知识的理解; 1.2培养根据课题需要选学参考书籍、查阅手册和文献资料的能力; 1.3学会方案论证的比较方法,拓宽知识,初步掌握工程设计的基本方法; 1.4掌握常用仪器、仪表的正确使用方法,学会软、硬件的设计和调试方法; 1.5能按课程设计的要求编写课程设计报告,能正确反映设计和实验成果,能用计算机绘制电路图和流程图。 2、课程设计要求 单片机的P1口的P1.0~P1.7连接4×4矩阵键盘,P0口控制一只数码管,当4×4矩阵键盘中的某一按键按下时,数码管上显示对应的键号。例如,1号键按下时,数码管显示“1”, 14号键按下时,数码管显示“E”等等。 3、硬件设计 3.1 设计思想 分析本任务的要求,在课程设计的基础上,添加要求,使设计能够完成当4×4矩阵键盘中的某一按键按下时,数码管上显示对应的键号。 3.2主要元器件介绍: AT89C51单片机 LED数码管 4X4矩阵键盘 3.3 功能电路介绍 AT89C51单片机:控制器。程序中将单片机的引脚置高电平低电平,单片机通过读取IO引脚的电平,在根据读取的数据去查找数组中相应的按键值,然后在送到数码管也就是P0口去显示.(51单片机通过IO口来读取键盘的电平,再通过程序来查找对应的数值,在送到数码管去显示) LED数码管 :输出设备 4X4矩阵键盘:输入设备

4、软件设计 4.1 设计思想 通过对矩阵键盘的逐行扫描,来获得所按下键的键盘号,最终通过数码管显示出来。 4.2软件流程图

扫描式矩阵键盘课程设计

扫描式矩阵键盘课程设 计 Company number【1089WT-1898YT-1W8CB-9UUT-92108】

4X4扫描式矩阵键盘课程设计课程设计名称: 4_4扫描式矩阵键盘设计 姓名: DUKE 班级:电子1008班 学号: 10086 成绩: 日期: 2014年1月6日 摘要 随着21世纪的到来,电子信息行业将是人类社会的高科技行业之一,式设施现代化的基础,也是人类通往科技巅峰的直通路。电子行业的发展从长远来看很重要,但最主要的还是科技问题。 矩阵式键盘提高效率进行按键操作管理有效方法,它可以提高系统准确性,有利于资源的节约,降低对操作者本身素质的要求。是它能准时、实时、高效地显示按键信息,以提高工作效率和资源利用率。 矩阵式键盘乃是当今使用最为广泛的键盘模式,该系统以N个端口连接控制N*N个按键,显示在LED数码管上。单片机控制依据这是键盘显示系统,该系统可以对不同的按键进行实时显示,其核心是单片机和键盘矩阵电路部分,主要对按键与显示电路的关系、矩阵式技术及设备系统的硬件、软件等各个部分进行实现。 4*4矩阵式键盘采用AT89C51单片机为核心,主要由矩阵式键盘电路、译码电路、显示电路等组成,软件选用C语言编程。单片机将检测到的按键信号

转换成数字量,显示于LED显示器上。该系统灵活性强,易于操作,可靠性高,将会有更广阔的开发前景。 目录 第一章:系统功能要求-------------------------------------------------------- 1.1 4*4 矩阵式键盘系统概述------------------------------------------------ 1.2 本设计任务和主要内容--------------------------------------------------- 第二章:方案论证--------------------------------------------------------------- 第三章:系统硬件电路的设计------------------------------------------------ 3.1 单片机控制系统原理----------------------------------------------------- 3.2 原理图绘制说明---------------------------------------------------------- 3.3 画出流程图---------------------------------------------------------------- 3.4 原理图绘制---------------------------------------------------------------

4X4矩阵键盘

题目名称:4×4矩阵式键盘 队员:伍星刘晓峰陈仁凤 摘要: 本系统采用AT89S52为控制核心。采用4X4键盘,通过8位数码管显示动态扫描0—F 16个数字。 关键词: AT89S52键盘数码管显示 Abstract: This system USES AT89S52 devices as control https://www.360docs.net/doc/1d15913784.html,ing 4X4 keyboard, through eight digital tube display dynamic scan 0-16 F. Keyword: AT89S52 Keyboard LED Display

目录 1 方案论证与比较 (3) 1.1采样方法方案论证 (3) 1.2处理器的选择方案论证................................................. 错误!未定义书签。 1.3周期性判别与测量方法方案论证................................. 错误!未定义书签。 2 系统设计 (3) 2.1总体设计 (3) 2.2单元电路设计 (5) 2.2.1 前级阻抗匹配和放大电路设计 (5) 2.2.2 AD转换及控制模块电路设计 (6) 2.2.3 功率谱测量单元电路设计 (6) 3 软件设计 (7) 4系统测试 (8) 5 结论 (9) 参考文献: (9) 附录: (9) 附1:元器件明细表: (9) 附2:仪器设备清单 (9) 附3:电路图图纸 (10) 附4:程序清单 (11)

1.方案论证与比较 1.1采样方法比较与选择 方案一:采用FPGA作为系统主控器。FPGA可实现各种复杂逻辑功能,规模大,集成度高,体积小,稳定性好,IO资源丰富、易于进行功能扩展,处理速度快,但适用于大规模实时性要求较高的系统,价格高,编程实现难度大。用液晶显示器进行键盘扫描,价格偏高,程序复杂,故不选择此方案 方案二: 采用Atmel公司的AT89S52单片机作为主控制器。AT89S52是一个低功耗、高性能8位单片机,片内含8 KB Flash片内程序存储器,256 Bytes RAM,32个外部双向输入/输出(I/O)口,5个中断优先级,2层中断嵌套中断等。价格便宜,使用方便,编程实现难度低,适合用来实现本系统的控制功能。 P0.0-P0.7端口作为数码管段选,P2.0-P2.7端口作为数码管位选,P3.0-P3.7作为键盘输入端口。8位LED数码管进行动态显示。 综上分析,本设计选择方案二。 2 系统设计 2.1 总体设计 16个键盘通过AT89S52进行动态扫描,在8位数码管可以动态显示0-F 16个数字。手动复位键可以达到清零的效果。

4X4矩阵式键盘输入程序

4*4键盘程序readkeyboard: begin: acall key_on jnz delay ajmp readkeyboard delay:acall delay10ms acall key_on jnz key_num ajmp begin key_num:acall key_p anl a,#0FFh jz begin acall key_ccode push a key_off:acall key_on jnz key_off pop a ret key_on: mov a,#00h orl a,#0fh mov p1,a mov a,p1 orl a,#0f0h cpl a ret key_p: mov r7,#0efh l_loop:mov a,r7 mov p1,a mov a,p1 orl a,#0f0h mov r6,a cpl a jz next ajmp key_c next: mov a,r7 jnb acc.7,error rl a mov r7,a ajmp l_loop error:mov a,#00h ret key_c:mov r2,#00h mov r3,#00h mov a,r6

mov r5,#04h again1:jnb acc.0,out1 rr a inc r2 djnz r5, again1 out1: inc r2 mov a,r7 mov r5,#04h again2:jnb acc.4,out2 rr a inc r3 djnz r5,again2 out2: inc r3 mov a, r2 swap a add a,r3 ret key_ccode:push a swap a anl a,#0fh dec a rl a ;行号乘4 rl a mov r7,a pop a anl a,#0fh dec a add a,r7 ret delay10ms: anl tmod,#0f0h orl tmod,#01h mov th0,#0d8h mov tl0,#0f0h setb tr0 wait:jbc tf0,over ajmp wait clr tr0 over:ret 单片机键盘设计 (二)从电路或软件的角度应解决的问题 软件消抖:如果按键较多,硬件消抖将无法胜任,常采用软件消抖。通常采用软件延时的方法:在第一次检测到有键按下时,执行一段延时10ms的子程序后,再确认电平是否仍保持闭合状态电平,如果保持闭合状态电平,则确认真正有键按下,进行相应处理工作,消除了抖动的影响。(这种消除抖动影响的软件措施是切实可行的。)

4乘4矩阵键盘总结

9

39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 // | // | // P X.0 ----------|------|-----|-----| // //************************************************************ // 扫描方法二: 06.8.15 添加 4X4矩阵键盘线翻转识别法函数 // 硬件连接 : // | | | | // / | / | / | / | // P X.7 -------/--|---/--|--/--|--/--| 每个按键对应的识别码是:0x77,0x7b,0x7d,0x7e // | | | | // / | / | / | / | // P X.6 -------/--|---/--|--/--|--/--| 0xb7,0xbb,0xbd,0xbe // | | | | // / | / | / | / | // P X.5 -------/--|---/--|--/--|--/--| 0xd7,0xdb,0xdd,0xde // | | | | // / | / | / | / | // P X.4 -------/--|---/--|--/--|--/--| 0xe7,0xeb,0xed,0xee // | | | | // | | | | // P X.3 ----------| | | | // | | | // | | | // P X.2 ----------|------| | | // | | // | | // P X.1 ----------|------|-----| | // | // | // P X.0 ----------|------|-----|-----| // //***************************************************************** // 扫描方法三: 06.8.16 添加 4X4矩阵键盘行扫描识别法函数(只返回4个识别码) // 硬件连接 : // | | | |

4X4扫描式矩阵键盘课程设计讲解

4x4矩阵键盘识别设计班级:1221201 专业:测控技术与仪器 姓名:涂勇 学号:2012 2012 0110 指导老师:钟念兵 东华理工大学 2016年1月1日

摘要 随着21世纪的到来,电子信息行业将是人类社会的高科技行业之一,电子式设施现代化的基础,也是人类通往科技巅峰的直通路。电子行业的发展从长远来看很重要,但最主要的还是科技问题。 矩阵式键盘提高效率进行按键操作管理有效方法,它可以提高系统准确性,有利于资源的节约,降低对操作者本身素质的要求。是它能准时、实时、高效地显示按键信息,以提高工作效率和资源利用率。 矩阵式键盘乃是当今使用最为广泛的键盘模式,该系统以N个端口连接控制N*N 个按键,显示在LED数码管上。单片机控制依据这是键盘显示系统,该系统可以对不同的按键进行实时显示,其核心是单片机和键盘矩阵电路部分,主要对按键与显示电路的关系、矩阵式技术及设备系统的硬件、软件等各个部分进行实现。 4*4矩阵式键盘采用STM32嵌入式微处理器为核心,主要由矩阵式键盘电路、硬件电路、显示电路等组成,软件选用C语言编程。STM32将检测到的按键信号转换成数字量,显示于LED显示器上。该系统灵活性强,易于操作,可靠性高,将会有更广阔的开发前景。

目录 第一章:系统功能要求--------------------------------------------------------4*4 矩阵式键盘系统概述------------------------------------------------ 本设计任务和主要内容--------------------------------------------------- 第二章:系统硬件电路的设计------------------------------------------------硬件系统主要思路和电路原理图- -------------------------------------- 硬件上键盘规划- --------------------------------------------------------- 第三章:系统程序的设计------------------------------------------------------程序的编写步骤----------------------------------------------------------- 编写的源程序-------------------------------------------------------------- 第四章:心得体会---------------------------------------------------------------

AVR简单好用的4x4矩阵键盘

AVR简单好用的4x4矩阵键盘 // Target : ATMEGA16// Crystal: 8.0000Mhz //key.h #ifndef _4X4_H_#define _4X4_H_ #define No_key 255 #define key_port PORTB#define key_port_ddr DDRB#define key_port_pin PINB unsigned char keyboard_Scan(void); #endif //key.c #include #include #include “key.h” const unsigned char key_table[16] = { 1, 2, 3,12, 4, 5, 6,13, 7, 8, 9,14, 10,0,11,15, }; void delay_1ms(void)//1ms 延时函数{ unsigned int i; for (i=0;i//4x4 矩阵键盘 扫描函数 unsigned char keyboard_Scan(void){ unsigned char temp,key,row,Column; key_port_ddr = 0b00001111;// 高四位输入行线/低四位输出列线key_port= 0b11110000;// 高四位打开上拉电阻/低四位输出低电平delay_nus(5);// 延时5us if((key_port_pin & 0xF0)!= 0xF0)// 作初检查有否键按下,没有,就返回{// 如果行 线不全为1,可能有键按下delay_nms(5);// 延时去抖动 //设置列线初始值 3~0=1110for(Column=0,key_port=0b11111110;Column//main.c #include #include

4x4矩阵键盘电路连接图和快速扫描完整程序

4*4矩阵键盘电路连接图和快速扫描完整程序 #include #include #define uint unsigned int #define uchar unsigned char uchar code wei[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xb9,0xbf,0x89,0xad,0x7f,0xff}; uchar temp=0xfe; //键盘扫描前赋给P1口的试探值 uchar beis=0x00; //键盘扫描的识别倍率 sbit LE1=P2^0; sbit LE2=P2^1; uchar key,sm;//key是扫描得到的键值; //////////////////////////////////////////////////////////////////// //显示函数,静态显示 void xianshi(uchar x) { uint b=200; LE2=1; P0=0X0F; LE2=0;

P0=wei[x]; while(b--); LE1=0; } //////////////////////////////////////////////////////////////////// //4*4矩阵扫描,键值保存在key中 void key_4x4() { P1=temp; //初值uchar temp=0xfe; sm=P1; sm=sm&0xf0; //取P1口高四位的值,如果为0就表示无键按下if(sm!=0xf0) { switch(sm) { case 0x70:{key=0+4*beis;break;} case 0xb0:{key=1+4*beis;break;} case 0xd0:{key=2+4*beis;break;} case 0xe0:{key=3+4*beis;break;} default :{key=10+4*beis;break;} } } else { if(temp==0xf7) { temp=0xfe; } else { temp=_crol_(temp,1); } beis++; if(beis==4)beis=0; } } ////////////////////////////////////////////////////////////////////

4X4矩阵式键盘输入程序

4*4键盘程序 readkeyboard: begin: acall key_on jnz delay ajmp readkeyboard delay:acall delay10ms acall key_on jnz key_num ajmp begin key_num:acall key_p anl a,#0FFh jz begin acall key_ccode push a key_off:acall key_on jnz key_off pop a ret key_on: mov a,#00h orl a,#0fh mov p1,a mov a,p1 orl a,#0f0h cpl a ret key_p: mov r7,#0efh l_loop:mov a,r7 mov p1,a mov a,p1 orl a,#0f0h mov r6,a cpl a jz next ajmp key_c next: mov a,r7 jnb acc.7,error rl a mov r7,a ajmp l_loop error:mov a,#00h ret key_c:mov r2,#00h mov r3,#00h mov a,r6 mov r5,#04h again1:jnb acc.0,out1 rr a inc r2 djnz r5, again1 out1: inc r2 mov a,r7 mov r5,#04h again2:jnb acc.4,out2 rr a inc r3 djnz r5,again2 out2: inc r3 mov a, r2 swap a add a,r3 ret key_ccode:push a swap a anl a,#0fh dec a rl a ;行号乘 4 rl a mov r7,a pop a anl a,#0fh dec a add a,r7 ret delay10ms: anl tmod,#0f0h orl tmod,#01h mov th0,#0d8h mov tl0,#0f0h setb tr0 wait:jbc tf0,over ajmp wait clr tr0 over:ret 单片机键盘设计 (二)从电路或软件的角度应解决的问题 软件消抖:如果按键较多,硬件消抖将无法胜任,常采用软件消抖。通常采用软件延时的方法:在第一次检测到有键按下时,执行一段延时10ms的子程序后,再确认电平是否仍保持闭合状态电平,如果保持闭合状态电平,则确认真正有键按下,进行相应处理工作,消除了抖动的影响。(这种消除抖动影响的软件措施是切实可行的。) 2.采取串键保护措施。串键:是指同时有一个以上的键按下,串键会引起CPU错误响应。 通常采取的策略:单键按下有效,多键同时按下无效。 3.处理连击。连击:是一次按键产生多次击键的效果。要有对按键释放的处理,为了消除连击,使得一次按键只产生一次键功能的执行(不管一次按键持续的时间多长,仅采样一个数据)。否则的话,键功能程序的执行次数将是不可预知,由按键时间决定。连击是可以利用的。连击对于用计数法设计的多功能键特别有效。 三、键盘工作方式 单片及应用系统中,键盘扫描只是CPU的工作内容之一。CPU忙于各项任务时,如何兼顾键盘的输入,取决于键盘的工作方式。考虑仪表系统中CPU任务的份量,来确定键盘的工作方式。 键盘的工作方式选取的原则是:既要保证能及时响应按键的操作,又不过多的占用CPU的工作时间。 键盘的工作方式有:查询方式(编程扫描,定时扫描方式)、中断扫描方式。

4X4矩阵键盘 6

4X4矩阵键盘键盘设计 学生姓名 学号 所在学院 专业名称 班级 指导教师 成绩

摘要:本系统采用AT89S52为控制核心。采用4X4键盘,通过8位数码管显示动态扫描0—F 16个数字。 关键词:AT89S52键盘数码管显示 Abstract:This system USES AT89S52 devices as control core. Using 4X4 keyboard, through eight digital tube display dynamic scan 0-16 F. Keyword:AT89S52 Keyboard LED Display

目录 前言 (1) 1 方案论证与比较 (4) 1.1采样方法方案论证 (4) 2 系统设计 (5) 2.1总体设计 (5) 2.2单元电路设计 (6) 2.2.1 前级阻抗匹配和放大电路设计 (6) 2.2.2 AD转换及控制模块电路设计 (7) 2.2.3 功率谱测量单元电路设计 (7) 3 软件设计 (8) 4 ..................................................................................... 系统测试10 5 结论 (11) 参考文献: (11) 附录: (11) 附1:元器件明细表: (11) 附2:仪器设备清单 (11) 附3:电路图图纸 (12)

附4:程序清单 (13)

前言 单片机,全称单片微型计算机(英语:Single-Chip Microcomputer),又称微控制器(Microcontroller),是把中央处理器、存储器、定时/计数器(Timer/Counter)、各种输入输出接口等都集成在一块集成电路芯片上的微型计算机。与应用在个人电脑中的通用型微处理器相比,它更强调自供应(不用外接硬件)和节约成本。它的最大优点是体积小,可放在仪表内部,但存储量小,输入输出接口简单,功能较低。由于其发展非常迅速,旧的单片机的定义已不能满足,所以在很多应用场合被称为范围更广的微控制器;从上世纪80年代,由当时的4位、8位单片机,发展到现在的32位300M的高速单片机。现代人类生活中所用的几乎每件有电子器件的产品中都会集成有单片机。手机、电话、计算器、家用电器、电子玩具、掌上电脑以及鼠标等电子产品中都含有单片机。汽车上一般配备40多片单片机,复杂的工业控制系统上甚至可能有数百片单片机在同时工作!单片机的数量不仅远超过PC机和其他计算机的总和,甚至比人类的数量还要多。 液晶显示器(英语:Liquid Crystal Display,缩写:LCD)为平面薄型的显示设备。它的主要原理是以电流刺激液晶分子产生点、线、面配合背部灯管构成画面。由一定数量的彩色或黑白像素组成,放置于光源或者反射面前方。液晶显示器功耗低,因此倍受工程师青睐,适用于使用电池的电子设备。英国科学家在上世纪制造了第一块液晶显示器即LCD。而第一台可操作的LCD基于动态散射模式(Dynamic Scattering Mode,DSM),是RCA公司乔治·海尔曼带小组开发的。 LED点阵屏通过LED(发光二极管)组成,以灯珠亮灭来显示文字、图片、动画、视频等,是各部分组件都模块化的显示器件,通常由显示模块、控制系统及电源系统组成。LED点阵显示屏制作简单,安装方便,被广泛应用于各种公共场合,如汽车报站器、广告屏以及公告牌等。 矩阵键盘是单片机外部设备中所使用的排布类似于矩阵的键盘组.。在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,如图1所示。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键,比

相关文档
最新文档