单片机用33矩阵键盘显示数字0~9
单片机实验报告——矩阵键盘数码管显示
单片机实验报告信息处理实验实验二矩阵键盘专业:电气工程及其自动化指导老师:***组员:明洪开张鸿伟张谦赵智奇学号:152703117 \152703115\152703118\152703114室温:18 ℃日期:2017 年10 月25日矩阵键盘一、实验内容1、编写程序,做到在键盘上每按一个键(0-F)用数码管将该建对应的名字显示出来。
按其它键没有结果。
二、实验目的1、学习独立式按键的查询识别方法。
2、非编码矩阵键盘的行反转法识别方法。
3、掌握键盘接口的基本特点,了解独立键盘和矩阵键盘的应用方法。
4、掌握键盘接口的硬件设计方法,软件程序设计和贴士排错能力。
5、掌握利用Keil51软件对程序进行编译。
6、会根据实际功能,正确选择单片机功能接线,编制正确程序。
对实验结果能做出分析和解释,能写出符合规格的实验报告。
三、实验原理1、MCS51系列单片机的P0~P3口作为输入端口使用时必须先向端口写入“1”。
2、用查询方式检测按键时,要加入延时(通常采用软件延时10~20mS)以消除抖动。
3、识别键的闭合,通常采用行扫描法和行反转法。
行扫描法是使键盘上某一行线为低电平,而其余行接高电平,然后读取列值,如读列值中某位为低电平,表明有键按下,否则扫描下一行,直到扫完所有行。
行反转法识别闭合键时,要将行线接一并行口,先让它工作在输出方式,将列线也接到一个并行口,先让它工作于输入方式,程序使CPU通过输出端口在各行线上全部送低电平,然后读入列线值,如此时有某键被按下,则必定会使某一列线值为0。
然后,程序对两个并行端口进行方式设置,使行线工作于输入方式,列线工作于输出方式,并将刚才读得的列线值从列线所接的并行端口输出,再读取行线上输入值,那么,在闭合键所在行线上的值必定为0。
这样,当一个键被接下时,必定可以读得一对唯一的行线值和列线值。
由于51单片机的并口能够动态地改变输入输出方式,因此,矩阵键盘采用行反转法识别最为简便。
阐述数码管显示对应矩阵键盘值
阐述数码管显示对应矩阵键盘值
数码管显示和矩阵键盘值之间的关系是通过数字信号的传递和编码来实现的。
在数码管显示中,每个数码管都有七个LED灯,可以分别控
制其显示数字的不同部分。
这七个LED灯对应的位置被编码
为数字的七位二进制数。
例如,数字“0”的编码为“00111111”,其中每个1代表一个LED灯亮起来,每个0代表一个LED灯
灭掉。
在矩阵键盘中,每个按键都与一个特定的行和列相连。
当用户按下一个按键时,该按键所在的行和列的电路之间会形成一个连接,并产生一个特定的数字信号,该信号代表了该按键所对应的数值。
因此,通过将数码管和矩阵键盘连接起来,可以根据按键的行列位置,将相应的数字信号解码并显示在数码管上。
这使得用户可以直接通过矩阵键盘输入数字,并看到其相应的显示和输出。
基于51单片机而制作的0~9_矩阵键盘期末大作业
0~9矩阵键盘数码管显示●功能实现:通过4x4键盘输入数字,并将这些数字以七段码的形式显示在数码管上,主要实现了一个基本的数字输入和显示的嵌入式系统功能。
●硬件要求:AT89C51、7SEG-COM-AN-GRN(共阳极单位数码管)、BUTTON(按钮)、RES16DIPIS (电阻包)、CAP(22pF电容)、RES、晶振等。
●硬件连接:●程序:➢程序可分为五部分:头文件、数码管七段码定义、延时函数、按键扫描函数、主函数#include<reg51.h>#include<intrins.h> //包含左移函数unsigned code dis[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //数码管七段码定义void delay(unsigned int x) //延时函数{unsigned char t;while(x--){for(t=0;t<120;t++);}}unsigned char keyScan(void) //按键扫描函数,用于检测4x4键盘上的按键状态它通过循环扫描4行和4列的组合,以检测按键是否被按下{unsigned char i,temp,num=16;for(i=0;i<4;i++){P1=_crol_(0xfe,i); //_crol_左移函数,它对0xfe进行逻辑循环左移i位,然后将结果赋给P1寄存器。
temp=P1;temp=temp & 0xf0;if(temp!=0xf0) //检查高四位是否有按键按下,即检查temp是否不等于0xf0{delay(20); //如果有按键按下,则进行一个短暂的延时。
这是为了稳定按键信号,避免按键抖动temp=P1; //延时后读取P1寄存器的值到temp变量中。
再进行一次判断是否有案件按下temp=temp & 0xf0;if(temp!=0xf0) //再进行一次判断高四位是否有案件按下为了确认按键状态稳定,而不是由于按键抖动引起的误触发。
51单片机矩阵键盘控制数码管显示过程中出现的问题及解决方法
51单片机矩阵键盘控制数码管显示过程中出现的问题及解决方法在使用51单片机控制矩阵键盘同时驱动数码管显示的过程中,可能会遇到一些常见的问题。
以下是一些可能的问题及相应的解决方法:按键无法正常响应:* 问题可能原因:接线错误、按键损坏、软件扫描不到按键信号。
* 解决方法:检查按键连接是否正确,确保按键没有损坏。
在软件中进行适当的按键扫描,确保能够正确检测到按键的状态。
数码管显示异常或不亮:* 问题可能原因:数码管接线问题、数码管损坏、数码管驱动程序错误。
* 解决方法:仔细检查数码管的接线是否正确,确保数码管没有损坏。
检查数码管的驱动程序,确保它按照正确的顺序和时序进行驱动。
按键重复响应或漏按现象:* 问题可能原因:按键抖动、软件扫描速度过快。
* 解决方法:在软件中增加适当的按键抖动延时,确保在按键按下或抬起时只响应一次。
调整软件扫描速度,避免扫描间隔过短导致的重复响应。
矩阵键盘的多个按键同时按下导致混乱:* 问题可能原因:矩阵键盘硬件连接错误、软件扫描算法问题。
* 解决方法:检查矩阵键盘的硬件连接,确保矩阵行和列没有短路或断路。
调整软件扫描算法,确保同时按下多个按键时能够正确识别。
数码管显示不正常的数字或乱码:* 问题可能原因:程序错误、数码管接线错误。
* 解决方法:仔细检查程序,确保数码管段选和位选的控制逻辑正确。
检查数码管的接线,确保每个数码管的连接都正确。
在解决问题时,建议逐步排除可能的原因,通过调试工具、逻辑分析仪或输出调试信息的方式来定位问题。
另外,仔细查阅51单片机的数据手册和相关文档,以确保硬件连接和软件设计都符合标准。
51单片机数码管显示及矩阵键盘扫描程序
51单片机数码管显示及矩阵键盘扫描程序硬件实验十一八段数码管实验一、实验任务1、在静态数码管上轮流显示数字0-9。
2、在两个4位数码管上动态显示数字0-9二、流程图及程序静态显示:流程图:程序代码:#include#define uchar unsigned chucharcodevalue[10]={0xC0,0xF9,0xA4,0xB0,0X99,0x92,0x82,0xF8,0 x80,0x90};//0 -9数码管显示段码void delay(char x) //延时子程序{uchar i;for(i=0;i<200;i++);}main() //主函数{int i;while(1){for(i=0;i<10;i++) //显示0-9{P0=codevalue[i];delay(500); //延时1秒}}}动态显示:#include#includetab1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6D,0x7D,0x07,0x7f,0x6f}; //数码管显示数字字段unsigned char tab2[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//片选字段unsigned char i,k,j,x;void delay(x); //声明延时子函数void main() //主函数{while(1){for(i=0;i<8;i++) //显示0-7{ P1=tab1[i];P0=tab2[i];delay(5); //延时}P1=tab1[8]; P0=tab2[0]; delay(5); //显示8-9P1=tab1[9]; P0=tab2[1]; delay(5);}}void delay(x) //延时函数定义{do{for(j=0;j<250;j++)for(k=0;k<250;k++);}}硬件实验十二矩阵键盘扫描显示一、实验任务1、把矩阵键盘上的按键输入的键码在静态数码管上显示出来。
单片机作业单只数码管循环显示0~9
单只数码管循环显示0~9学生学号:学生姓名:同组学号:同组姓名:单只数码管循环显示 0~9一、本课题剖析本次课程设计任务为:利用51 单片机、 BCD译码芯片和一位 LED组成一个数码管扫描显示系统,一个数码管同时循环显示0~9。
并依据设计任务的要求编写程序,在 PROTEUS 7.5中绘制电路原理图。
而后在PROTEUS 7.5下进行仿真,实现相应功能。
二、硬件设计原理2.1 Proteus软件介绍Proteus 软件是英国 Labcenter electronics企业第一版的EDA工具软件(该软件中国总代理为广州风标电子技术有限企业)。
它不单拥有其余EDA工具软件的仿真功能,还可以仿真单片机及外头器件。
它是当前最好的仿真单片机及外头器件的工具。
固然当前国内推行刚起步,但已遇到单片机喜好者、从事单片机教课的教师、致力于单片机开发应用的科技工作者的喜爱。
Proteus 是世界上有名的 EDA工具 ( 仿真软件 ) ,从原理图布图、代码调试到单片机与外头电路协同仿真,一键切换到PCB设计,真实实现了从观点到产品的完好设计。
是当前世界上独一将电路仿真软件、PCB设计软件和虚构模型仿真软件三合一的设计平台,其办理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、 8086 和 MSP430等, 2010 年马上增添 Cortex 和 DSP系列办理器,并连续增添其余系列办理器模型。
在编译方面,它也支持IAR、 Keil 和 MPLAB等多种编译器。
2.2原理图绘制说明本次设计的数码管0~9 循环系统是以 80C51单片机为中心器件,利用Keil进行程序编写,后由单个LED显示数字循环,致使达就任务要求。
电路原理图的设计与绘制是整个电路设计的基础。
电路原理图的设计包含:设置电路图的图纸大小;规划电路图的整体布局;在图纸上搁置元器件,进行布局和布线;依据需要增添说明并进行检查与改正,最后保留。
单片机用一位数码管循环显示0-9,A-f
DJNZ R6,D2
DJNZ R5,D1
RET;子程序返回
TAPE: DB 3FH,6H,5BH,, 6FH,77H,7CH
DB 39H,5EH,79H,71H
END ;结束
CALL DELAY;延时一秒
INC R0;将R0自加一(准备取下一表头数据)
CJNE R0,#16,LOOP;比较指令,看否取到了十六位否 则继续取表数据
JMP START;跳到"START开始
DELAY:MOV R5,#50;延时一秒子程序
D1:MOV R6,#100
D2:MOV R7,#100
CLR P2.7;关闭位选锁存器
MOV R0,#0;这一句和下一句是将A清零操作(初始化)
LOOP: MOV A,R0;将A清零操作
MOV DPTR,#TAPE ;装载表头
MOVC A,@A+DPTR;查表取数据
SETB P2.6;打开段选锁存器
MOV P0,A;输出数据到P0口
CLR P2.6;关段选锁存器
51单片机用一位数码管循环显示09af十六位字变换间隔为一秒程序
单片机用一位数码管循环显示0-9,A-f
功能:51单片机用一位数码管循环显示0-9,A-f ,十六位字,变换间隔为一秒
程序:主要使用查表的方法(从程序存储器里装载数据)
ORG 00H
START: SETB P2.7;打开位选锁存器
MOV P0,#0FEH;载入位选信号,第一位显示
单片机数码管显示0-9
/************************************************************重庆文理学院电子电气工程学院版权信息:main.c 文件名称:Keil4开发环境描述:LED 个P2口控制8 STC89C51单片机,晶振12M,单片机的硬件平台描述:主要功能描述: 实现闪烁灯的功能函数列表其及功能:延时功能1. DelayTime();2.历史修改记录:备注版本作者时间建立工程zhang fei 2014-10-14 1.0***********************************************************/#include <reg51.h>50#define MainDelayTimevoid DelayTime10ms(unsigned int DelayValue);unsigned char segdata[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xa0};//unsigned char one=0,two=0;//sbit seg0_select=P2^0;sbit seg1_select=P2^1;sbit key01=P3^0;/************************************************************main.c函数名称:主函数: 功能描述参数列表:无返还参数:***********************************************************/void main(){ int one;while(1){seg0_select=1; //seg1_select=0; //P0=segdata[two]; //DelayTime10ms(4); //seg0_select=0; //seg1_select=1;P0=segdata[one];DelayTime10ms(10);if(one++==10)//// {one=0;// if(two++==10)// one=two=0;// DelayTime10ms(20);if(key01==0){DelayTime10ms(10);if(key01==0){one++;if(one==9){one=0;// two=0;// two++;// if(two==10)// one=two=0;DelayTime10ms(20);// seg0_select=0;while(key01==0)seg1_select=1;}}}}}/************************************************************函数名称:main.c功能描述: 主函数参数列表:无返还参数:***********************************************************/void DelayTime10ms(unsigned int DelayValue){unsigned int a,b;for(a=0;a<DelayValue;a++)for(b=0;b<1828;b++);}//***********************END****************************************。
单片机矩阵式键盘连接方法及工作原理
矩阵式键盘的连接方法和工作原理什么是矩阵式键盘?当键盘中按键数量较多时,为了减少I/O 口线的占用,通常将按键排列成矩阵形式。
在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。
这样做有什么好处呢?大家看下面的电路图,一个并行口可以构成4*4=16 个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别就越明显。
比如再多加一条线就可以构成20 键的键盘,而直接用端口线则只能多出一个键(9 键)。
由此可见,在需要的按键数量比较多时,采用矩阵法来连接键盘是非常合理的。
矩阵式结构的键盘显然比独立式键盘复杂一些,识别也要复杂一些,在上图中,列线通过电阻接电源,并将行线所接的单片机4 个I/O 口作为输出端,而列线所接的I/O 口则作为输入端。
这样,当按键没有被按下时,所有的输出端都是高电平,代表无键按下,行线输出是低电平;一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了,具体的识别及编程方法如下所述:二.矩阵式键盘的按键识别方法确定矩阵式键盘上任何一个键被按下通常采用“行扫描法”或者“行反转法”。
行扫描法又称为逐行(或列)扫描查询法,它是一种最常用的多按键识别方法。
因此我们就以“行扫描法”为例介绍矩阵式键盘的工作原理:1.判断键盘中有无键按下将全部行线X0-X3 置低电平,然后检测列线的状态,只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4 根行线相交叉的4 个按键之中;若所有列线均为高电平,则表示键盘中无键按下。
2.判断闭合键所在的位置在确认有键按下后,即可进入确定具体闭合键的过程。
其方法是:依次将行线置为低电平(即在置某根行线为低电平时,其它线为高电平),当确定某根行线为低电平后,再逐行检测各列线的电平状态,若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。
下面给出一个具体的例子:单片机的P1 口用作键盘I/O 口,键盘的列线接到P1 口的低4 位,键盘的行线接到P1 口的高4位,也就是把列线P1.0-P1.3 分别接4 个上拉电阻到电源,把列线P1.0-P1.3 设置为输入线,行线P1.4-P1.7 设置为输出线,4 根行线和4 根列线形成16 个相交点,如上图所示。
(整理)单片机控制的矩阵键盘
INC B
INC B
JC NEXT5
NEXT6: MOV A,P1
ANL A,#0FH
CJNE A,#0FH,NEXT6
MOV R0,#0FFH
RET
键盘处理程序就作这么一个简单的介绍,实际上,键盘、显示处理是很复杂的,它往往占到一个应用程序的大部份代码,可见其重要性,但说到,这种复杂并不来自于单片机的本身,而是来自于操作者的习惯等等问题,因此,在编写键盘处理程序之前,最好先把它从逻辑上理清,然后用适当的算法表示出来,最后再去写代码,这样,才能快速有效地写好代码。
可见,键盘输出经双稳态电路之后,输出已变为规范的矩形方波。
软件上采取的措施是:在检测到有按键按下时,执行一个10ms左右(具体时间应视所使用的按键进行调整)的延时程序后,再确认该键电平是否仍保持闭合状态电平,若仍保持闭合状态电平,则确认该键处于闭合状态;同理,在检测到该键释放后,也应采用相同的步骤进行确认,从而可消除抖动的影响。
ANL A,#0FH
CJNE A,#0FH,KCODE;
MOV A,R1
SETB C
RLC A
JC NEXT2
NEXT3: MOV R0,#00H
RET
KCODE: MOV B,#0FBH
NEXT4: RRC A
INC B
JC NEXT4
MOV A,R1
SWAP A
NEXT5: RRC A
INC B
2.独立式按键的软件结构
独立式按键软件常采用查询式结构。先逐位查询每根I/O口线的输入状态,如某一根I/O口线输入为低电平,则可确认该I/O口线所对应的按键已按下,然后,再转向该键的功能处理程序。图7.4中的I/O口采用P1口,请读者自行编制相应的软件。
单片机键盘及显示
单片机键盘及显示在现代电子技术的世界里,单片机扮演着至关重要的角色。
而单片机的键盘及显示系统,则像是它与外界沟通和展示自我的窗口。
单片机键盘,简单来说,就是用户向单片机输入指令和数据的途径。
它的形式多种多样,常见的有矩阵键盘和独立键盘。
矩阵键盘就像是一个规整的方阵,通过行线和列线的交叉组合来识别按键的按下。
这种键盘结构紧凑,能够在有限的引脚资源下实现较多按键的输入。
想象一下,一个 4×4 的矩阵键盘,就能提供 16 个按键的输入,是不是很高效?但它的缺点也显而易见,那就是扫描和识别的程序相对复杂。
独立键盘则相对简单直接,每个按键都单独连接到单片机的一个引脚。
它的优点是编程简单,容易理解和实现。
但如果需要很多按键输入时,就会占用大量的单片机引脚资源。
在实际应用中,选择哪种键盘类型取决于具体的需求。
比如,在一个简单的温度控制系统中,可能只需要几个按键来设置温度上下限,这时独立键盘就足够了。
而在一个功能丰富的电子设备中,需要大量的按键输入,矩阵键盘可能就更合适。
说完键盘,再来说说单片机的显示部分。
显示是单片机向用户反馈信息的重要方式,常见的显示方式有 LED 数码管显示和液晶显示(LCD)。
LED 数码管显示,大家应该都不陌生,在很多电子设备上都能看到它的身影。
它的优点是亮度高、响应速度快、成本低。
但是,它能显示的信息量有限,一般只能显示数字和一些简单的字符。
液晶显示(LCD)则更加灵活多样,可以显示丰富的图形和文字信息。
它的功耗相对较低,显示效果也更加清晰和细腻。
不过,LCD 的驱动程序相对复杂,成本也会稍高一些。
在选择显示方式时,需要综合考虑显示内容的复杂程度、成本、功耗等因素。
为了实现单片机与键盘和显示的有效交互,还需要编写相应的程序。
在键盘扫描程序中,要不断检测按键是否按下,并判断是哪个按键被按下,然后将相应的键值传递给单片机进行处理。
对于显示程序,要根据需要显示的内容,将数据发送到显示设备上。
[整理]33矩阵按键
SJMPMAIN
定量安全评价方法有:危险度评价法,道化学火灾、爆炸指数评价法,泄漏、火灾、爆炸、中毒评价模型等。KEY8:
(2)建设项目周围环境的现状。MOVP2,#7FH
对于不同的评价单元,可根据评价的需要和单元特征选择不同的评价方法。LCALLDELAY
环境敏感区,是指依法设立的各级各类自然、文化保护地,以及对建设项目的某类污染因子或者生态影响因子特别敏感的区域。SJMPMAIN
单片机原理及应用
实验报告
实验名称:3x3矩阵式键盘
组员:
实验成绩:
指导老师:
实验日期:
实验地点:
实验报告
一、实验目的
用键盘的按键控制数码管显示的对应值
二、实验原理
(1)实验原理
单片机的P3口用于键盘的连接,键盘中,行、列线分别连接到按键开关的两端。通过键盘处理程序确定有无按键暗下,判断哪一个按键按下,还要消除按键在闭合或断开时的抖动。两个并行口中,一个使按键逐行动态接地,另一个并行口输入按键状态,才以此确定闭合键的位置。
4.环境保护地方性法规和地方性规章DELAY:
表一:项目基本情况;MOVR7,#60
DLY1:
MOVR6,#100
DJNZR6,$
DJNZR7,DLY1
RET
END
(2)矩阵式按键的特点
每个按键都有它的行值和列值,行值和列值的组合就是识别这个按键的编码。矩阵的行线和列线分别通过两并行接口和CPU通信。因此可分别对行号和列号进行二进制编码,然后将两值合成一个字节,高4位是行号,低4位是列号。
(3)流程图
三、系统仿真图
当键盘按键按下0时仿真图如下:
按键5时:
按键8时:
点阵式LED0~9数字显示讲解
指令指示器指向内存中存放指令的地方。 取指器在那里取出指令, 并把它交 给解码器。解码器解释指令。然后,ALU执行指令所要求的操作,它对数据进 行加、减运算,或者其它的一些处理。在CPU解释并执行完一条指令后,控制 器会告诉取指器在内存中取出下一条指令。 这个过程一直持续着, 一条指令接一 条指令,以令人眼花的速度运行。 为了使一切都按时发生, 各组成部分还需要一 个时钟发生器。时钟发生器是用来调节CPU的每一个动作的。像节拍器一样, 它发出调整CPU步伐的脉冲。
9.P1口(1-8):准双向通用I/0口。
10.P2口(21-28):准双向I/0口。
11.P3口(10-17):多用途口。其为带内部上拉电阻的准双向口,具有复用功 能,除作普通I/0口外,还可作以下用途:
RXD:UART的串行输入口,移位寄存器方式的数据端。
TXD:UART的串行输出口,移位寄存器方式的时钟端面。INTO:外部中断0输入口。
关键字:
51单片机 点阵式LED“0~9”数字显示
Abstract:
Briefly the main properties of51single chip, the internal structure and function of each pin, an overview of the application principle. MCS-51 microcontroller is a U.S. INTEL company launched products in1980,compared with the MCS-48 microcontroller, and its structure is more advanced and more powerful, based on the increase in the original circuit units and more instructions, instructions up to111,MCS-51 microcontroller products can be quite successful, until now, MCS-51 series or compatible microcomputer application is still the mainstream product. Dot Matrix LED briefly the working principle of the internal structure and its applications, and by 89C51 And Dot Matrix LED to display"0 9"design.
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
case 0xeb:num=8;
break;
case 0xdb:num=9;
break;
}
while(temp!=0xe0)
{
temp=P1;
temp=temp&0xe0;
}
}
}
return num; //返回检测结果,
}
temp=P1;
switch(temp)
{
case 0xf5:num=4;
break;
case 0xed:num=5;
break;
case 0xdd:num=6;
break;
}
while(temp!=0xe0)
{
temp=P1;
temp=temp&0xe0;
}
}
}
temp=P1; //temp读回P1的值,
temp=temp&0xe0; //屏蔽 temp低5位,只看高3位列控是否发声变化
while(temp!=0xe0) //不等,说明第一行有键按下
{ //延时去抖
delay(5); //再检测
temp=P1;
temp=temp&0xe0;
while(temp!=0xe0) //果真有键按下,
P1=0xfb;
tmp&0xe0;
while(temp!=0xe0)
{
delay(5);
temp=P1;
temp=temp&0xe0;
while(temp!=0xe0)
{
temp=P1;
switch(temp)
{
case 0xf3:num=7;
0x80,0x90}; //数码管显示编码
uchar num,temp,num1; //全局变量定义
/************************延时子函数***********************************/
void delay(uint z)
{
uint x,y;
#include<reg52.h> //文件包含
#define uint unsigned int
#define uchar unsigned char //宏定义,方便使用
uchar code table[]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
void main()
{
num=0;
P0 = 0xc0 ;
while(1)
{
display(keyscan()); //调用键盘扫描子函数
}
}
/*************************显示子函数**********************************/
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/**************************主函数*************************************/
uchar keyscan(); //定义键扫描函数
void display(uchar aa); //定义显示函数
void display(uchar aa)
{
P0=table[aa];
}
/************************键盘扫描子函数*******************************/
uchar keyscan()
{
P1=0xfe; //P1赋值,低位送0
{ //把P1给temp,检测按键位置
temp=P1;
switch(temp)
{
case 0xf6:num=1;
break;
case 0xee:num=2;
break;
case 0xde:num=3;
break;
}
while(temp!=0xe0) //一次按键检测,松手跳出循环
{
temp=P1;
temp=temp&0xe0;
}
}
}
P1=0xfd; //检测第二列
temp=P1;
temp=temp&0xe0;
while(temp!=0xe0)
{
delay(5);
temp=P1;
temp=temp&0xe0;
while(temp!=0xe0)
{