乘矩阵键盘输入数码管显示四位数
基于msc51单片机实现的四位4乘4矩阵键盘计算器的C语言程序及其PROTUES电路和仿真_课程设计报告
![基于msc51单片机实现的四位4乘4矩阵键盘计算器的C语言程序及其PROTUES电路和仿真_课程设计报告](https://img.taocdn.com/s3/m/e6dc27385901020207409c3c.png)
单片机原理及接口技术课程设计报告设计题目:计算器设计信息与电气工程学院二零一三年七月计算器设计单片机体积小,功耗小,价格低,用途灵活,无处不在,属专用计算机。
是一种特殊器件,需经过专门学习方能掌握应用,应用中要设计专用的硬件和软件。
近年来,单片机以其体积小、价格廉、面向控制等独特优点,在各种工业控制、仪器仪表、设备、产品的自动化、智能化方面获得了广泛的应用。
与此同时,单片机应用系统的可靠性成为人们越来越关注的重要课题。
影响可靠性的因素是多方面的,如构成系统的元器件本身的可靠性、系统本身各部分之间的相互耦合因素等。
其中系统的抗干扰性能是系统可靠性的重要指标。
数学是科技进步的重要工具,数据的运算也随着科技的进步越发变得繁琐复杂,计算器的出现可以大大解放人在设计计算过程中的工作量,使计算的精度、速度得到改善,通过msc51单片机,矩阵键盘和LED数码管可以实现简单的四位数的四则运算和显示,并当运算结果超出范围时予以报错。
注:这一部分主要描述题目的背景和意义,对设计所采取的主要方法做一下简要描述。
字数不要太多,300-500字。
另注:本文要当做模板使用,不要随意更改字体、字号、行间距等,学会使用格式刷。
文中给出的各项内容都要在大家的报告中体现,可采用填空的方式使用本模板。
1. 设计任务结合实际情况,基于AT89C51单片机设计一个计算器。
该系统应满足的功能要求为:(1) 实现简单的四位十进制数字的四则运算;(2) 按键输入数字,运算法则;(3) LED数码管移位显示每次输入的数据和运算结果;(4) 当运算结果超出范围时实现报错。
主要硬件设备:AT89C51单片机、LED数码管、矩阵键盘。
注:这一部分需要写明系统功能需求,用到的主要硬件(参考实验箱的说明书)。
2. 整体方案设计计算器以AT89C51单片机作为整个系统的控制核心,应用其强大的I/O功能和计算速度,构成整个计算器。
通过矩阵键盘输入运算数据和符号,送入单片机进行数据处理。
单片机c语言程序设计---矩阵式键盘实验报告
![单片机c语言程序设计---矩阵式键盘实验报告](https://img.taocdn.com/s3/m/54cd1a460a1c59eef8c75fbfc77da26924c59657.png)
单片机c语言程序设计---矩阵式键盘实验报告课程名称:单片机c语言设计实验类型:设计型实验实验项目名称:矩阵式键盘实验一、实验目的和要求1.掌握矩阵式键盘结构2.掌握矩阵式键盘工作原理3.掌握矩阵式键盘的两种常用编程方法,即扫描法和反转法二、实验内容和原理实验1.矩阵式键盘实验功能:用数码管显示4*4矩阵式键盘的按键值,当K1按下后,数码管显示数字0,当K2按下后,显示为1,以此类推,当按下K16,显示F。
(1)硬件设计电路原理图如下仿真所需元器件(2)proteus仿真通过Keil编译后,利用protues软件进行仿真。
在protues ISIS 编译环境中绘制仿真电路图,将编译好的“xxx.hex”文件加入AT89C51。
启动仿真,观察仿真结果。
操作方完成矩阵式键盘实验。
具体包括绘制仿真电路图、编写c源程序(反转法和扫描法)、进行仿真并观察仿真结果,需要保存原理图截图,保存c源程序,总结观察的仿真结果。
完成思考题。
三、实验方法与实验步骤1.按照硬件设计在protues上按照所给硬件设计绘制电路图。
2.在keil上进行编译后生成“xxx.hex”文件。
3.编译好的“xxx.hex”文件加入AT89C51。
启动仿真,观察仿真结果。
四、实验结果与分析void Scan_line()//扫描行{Delay(10);//消抖switch ( P1 ){case 0x0e: i=1;break;case 0x0d: i=2;break;case 0x0b: i=3;break;case 0x07: i=4;break;default: i=0;//未按下break;}}void Scan_list()//扫描列{Delay(10);//消抖switch ( P1 ){case 0x70: j=1;break;case 0xb0: j=2;break;case 0xd0: j=3;break;case 0xe0: j=4;break;default: j=0;//未按下break;}}void Show_Key(){if( i != 0 && j != 0 ) P0=table[ ( i - 1 ) * 4 + j - 1 ];else P0=0xff;}五、讨论和心得。
4乘4矩阵键盘按键输入数码管显示
![4乘4矩阵键盘按键输入数码管显示](https://img.taocdn.com/s3/m/5fe68954804d2b160b4ec0dc.png)
* *
*************************************************************/
key=key+12;
else
key = 16;
dis_buf = key; //键值入显示缓存
dis_buf = dis_buf & 0x0f;
}
/*************************************************************
* 键扫描子程序 (3*4 的矩阵) P1.4 P1.5 P1.6 P1.7为列 *
* P1.1 P1.2 P1.3为行 *
* *
*************************************************************/
/*************************************************************
* *
* 延时子程序 *
*************************************************************/
void keydown(void)
{
P1=0xF0; //将高4位全部置1 低四位全部置0
if(P1!=0xF0) //判断按键是否按下 如果按钮按下 会拉低P1其中的一个端口
key=3; //第3个按键键值
else if(temp==8) // p1.7 被拉低
key=4; //第4个按键键值
else
key = 16;
P1=0x0F; //低四位输入 行为高电平 列为低电平
4乘4矩阵键盘输入数码管显示四位数要点
![4乘4矩阵键盘输入数码管显示四位数要点](https://img.taocdn.com/s3/m/b9f6cfd8af1ffc4fff47ac87.png)
Proteus 软件功能的理解,学会用这个软件设计三相步进电机控制系统,将理论
知识与实践相联系,为以后在学习和工作的发展打下一个良好的基础
。然后,
通过该课程设计, 初步理解了利用计算机控制技术进行三相步进电机控制系统的
设计。
最后,我明白:知识不是孤立的,相互之间有联系的,我们要学会理解知识
点以及学科之间的融合渗透。 本次课程设计涉及到了计算机技术, 自动控制技术,
微机技术, 数字电子技术等众多知识, 因而我们需要把把各个学科之间的知识融
合起来,形成一个整体。认识到 Proteus这个软件的强大功能,为以后的学习和
工作打下基础 。
我相信未来是属于我们的, 随着科学技术的发展, 控制技术的应用将将越来
越广泛,发挥越来越重要的作用。
参考文献
[1] 阎石主编 . 数字电子技术 . [M] 北京:高等教育出版社, 2006 年 [2] 陈振官等编著 . 新颖高效声光报警器 . [M] 北京:国防工业出版社, 2005 年 [3] 王东峰等主编 .单片机 C 语言应用 100 例 . [M] 北京:电子工业出版社, 2009 年 [4] 胡耀辉等主编 .单片机系统开发实例经典 . [M] 北京:冶金工业出版社, 2006 年 [5] 李鸿主编 .单片机原理及应用 . [M] 湖南:湖南大学出版社, 2005 年 [6] 谭浩强主编 .C 语言程序设计 . [M] 北京:清华大学出版社, 2005 年
数码管显示键盘号
![数码管显示键盘号](https://img.taocdn.com/s3/m/0df4ad371ed9ad51f11df211.png)
case 8ቤተ መጻሕፍቲ ባይዱ keyno += 12;break;
}
}
//主函数
void main(void)
{
P0 = 0x00;
while(1)
{
P1 = 0xf0;
if(P1 != 0xf0) //扫描键盘获得按键序号
{
key_scan();
}
if(pre_keyno != keyno)
课程名称
单片机原理及应用
实验名称
数码管显示4*4矩阵键盘按键号
实验内容:
按下任意键时,数码管都会显示其按键的序号,扫描程序首先判断按键发生在那一列,然后根据所发生的行附加不同的值,从而得到按键的序号。
实验步骤:
1.根据以下电路图,在Proteus中找到相应元器件并接线。
元器件:AT89C51、button、cap、res、sounder、respack-8、7SEG-COM-BLUE、CRYSTAL,分别放入开关、红色LED灯、电阻。
delayms(1);
//有键按下后,其中一列将变为低电平
i = P1^0x0f;
//判断按键发生在哪一列
switch(i)
{
case 1: keyno = 0;break;
case 2: keyno = 1;break;
case 4: keyno = 2;break;
case 8: keyno = 3;break;
{
P0 = ~disp_buff[keyno]; //显示,共阳极段码取反作为共阴极段码
pre_keyno = keyno;
}
delayms(100);
矩阵式键盘控制数码管显示
![矩阵式键盘控制数码管显示](https://img.taocdn.com/s3/m/65ae5bacbb0d4a7302768e9951e79b89680268cd.png)
7
谢谢观赏!
二、工作原理
当扫描开始时, 首先将P1.7列初始值设置为低电平, 即P
3
三、程序流程图 ——主程序
开始
初始化
按键查询
YES
A=FFH?
NO
调用消除抖动子程序转Leabharlann 功能处理程序AAAA 1234
结束
4
四、程序清单
独立式键盘控制灯移动程序.doc
5
五、实验板上测试
观察实验结果并记录: 按下不同按键开关,可以看到P0端口的
实训十一: 矩阵式键盘控制数码管显示
功能说明: 使用4*4矩阵式键盘控制第一个数码
管显示0~F。
1
一、电路图
4条列线的一端分别与单片机P1口中的P1.4、 P1.5、 P1.6. P1.7 相接,另一端通过上拉电阻接到+5V电源上,平时使 列线处于高电平状态;而4条行线的一端分别与P1口中的 P1.0、 P1.1、 P1.2、 P1.3相接。16个按键设置在行、列 2 线交点上。
灯作不同方向的移动或闪烁,说明是在执 行不同功能键的处理程序。 按DL1键,亮灯从右向左移动 按DL2键,亮灯从左向右移动 按DL3键,左边4只灯与右边4只灯交替闪亮 按DL4键,8个灯闪烁
6
码管显示0; 作业布置按下DL2,第二个数
码管显示1; 按下DL3,第三个数 码管显示2; 按下DL4,第四个数 码管显示3 。
数码管显示4×4矩阵键盘
![数码管显示4×4矩阵键盘](https://img.taocdn.com/s3/m/11a9c88bb9d528ea81c779f4.png)
《单片机原理及应用课程设计》报告——数码管显示4×4矩阵键盘的键盘号专业:自动化班级: 1106姓名:王佳俊学号: 110240171指导教师:卜旭芳2014年 10月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软件流程图开始初始化结束,返回若有按键按下,显示键盘号扫描键盘第一行若无按键按下扫描键盘第二行若无按键按下扫描键盘第三行若无按键按下扫描键盘第四行若无按键按下结束,返回4.3源程序#include<reg52.h>#define uchar unsigned char#define uint unsigned intuchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};//定义显示段码uchar num,temp;void delay(uchar k)//定义延时函数uchar i,j;for(i=k;i>0;i--)for(j=110;j>0;j--);}void disp(char num1)//定义显示函数{P0=table[num1];//将段码值送入P0口显示}char keyscan()//定义键盘检测函数{P1=0xfe;//给P1口送检测信号11111110,即先检测第一列有无按键被按下(key1~key4)temp=P1;//将检测信号赋给变量temptemp=temp&0xf0;//与11110000相“与”去除低四位检测部分while(temp!=0xf0)//判断是否有按键被按下,即key1-key4有任意按键被按下temp便不等于0xff{delay(5);//按键防抖动延时(时间要求不严格)while(temp!=0xf0)//延时之后再次判断{temp=P1;//进入函数说明有按键被按下,再将p1值赋给temp进行判断是哪位被按下switch(temp)//利用switch函数判断temp值{case 0xee://若P0等于0xee,即11101110,则由判断为0的位被按下即第四位(最低位),则应赋值num为0;num=0;break;case 0xde://11011110同理判断其为第三位被按下(该行第二位)num=1num=1;break;case 0xbe://同上则num=2num=2;break;case 0x7e://同上num=3num=3;break;}while(temp!=0xf0)//判断按键是否松开,循环判断直至按键松开{temp=P1;temp=temp&0xf0;}}}P1=0xfd;//给P1口再次送检测信号11111101,来检测第二列有无按键被按下(key5~key8),以下几步同上temp=P1;temp=temp&0xf0;while(temp!=0xf0){delay(5);while(temp!=0xf0){temp=P1;switch(temp){case 0xed:num=4;break;case 0xdd:num=5;break;case 0xbd:num=6;break;case 0x7d:num=7;break;}while(temp!=0xf0){temp=P1;temp=temp&0xf0;}}}P1=0xfb;//给P1口再次送检测信号11111011,来检测第三列有无按键被按下(key9~key12),以下几步同上temp=P1;temp=temp&0xf0;while(temp!=0xf0){delay(5);while(temp!=0xf0){temp=P1;switch(temp){case 0xeb:num=8;break;case 0xdb:num=9;break;case 0xbb:num=10;break;case 0x7b:num=11;break;}while(temp!=0xf0){temp=P1;temp=temp&0xf0;}}}P1=0xf7;//给P1口再次送检测信号11110111,来检测第四列有无按键被按下(key13~key16),以下几步同上temp=P1;temp=temp&0xf0;while(temp!=0xf0){delay(5);while(temp!=0xf0){temp=P1;switch(temp){case 0xe7:num=12;break;case 0xd7:num=13;break;case 0xb7:num=14;break;case 0x77:num=15;break;}while(temp!=0xf0){temp=P1;temp=temp&0xf0;}}}return num;//子函数最后返回num值}void main(){P0=0x00;//清屏delay(5);//延时while(1)//主循环{disp(keyscan());//检测并显示}}}5、调试运行电路图依次按下开关k1-k16,数码管会对应显示出0—f的16个数字K=5的数码管显示4.K=16时的数码管显示F:6、设计心得体会硬件设计方面,此课题所需的硬件并不负责,只许少量的导线、简单的电路便可以完成。
单片机-数码管显示4X4矩阵键盘按键号
![单片机-数码管显示4X4矩阵键盘按键号](https://img.taocdn.com/s3/m/1b699bb1dc88d0d233d4b14e852458fb770b38f9.png)
单片机-数码管显示4X4矩阵键盘按键号#include<>#define uchar unsigned char#define uint unsigned int//段码uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x00};sbit BEEP=P3^7;//上次按键和当前按键的序号,该矩阵中序号范围0~15,16表示无按键uchar Pre_KeyNo=16,KeyNo=16;//延时void DelayMS(uint x){uchar i;while(x--) for(i=0;i<120;i++);}//矩阵键盘扫描void Keys_Scan(){uchar Tmp;P1=0x0f; //高4 位置0,放入 4 行DelayMS(1);Tmp=P1^0x0f;//按键后0f变成0000XXXX,X中一个为0,3 个仍为 1,通过异或把 3 个1 变为0,唯一的0变为1;switch(Tmp) //判断按键发生于 0~3 列的哪一列{case 1: KeyNo=0;break;case 2: KeyNo=1;break;case 4: KeyNo=2;break;case 8: KeyNo=3;break;default:KeyNo=16; //无键按下}P1=0xf0; //低 4 位置0,放入 4 列DelayMS(1);Tmp=P1>>4^0x0f;//按键后 f0 变成 XXXX0000,X中有 1 个为0,三个仍为 1;高4 位转移到低 4位并异或得到改变的值switch(Tmp) //对0~3 行分别附加起始值 0,4,8,12{case 1: KeyNo+=0;break;case 2: KeyNo+=4;break;case 4: KeyNo+=8;break;case 8: KeyNo+=12;}}//蜂鸣器void Beep(){uchar i;for(i=0;i<100;i++){DelayMS(1);BEEP=~BEEP;}BEEP=0;}//主程序void main(){P0=0x00;BEEP=0;while(1){P1=0xf0;if(P1!=0xf0) Keys_Scan(); //获取键序号 if(Pre_KeyNo!=KeyNo) {P0=~DSY_CODE[KeyNo];Beep();Pre_KeyNo=KeyNo;}DelayMS(100);}}。
矩阵键盘显示实验
![矩阵键盘显示实验](https://img.taocdn.com/s3/m/c35d99b86f1aff00bed51eb6.png)
矩阵键盘显示实验报告20 -20 学年第学期学院电子信息学院课程矩阵键盘显示实验姓名学号指导老师日期 20XX年XX月XX日矩阵键盘显示实验一、实验目的1、掌握矩阵键盘检测的原理和方法;2、掌握按键消抖的方法;3、再次熟悉数码管的显示。
二、实验任务从4×4矩阵键盘输入4位字符(如“15EF”),并显示于4位数码管。
三、实验原理在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,如图1-1所示。
在矩阵键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。
图1-1 矩阵键盘矩阵键盘的按健识别方法很多,其中最常见的方法是行扫描法。
行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法,下面介绍矩阵键盘的扫描过程。
(1)判断有无键按下第一步:向所有的列输出口线输出低电平;第二步:然后将行线的电平状态读入;第三步:判断读入的行线值。
若无键按下,所有的行线仍保持高电平状态;若有键按下,行线中至少应有一条线为低电平。
(2)去除按键的抖动去抖原理:当判断到键盘上有键按下后,则延时一段时间再判断键盘的状态,若仍为有键按下状态,则认为有一个键按下,否则当作按键抖动来处理。
(3)按键识别(列或行扫描法)在确认有键按下后,即可进入确定具体闭合键的过程。
其方法是:依次将列(行)线置为低电平,即在置某根列(行)线为低电平时,其列(行)线为高电平,再逐行(列)检测各行(列)线的电平状态。
若某行为低电平,则该行线与置为低电平的列线交叉处的按键就是闭合的按键。
(4)求按键的键值根据闭合键的行值row和列值col采用计算法(如健值=行号×4+列号)或查表法将闭合键的行值和列值转换成所定义的键值。
电路原理图如下图所示。
图1-2 键盘显示实验电路四、程序流程图五、实验结果及分析总结(1)实验测试效果图如下:(2)分析总结:1、在这次的实验中我们将初始化部分、键盘扫描部分、数码管显示部分等分别写成了独立的函数,这样的程序看起来简洁、明了,在使用的时候直接调用就好了。
4乘4矩阵键盘扫描加数码管显示代码
![4乘4矩阵键盘扫描加数码管显示代码](https://img.taocdn.com/s3/m/62ff6d957c1cfad6195fa77e.png)
4*4矩阵键盘扫描加数码管显示师学院(工学院)电气工程及其自动化黎卫星/***************************************************************/ //º¯ÊýÍ·Îļþ/***************************************************************/ #include<reg51.h>#include<delay.h>#include<ciodziku.h>#include<keyjiance.h>#include<displychushihua.h>/***************************************************************/ //Ö÷º¯Êý/***************************************************************/ void main(){displaychushihua();while(1){num=keyjiance();dula=1;P0=~table[num-1];dula=0;}}/***************************************************///ÑÓʱº¯Êý/***************************************************/void delay(unsigned int z){unsigned int x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}/***************************************************************/ //Êý×Ö¿â/***************************************************************/ sbit dula = P2^6;sbit wela = P2^7;/***************************************************************/ /***************************************************************/ unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00//0x00Ϊ¹Ø±ÕËùÊýÂë¹ÜÏÔʾ};/***************************************************************/ //¼üÅÌɨÃè/***************************************************************/ unsigned int temp,num;/***************************************************************/ /***************************************************************/ unsigned int keyjiance()// unsigned int º¯Êý·µ»ØÖµÀàÐÍ Ê¹ÓÃvoidΪÎÞ·µ»ØÖµ»á³ö´í{P3=0XFE; //µÚÒ»Ðмì²âtemp=P3;temp=temp&0xf0;while(temp!=0xf0){delay(5);temp=P3;temp=temp&0xf0;while(temp!=0xf0){temp=P3;switch(temp){ case 0xee:num=1;break;case 0xde:num=2;break;case 0xbe:num=3;break;case 0x7e:num=4;break;}while(temp!=0xf0)//°´¼üËÉÊÖ¼ì²â{temp=P3;temp=temp&0xf0;}//dula=1;//P0=~table[num-1];// dula=0;}}P3=0XFD; //µÚ¶þÐмì²âtemp=P3;temp=temp&0xf0;while(temp!=0xf0){delay(5);temp=P3;temp=temp&0xf0;while(temp!=0xf0){temp=P3;switch(temp){ case 0xed:num=5;break;case 0xdd:num=6;break;case 0xbd:num=7;break;case 0x7d:num=8;break;} while(temp!=0xf0)//°´¼üËÉÊÖ¼ì²â{temp=P3;temp=temp&0xf0;}//dula=1;//P0=~table[num-1];// dula=0;}}P3=0XFB; //µÚÈýÐмì²âtemp=P3;temp=temp&0xf0;while(temp!=0xf0){delay(5);temp=P3;temp=temp&0xf0;while(temp!=0xf0){temp=P3;switch(temp){ case 0xeb:num=9;break;case 0xdb:num=10;break;case 0xbb:num=11;break;case 0x7b:num=12;break;} while(temp!=0xf0)//°´¼üËÉÊÖ¼ì²â{temp=P3;temp=temp&0xf0;}// dula=1;// P0=~table[num-1];// dula=0;}}P3=0XF7; //µÚËÄÐпªÊ¼¼ì²âtemp=P3;temp=temp&0xf0;while(temp!=0xf0){delay(5);temp=P3;temp=temp&0xf0;while(temp!=0xf0){temp=P3;switch(temp){ case 0xe7:num=13;break;case 0xd7:num=14;break;case 0xb7:num=15;break;case 0x77:num=16;break;} while(temp!=0xf0)//°´¼üËÉÊÖ¼ì²â{temp=P3;temp=temp&0xf0;}//dula=1;//P0=~table[num-1];//dula=0;}}return (num); //º¯Êý·µ»ØÖµ// dula=1;// P0=~table[num-1];// dula=0;}/***************************************************************/ /***************************************************************/ void displaychushihua(){num=17;//µÚ17¸öÊýΪ¹Ø±ÕËùÓÐÊýÂë¹Ü0x00 // dula=1;//P0=0xff;//³õʼ»¯ÇåÁã ²»¸ø¶ÏÑ¡ËÍÊý ÊýÂë¹Ü²»ÁÁ// dula=0;wela=1;P0=~0xc0;wela=0;}。
矩阵键盘按键的数码管显示矩阵键盘按键的数码管显示
![矩阵键盘按键的数码管显示矩阵键盘按键的数码管显示](https://img.taocdn.com/s3/m/09218dc2b04e852458fb770bf78a6529657d355b.png)
一、矩阵键盘按键的数码管显示1.实验目的(1)掌握VHDL语言的语法规范,掌握时序电路描述方法(2)掌握多个数码管动态扫描显示的原理及设计方法2.实验所用仪器及元器件计算机一台实验板一块电源线一根扁平线一根下载线一根3.实验任务要求设计出4*4矩阵键盘对某一按键按下就在数码管显示一个数字。
按键从左上角到右下角依次为1,2, (16)4.实验原理按键模块原理键盘扫描的实现过程如下:对于4×4键盘,通常连接为4行、4列,因此要识别按键,只需要知道是哪一行和哪一列即可,为了完成这一识别过程,我们的思想是,首先固定输出4行为高电平,然后输出4列为低电平,在读入输出的4行的值,通常高电平会被低电平拉低,如果读入的4行均为高电平,那么肯定没有按键按下,否则,如果读入的4行有一位为低电平,那么对应的该行肯定有一个按键按下,这样便可以获取到按键的行值。
同理,获取列值也是如此,先输出4列为高电平,然后在输出4行为低电平,再读入列值,如果其中有哪一位为低电平,那么肯定对应的那一列有按键按下。
键盘键值的获取:键盘上的每一个按键其实就是一个开关电路,当某键被按下时,该按键的接点会呈现0的状态,反之,未被按下时则呈现逻辑1的状态。
扫描信号由r o w进入键盘,变化的顺序依次为1110-1101-1011-0111-1110。
每一次扫描一排,依次地周而复始。
例如现在的扫描信号为1011,代表目前正在扫描9,10,11,12这一排的按键,如果这排当中没有按键被按下的话,则由column读出的值为1111;反之当9这个按键被按下的话,则由colu mn读出的值为1110。
根据上面所述原理,我们可得到各按键的位置与数码关系如表所示:1110 1110 1110 1110 1101 1101 1101 1101row1110 1101 1011 0111 1110 1101 1011 0111 column1 2 3 4 5 6 7 8键值row 1011 1011 1011 1011 0111 0111 0111 0111column1110 1101 1011 0111 1110 1101 1011 0111键值9 10 11 12 13 14 15 16动态显示原理为使得输入控制电路简单且易于实现,采用动态扫描的方式实现设计要求。
矩阵式键盘控制数码管显
![矩阵式键盘控制数码管显](https://img.taocdn.com/s3/m/7f41127530126edb6f1aff00bed5b9f3f90f72c1.png)
为了避免按键抖动造成的误判,微 控制器会对检测到的按键状态进行 去抖动处理,确保按键状态的准确 性。
键盘编码方式
行码与列码组合
01
每个按键都有一个唯一的行码和列码组合,用于标识按键的位
置。
编码表
02
建立一个包含所有按键行码和列码组合的编码表,用于将按键
位置映射到对应的编码值。
编码输出
03
键盘扫描程序
根据矩阵式键盘的原理,编写键盘扫描程序,实 现按键的检测与识别。
数码管显示程序
根据数码管的显示原理,编写数码管显示程序, 实现数码管的显示和控制。
主程序
主程序负责调用键盘扫描程序和数码管显示程序, 实现整个系统的控制逻辑。
系统调试与测试
硬件调试
检查硬件电路连接是否正确,确保各模块工作正常。
矩阵式键盘控制数码管显示系 统
目录
CONTENTS
• 矩阵式键盘控制原理 • 数码管显示技术 • 矩阵式键盘控制数码管显示系统设计 • 系统性能优化与改进 • 应用前景与发展趋势
01 矩阵式键盘控制原理
CHAPTER
矩阵式键盘结构
4x4矩阵式键盘结构
由16个按键组成的矩阵,行线和列线 交叉连接,每个按键位于行线和列线 的交叉点上。
根据按键位置在编码表中找到对应的编码值,通过微控制器输
出相应的编码信号,控制数码管显示相应的字符或数字。
02 数码管显示技术
CHAPTER
数码管工作原理
数码管由多个LED段组成,通过控制各段的亮灭来显示数字或字符。
数码管内部有8个LED段,通过电流的通断控制每个段的亮灭,从而显示不同的数字 或字符。
数码管驱动方式
点驱动方式
4乘4矩阵键盘扫描加数码管显示代码
![4乘4矩阵键盘扫描加数码管显示代码](https://img.taocdn.com/s3/m/98ce1b38960590c69fc3766c.png)
4*4矩阵键盘扫描加数码管显示遵义师范学院(工学院)电气工程及其自动化黎卫星/********************************************************** *****///º¯ÊýÍ·Îļþ/********************************************************** *****/#include<reg51.h>#include<delay.h>#include<ciodziku.h>#include<keyjiance.h>#include<displychushihua.h>/********************************************************** *****///Ö÷º¯Êý/********************************************************** *****/void main(){displaychushihua();while(1){num=keyjiance();dula=1;P0=~table[num-1];dula=0;}}/***************************************************///ÑÓʱº¯Êý/***************************************************/void delay(unsigned int z){unsigned int x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}/********************************************************** *****///Êý×Ö¿â/********************************************************** *****/sbit dula = P2^6;sbit wela = P2^7;/***************************************************************//********************************************************** *****/unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00//0x00Ϊ¹Ø±ÕËùÊýÂë¹ÜÏÔʾ};/********************************************************** *****///¼üÅÌɨÃè/********************************************************** *****/unsigned int temp,num;/********************************************************** *****//********************************************************** *****/unsigned int keyjiance()// unsigned int º¯Êý·µ»ØÖµÀàÐÍʹÓÃvoidΪÎÞ·µ»ØÖµ»á³ö´í{P3=0XFE; //µÚÒ»Ðмì²âtemp=P3;temp=temp&0xf0;while(temp!=0xf0){delay(5);temp=P3;temp=temp&0xf0;while(temp!=0xf0){temp=P3;switch(temp){ case 0xee:num=1;break;case 0xde:num=2;.break;case 0xbe:num=3;break;case 0x7e:num=4;break;} while(temp!=0xf0)//°´¼üËÉÊÖ¼ì²â{temp=P3;temp=temp&0xf0;.}//dula=1;//P0=~table[num-1];// dula=0;}}P3=0XFD; //µÚ¶þÐмì²âtemp=P3;temp=temp&0xf0;while(temp!=0xf0){delay(5);temp=P3;temp=temp&0xf0;while(temp!=0xf0){temp=P3;switch(temp){ case 0xed:num=5;.break;case 0xdd:num=6;break;case 0xbd:num=7;break;case 0x7d:num=8;break;} while(temp!=0xf0)//°´¼üËÉÊÖ¼ì²â{temp=P3;.temp=temp&0xf0;}//dula=1;//P0=~table[num-1];// dula=0;}}P3=0XFB; //µÚÈýÐмì²âtemp=P3;temp=temp&0xf0;while(temp!=0xf0){delay(5);temp=P3;temp=temp&0xf0;while(temp!=0xf0){temp=P3;.switch(temp){ case 0xeb:num=9;break;case 0xdb:num=10;break;case 0xbb:num=11;break;case 0x7b:num=12;break;}. while(temp!=0xf0)//°´¼üËÉÊÖ¼ì²â{temp=P3;temp=temp&0xf0;}// dula=1;// P0=~table[num-1];// dula=0;}}P3=0XF7; //µÚËÄÐпªÊ¼¼ì²âtemp=P3;temp=temp&0xf0;while(temp!=0xf0){delay(5);temp=P3;temp=temp&0xf0;while(temp!=0xf0){temp=P3;switch(temp){ case 0xe7:num=13;break;case 0xd7:num=14;break;case 0xb7:num=15;break;case 0x77:num=16;break;} while(temp!=0xf0)//°´¼üËÉÊÖ¼ì²â{temp=P3;temp=temp&0xf0;}//dula=1;//P0=~table[num-1];//dula=0;}}return (num); //º¯Êý·µ»ØÖµ// dula=1;// P0=~table[num-1];// dula=0;}/********************************************************** *****//********************************************************** *****/void displaychushihua(){num=17;//µÚ17¸öÊýΪ¹Ø±ÕËùÓÐÊýÂë¹Ü0x00// dula=1;//P0=0xff;//³õʼ»¯ÇåÁã ²»¸ø¶ÏÑ¡ËÍÊý ÊýÂë¹Ü²»ÁÁ// dula=0;wela=1;P0=~0xc0;wela=0;}。
单片机课程设计——数码管显示4×4矩阵键盘
![单片机课程设计——数码管显示4×4矩阵键盘](https://img.taocdn.com/s3/m/07fbdf14a76e58fafab00308.png)
《单片机原理及应用课程设计》报告——数码管显示4*4矩阵键盘的键盘号设计专业:班级:姓名:学号:2013年1月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矩阵键盘中的某一按键按下时,数码管上显示对应的键盘号。
则本系统主要由以下几大模块构成:显示模块,共阴极LED数码管;输入模块,4*4矩阵键盘;3.2主要元器件介绍矩阵键盘又称为行列式键盘,它是用4条I/O线作为行线,4条I/O线作为列线组成的键盘。
在行线和列线的每一个交叉点上,设置一个按键。
这样键盘中按键的个数是4×4个。
这种行列式键盘结构能够有效地提高单片机系统中I/O 口的利用率。
数码管不同位显示的时间间隔可以通过调整延时程序的延时长短来完成。
数码管显示的时间间隔也能够确定数码管显示时的亮度,若显示的时间间隔长,显示时数码管的亮度将亮些,若显示的时间间隔短,显示时数码管的亮度将暗些。
若显示的时间间隔过长的话,数码管显示时将产生闪烁现象。
所以,在调整显示的时间间隔时,即要考虑到显示时数码管的亮度,又要数码管显示时不产生闪烁现象。
4.1 设计思想按键采用线反转法先把列线置成低电平,行线置成输入状态,读行线;再把行线置成低电平,列线输入状态,读列线。
矩阵式键盘控制数码管显示
![矩阵式键盘控制数码管显示](https://img.taocdn.com/s3/m/6a868572effdc8d376eeaeaad1f34693daef10ba.png)
目录
CONTENTS
• 矩阵式键盘工作原理 • 数码管显示原理 • 矩阵式键盘控制数码管显示方案 • 矩阵式键盘控制数码管显示应用 • 矩阵式键盘控制数码管显示常见问题及
解决方案
01 矩阵式键盘工作原理
按键检测方式
直接检测法
通过直接检测按键是否按下,判断按键状态。
间接检测法
按键与数码管显示不匹配
01
总结词
按键与数码管显示不匹配是矩阵式键盘控制数码管显示中 常见的问题之一,表现为按下某个按键后数码管显示的内 容与预期不符。
02
详细描述
这可能是由于键盘编码与数码管显示编码不匹配导致的问题。 例如,按下数字键“1”,数码管却显示字母“A”。
03
解决方案
可以通过调整键盘编码与数码管显示编码的对应关系来解 决这个问题。具体来说,需要检查键盘编码与数码管显示 编码的映射关系,确保它们一一对应。同时,也需要检查 键盘扫描程序和数码管显示驱动程序的实现是否正确。
静态驱动
每个数码管的每个段都由一个独立的 I/O口控制,适用于数码管数量较少 的情况。
动态驱动
通过扫描方式逐个点亮数码管的各个 段,可以节省I/O口资源,适用于数码 管数量较多的情况。
03 矩阵式键盘控制数码管显 示方案
硬件连接方案
矩阵式键盘与微控制器连接
将矩阵式键盘的行和列连接到微控制器的输入/输出端口,以便读取按键状态。
优化显示逻辑
优化数码管显示的逻辑,例如使用动态扫描技术,减少数码管的亮灭时间,提高显示效果。
04 矩阵式键盘控制数码管显 示应用
电子密码锁
总结词
矩阵式键盘控制数码管显示在电子密码锁中应用广泛,能够实现密码输入、显示和安全 验证等功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
矿产资源开发利用方案编写内容要求及审查大纲
矿产资源开发利用方案编写内容要求及《矿产资源开发利用方案》审查大纲一、概述
㈠矿区位置、隶属关系和企业性质。
如为改扩建矿山, 应说明矿山现状、
特点及存在的主要问题。
㈡编制依据
(1简述项目前期工作进展情况及与有关方面对项目的意向性协议情况。
(2 列出开发利用方案编制所依据的主要基础性资料的名称。
如经储量管理部门认定的矿区地质勘探报告、选矿试验报告、加工利用试验报告、工程地质初评资料、矿区水文资料和供水资料等。
对改、扩建矿山应有生产实际资料, 如矿山总平面现状图、矿床开拓系统图、采场现状图和主要采选设备清单等。
二、矿产品需求现状和预测
㈠该矿产在国内需求情况和市场供应情况
1、矿产品现状及加工利用趋向。
2、国内近、远期的需求量及主要销向预测。
㈡产品价格分析
1、国内矿产品价格现状。
2、矿产品价格稳定性及变化趋势。
三、矿产资源概况
㈠矿区总体概况
1、矿区总体规划情况。
2、矿区矿产资源概况。
3、该设计与矿区总体开发的关系。
㈡该设计项目的资源概况
1、矿床地质及构造特征。
2、矿床开采技术条件及水文地质条件。