最近,由于在学习51单片机,学会了用proteus进行仿真

Proteus仿真-矩阵键盘

由于一般的按键是单独接在一根I/O线上,构成所谓的独立式键盘。其特点是电路简单,易于编程,但占用的I/O口线比较多,当需要较多按键时可能产生I/O口资源紧张问题。为此,可以采用行列式键盘方案,具体做法是,将I/O口分为行线和列线,按键设置在跨接行线和列线的交点上,列线通过上拉电阻接正电源。

分为4x4行列式键盘,其中键盘从左到右,上到下分别标号1-16,有四位数码管,其中第一个,第二位共同显示键盘的标号,第三位和第四位分别显示所按按键的行列标号,如下

我们在上面的基础上,可以在增加一个蜂鸣器,按标号显示次数,如05,则蜂鸣器响5声。

电阻可以设置成1k,蜂鸣器电压可以设置成2V.

完整的图如下.

在keil 51中,对应的代码如下.

//由于本次实验内容较简单,未考虑代码优化和代码工程化.
#include <reg52.h>
char key_buf[4][4]={{0xee,0xde,0xbe,0x7e},{0xed,0xdd,0xbd,0x7d},{0xeb,0xdb,0xbb,0x7b},{0xe7,0xd7,0xb7,0x77}}; //  第一行的第一列....第四列...第二行....
char led_mod[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};    //1 2 3 4 5 6 7 8 9 0        共阴数码管.
sbit wela1 = P3^0;      //位选口
sbit wela2 = P3^1;
sbit wela3 = P3^2;
sbit wela4 = P3^3;
sbit beep = P1^0;  //蜂鸣器.
char ValueH=0,ValueL=0,ValueX=0,ValueY=0,M=0;
static int times = 0,Q=0;
void delay(int Z);  //延迟函数,可用定时器精确
void NoteNumber();  //记下按下的行,列数
void ShowNumber();  //显示数码
void Buzzer();
void main(){beep=1;while(1){NoteNumber();}
}
void Buzzer(){char flag = M;   //几次的标记int n=0,m=0    ;while(flag){for(n=0;n<2;n++){beep=~beep;for(m=0;m<20;m++)ShowNumber();}flag = flag - 1;}
}
void delay(int Z){                                                                                                                             int i=0;while(Z--){for(i=0;i<113;i++);}
}
void NoteNumber(){char key_scan[4] = {0xfe,0xfd,0xfb,0xf7};  //0xfe,对应端口高到低.分别为第一行.....第四行int i=0,j=0,n=0,m=0;for(i=0;i<4;i++){P2 = key_scan[i];if((P2&0x0f)!=0x0f){//有按键按下,判断是哪个.delay(2);if ((P2&0x0f)!=0x0f) {    //按键消抖for(j=0;j<4;j++){if (P2==key_buf[i][j]){//哪个,显示.M = i*4+j+1;    //几个.//重新开始计时ValueH=M/10;ValueL=M%10;ValueX = i + 1;ValueY = j + 1;Buzzer();}}}}}ShowNumber();
}
void ShowNumber(){P0 = led_mod[ValueH];wela1=0;    //打开位选delay(2);     //延迟,否则可能不显示.wela1=1;      //关闭位选P0 = led_mod[ValueL];wela2=0;delay(2);wela2=1;P0 = led_mod[ValueX];wela3=0;delay(2);wela3=1;P0 = led_mod[ValueY];wela4=0;delay(2);    //几行几列.wela4=1;
}

最后也有一些困惑,按照C语言的思路来理解keil C,似乎有些地方不同(不是指语法方面),例如变量问题,明明全局变量,在ShowNumber()中修改不行,而在NoteNumber()中修改又可以?

由于作者水平有限,总有些知识漏洞,希望大家批评指正。

