历史上的今天
返回首页

历史上的今天

今天是:2025年02月04日(星期二)

2021年02月04日 | 基于AT89S51的4×4 矩阵键程序设计

2021-02-04 来源:eefocus

用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++)


{


}


}


}


电路图核心部分如下:



推荐阅读

史海拾趣

德立电子(DDY)公司的发展小趣事

在1991年,德立电子(DDY)在惠州市创立,以生产电感为核心产品,开启了其在电子行业的征程。当时,公司规模虽小,但凭借对技术的执着追求和对市场敏锐的洞察力,德立电子迅速在汽车电子、色环电感等领域取得突破。公司引进美国、日本、台湾等地的先进机械设备及检测仪器,确保产品质量,赢得了客户的信赖。

Allied Electronic & Semiconductor Technology Inc公司的发展小趣事

AE&ST公司深知人才是企业发展的根本。公司注重人才培养和团队建设,通过提供良好的工作环境和激励机制,吸引了大批优秀的研发和管理人才。同时,公司还积极开展员工培训和教育活动,提升员工的专业技能和综合素质。这些措施为公司的持续发展提供了有力的人才保障。

协顺电子(Finecables)公司的发展小趣事

协顺电子(Finecables)成立于2003年,当时的中国电子行业正处于快速发展期。公司创始人凭借对市场敏锐的洞察力和对技术的执着追求,决定进入连接器制造领域。在创业初期,公司面临着资金短缺、技术积累不足等挑战。然而,通过不懈的努力和团队的合作,协顺电子成功研发出首批产品,并获得了市场的认可。这一阶段的经历为公司的后续发展奠定了坚实的基础。

Axiomtek公司的发展小趣事

随着公司业务的不断拓展,协顺电子逐渐意识到品质和创新的重要性。公司投入大量资金引进先进的生产设备和技术人才,同时加强内部管理和质量控制。此外,协顺电子还积极与国内外知名企业和研究机构合作,共同研发新产品和新技术。这些举措使得公司的产品质量和技术水平得到了显著提升,也赢得了客户的广泛赞誉。

EF Johnson Technologies Inc公司的发展小趣事

面对日益激烈的国内市场竞争,EF Johnson公司制定了国际化战略,将目光投向了海外市场。公司通过与国外代理商的合作,成功将产品打入国际市场,并获得了良好的口碑。同时,公司还积极参与国际展会和技术交流活动,不断提升品牌影响力。在国际化战略的推动下,EF Johnson的海外市场份额逐步扩大,成为一家具有全球影响力的电子通信企业。

First Switchtech公司的发展小趣事

随着物联网、智能家居等新兴技术的兴起,First Switchtech公司(或类似公司)看到了跨界合作的新机遇。公司积极与智能家居厂商、物联网平台等合作伙伴开展深度合作,共同研发具有创新性的智能开关产品。这些产品不仅实现了开关的远程控制、智能联动等功能,还为用户提供了更加便捷、舒适的智能生活体验。通过跨界合作,First Switchtech公司成功拓展了业务领域,并在智能家居市场中占据了重要位置。

问答坊 | AI 解惑

电压不足期间支持电信电源的小电容

本设计实例介绍如何在短暂电压不足期间使电信设备保持正常工作。首先必须了解电信设备专用电源的几个细节。向电信设备馈电的电源的共模电压为-48V,尽管实际电压范围可能是-42.5V ~ -56V、-40V ~ -60V,甚至超出这些范围。公共电源——“砖块”DC/D ...…

查看全部问答>

SABER与控制系统仿真

SABER与控制系统仿真…

查看全部问答>

学生求助CE串口开发问题

大家好,学生以前接触的硬件类比较多,这次需要在2440板子下跑wince,用串口读数据,我找了很多资料,发现都是直接给代码的,学生求助,是在什么环境下编译?PB吗?如果是PB的话,就是改PB里哪里的程序呢???学生很疑惑,学生其实是想用VS2005中 ...…

查看全部问答>

68013A端点EP6OUT的BULK写失败求助,急!!

68013A端点EP6OUT的BULK写失败求助,急!! 易用专业的PCI、USB、LED方案正在对68013A采用slavefifo方式进行bulk读写操作 我用EP2做in端点,1024字节,2从缓冲 用EP6做OUT端点,512字节,4从缓冲 我写好了68013A的固件,用CYPRESS的开发工具 ...…

查看全部问答>

Shell组件的选择问题??

   用PB编制系统镜像,由于用到SHFileOperation复制文件,但是显示进度框上没有取消按钮 别的版本的机器则可以...不知道这个跟什么组件选择还有关系,还有就是ceshell.dll是怎么生成的 新手请教各位大虾!!…

查看全部问答>

电源变压器

本帖最后由 paulhyde 于 2014-9-15 09:34 编辑 …

查看全部问答>

我的新书《ARM Cortex-M0从这里开始》,已经上市

我的新书《ARM Cortex-M0从这里开始》已经出版,即将上市,希望大家多多支持。在这里先谢谢大家了。。。。。。。。。。。。。     前言和目录:     已经上市   北航:http://www.buaapress.com.cn/bookdetai ...…

查看全部问答>

电机控制 - 无刷直流 (BLDC) 电机主推产品

本帖最后由 dontium 于 2015-1-23 13:10 编辑 器件型号:RDK_BLDC                     DRV8312-C2-KIT (电机控制评估套件)    &nbs ...…

查看全部问答>

易電源學習心得

易電源學習心得剛剛參加了玩遊戲,體驗易電源。正如題所示,通過遊戲來體驗易電源的通俗學習方式,通過學習易電源,深深體會IT設計工程師的初衷,特別在介紹個單位器件時詳細說明。遊戲中,大大啓發我們對電子的好奇心。想想原來如此簡單的電路在操 ...…

查看全部问答>

ls -bash: ls: command not found .

原因:在设置环境变量时,编辑profile文件没有写正确,导致在命令行下ls等命令不能够识别。 解决方案: exportPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin…

查看全部问答>