基于AT89S51的4×4 矩阵键程序设计

来源:本站
导读:目前正在解读《基于AT89S51的4×4 矩阵键程序设计》的相关信息,《基于AT89S51的4×4 矩阵键程序设计》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《基于AT89S51的4×4 矩阵键程序设计》的详细说明。
简介:本文主要讲了基于AT89S51的4×4 矩阵键程序设计,下面一起来学习一下:

用AT89S51 的并行口P1 接4&TImes;4 矩阵键盘,以P3.0-P3.3

作输入线,以P3.4-P3.7 作输出线;在数码管上显示数字按键的“0-9”序号,其它按键显示0。

原理分析:4X4矩阵键盘每个按键都有它的行值和列值,当每个按键的行值为低电平,列值为高电平时,按键为未按下状态。判断是否有按钮按下时,先让这一行通低电平,再通过扫描每一列来判断是否被按下(逐列使列值通高电平),如果被按下,那么这一列的电平此时会成为低电平;如果这一列在扫描时为低电平,说明这一列有按键被按下,而行值是每次在判断列值前就确定的,这样就能知道到底是哪一个按键被按下了。

基本流程: 设置第一行为低电平——>扫描每一列(设置为高电平),判断是否为0——>确定是否有按键按下——>设置第二行为低电平——>扫描第二列......(如此循环到第四行,再从第一行重新开始)

编译环境:KEIL C51 V3

仿真软件:proteus 7.4

单片机类型:AT89C52

数码管类型:7seg-mpx1-cc (cc——共阴数码管)

键盘类型:keypad-samllcalc

单片机上的程序如下:

#include 《reg52.h》

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

0x6d,0x7d,0x07,0x7f,0x6f};

sbit row1=P3^4;

sbit row2=P3^5;

sbit row3=P3^6;

sbit row4=P3^7;

int temp;

int key;

//void delay500ms();

void delay20ms();

void main()

{

P1=table[0];

while(1)

{

P3=0xff;

row1=0;

temp=P3;

temp=temp&0x0f;

if(temp!=0x0f)

{

delay20ms();

temp=P3;

temp=temp&0x0f;

if(temp!=0x0f)

{

switch(temp)

{

case 0x0e:

key=7;

break;

case 0x0d:

key=8;

break;

case 0x0b:

key=9;

case 0x07:

key=0;

}

P1=table[key];

}

}

P3=0xff;

row2=0;

temp=P3;

temp=temp&0x0f;

if(temp!=0x0f)

{

delay20ms();

temp=P3;

temp=temp&0x0f;

if(temp!=0x0f)

{

switch(temp)

{

case 0x0e:

key=4;

break;

case 0x0d:

key=5;

break;

case 0x0b:

key=6;

break;

case 0x07:

key=0;

}

P1=table[key];

}

}

P3=0xff;

row3=0;

temp=P3;

temp=temp&0x0f;

if(temp!=0x0f)

{

delay20ms();

temp=P3;

temp=temp&0x0f;

if(temp!=0x0f)

{

switch(temp)

{

case 0x0e:

key=1;

break;

case 0x0d:

key=2;

break;

case 0x0b:

key=3;

break;

case 0x07:

key=0;

break;

}

}

P1=table[key];

}

P3=0xff;

row4=0;

temp=P3;

temp=temp&0x0f;

if(temp!=0x0f)

{

delay20ms();

temp=P3;

temp=temp&0x0f;

if(temp!=0x0f)

{

switch(temp)

{

case 0x0e:

key=0;

break;

case 0x0d:

key=0;

break;

case 0x0b:

key=0;

break;

case 0x07:

key=0;

break;

}

}

P1=table[key];

}

}

}

/*

void delay500ms()

{

int i,j,k;

for( i=0;i《10/2;i++)

{

for(j=0;j《180;j++)

{

for(k=0;k《200;k++)

{

}

}

}

} */

void delay20ms()

{

int i,j;

for(i=0;i《36;i++)

{

for(j=0;j《200;j++)

{

}

}

}

电路图核心部分如下:

基于AT89S51的4×4 矩阵键程序设计

提醒:《基于AT89S51的4×4 矩阵键程序设计》最后刷新时间 2024-03-14 00:52:19,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《基于AT89S51的4×4 矩阵键程序设计》该内容的真实性请自行鉴别。