Proteus仿真-矩阵键盘(实验一)相关推荐

  1. 【Proteus仿真】键盘矩阵扫描+LCD128x64显示

    [Proteus仿真]键盘矩阵扫描+LCD128x64显示 Proteus仿真演示 汉字取模工具和取模方式 取模工具:PCtoLCD2002 取模方式:阴码.逆向.列行式.C51格式. 主程序代码 # ...

  2. 矩阵键盘简易计算机设计报告,矩阵键盘实验总结.docx

    矩阵键盘实验总结 矩阵式键盘实验报告 学生:学号:XX 专业班级:自动化1202 指导老师:杨东勇 XX年12月 一.实验目的 1.学习矩列式键盘工作原理: 2.学习矩列式接口的电路设计和程序设计. ...

  3. 51单片机Proteus仿真+Keil工程-实验6-单片机扩展RAM6264实验

    实验6-单片机扩展RAM6264实验   之前做的一次实验,51单片机扩展RAM6264实验.如有问题欢迎指正. 实验目的:   掌握单片机扩展芯片的方法:掌握RAM6264的写入和读取: 实验内容: ...

  4. c语言矩阵键盘实验心得,DSP-矩阵键盘扫描实验.doc

    DSP-矩阵键盘扫描实验 班 级 学号 姓 名 同组人 实验日期 室温 大气压 成 绩 实验五 矩阵键盘扫描实验 一.实验目的 1.掌握键盘信号的输入,DSP I/O的使用: 2.掌握键盘信号之间的时 ...

  5. 单片机--矩阵键盘实验

    实验目的和任务 目的:利用"模块化单片机教学实验平台",加深对单片机与矩阵键盘的接口电路设计以及程序设计的理解. 任务:1.学习独立式按键的查询识别方法. 2.非编码矩阵键盘的行反 ...

  6. 51单片机Proteus仿真+Keil工程-实验2-按键-数码管

    实验2-单片机数码管和按键实验   之前做的一次实验,51单片机通过按键控制单个数码管.如有问题欢迎指正. 实验目标:   通过建立4x4矩阵按键在8段数码管上面显示0~F,十六个按键值. Prote ...

  7. 51单片机Proteus仿真+Keil工程-实验7-单片机AD和DA实验

    实验7-单片机AD和DA实验   之前做的一次实验,51单片机AD和DA实验,数模使用芯片0832,模数转换使用0809.在做实验时曾经遇到一个问题,模数转换0809是不是只能输出0~ 5V,能不能输 ...

  8. 矩阵键盘简易计算机设计报告,矩阵键盘设计实验报告.doc

    南 京 林 业 大 学 实验报告 基于AT89C51 单片机4x4矩阵键盘接口电路设计 课 程 机电一体化设计基础 院 系 机械电子工程学院 班 级 学 号 姓 名 指导老师 杨雨图 201 南京林业 ...

  9. 矩阵键盘简易计算机设计报告,矩阵键盘设计实验报告

    <矩阵键盘设计实验报告>由会员分享,可在线阅读,更多相关<矩阵键盘设计实验报告(21页珍藏版)>请在人人文库网上搜索. 1.南京林业大学实验报告基于 AT89C51单片机 4x ...

最新文章

  1. Numpy 统计变量(平均值、标准差、方差、最大、最小、和、乘积、对角线和)
  2. 本地清除电脑缓存后,mongodb数据库无法连接
  3. 群晖挂pt 路由器虚拟服务器设置,群晖挂pt 路由器虚拟服务器设置
  4. 中国蚁剑(win32-x64)——安装报错:解压代码出错:[object Object]
  5. gc的原因 频繁full_Java性能优化要点之:GC垃圾回收知识点整理
  6. 工业相机选型:相机接口
  7. java 常量 类型_Java的常量及数据类型
  8. linux双系统安装教程
  9. GJB 测试报告(模板)
  10. 使用a标签下载文件时成了预览,并非是下载
  11. 什么是JavaSE,写给第一次接触Java的人
  12. 8、javascript数组
  13. 踏破铁鞋,Vmware 8完美安装Mac Lion狮子系统,CPU不支持虚拟化,键盘无响经验共享
  14. centos6 yum安装nginx
  15. f1签证计算机专业容易拒签吗,美国签证F1被拒,拒签调档出来原来是这个原因...
  16. 图像属性——老照片特效
  17. Java - parseObject
  18. 战地指挥官 服务器维护,战地指挥官有哪些常见问题以及解决方法
  19. iOS YYModel使用方法
  20. 美国亿万富翁悬赏百万解数学难题

热门文章

  1. python 组合优化_python基于粒子群优化的投资组合优化研究
  2. i.MX6ULL终结者Linux 电容触摸屏实验硬件原理图
  3. OKI MICROLINE 8100F 打印机驱动
  4. c语言随机产生10题,详解C语言的随机数生成及其相关题目
  5. AndroidStudio配合android.jar查看安卓源码
  6. 小甲鱼python【类和对象】学习笔记
  7. 登录页面的SQL注入漏洞
  8. android sdk manager设置国内镜像快速下载sdk
  9. 关于梯度下降法和牛顿法的数学推导
  10. MAC安装mysql 的一些常见问题