4x4矩阵键盘,求按键小精灵的定义函数,定义0到9十个数字,外加HZ,KHZ,MHZ的定义键盘

君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
单片机课程设计报告---数码管显示4X4矩阵键盘按键号
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口4X4 矩阵键盘,实现自己定义键号为0~9,A~F,编程实现按下按键抬起后在多位数码管上将当前显示数字左移一位_百度知道
4X4 矩阵键盘,实现自己定义键号为0~9,A~F,编程实现按下按键抬起后在多位数码管上将当前显示数字左移一位
P1.0~P1,每送出一个行扫描吗,据此在数码管的最低位(最右边数码管)上显示相应的数值0~F之一,2FH.7作为输出,在行扫描时,进行行扫描,要求最后输入的显示在最右边数码管,扫描时P1.0~P1,4FH.4~P1。注意每次显示新数值之前将原显示数值依次左移一位,8FH之一).7之中只有一根口线为0其他都为1,送上扫描吗时要保证P1.3哪位是数字0(即低电平),P1.0~P1.3作为输入(程序初始化时P1口要初始化为0FFH使用单片机的P1口连接矩阵键盘,将键号以16进制形式显示在多位数码管上.4~P1。编程实现键盘扫描程序读取键值,度P1口数据判断P1,从而判断是当前行的那一列上的按键按下.3全为1,即向P1口写入1FH,生成键号。将当前的行扫描码的高四位和P1读入的第四位数值转换成键号值0~15中的一个
共阳数码管.jpg" esrc="http,图给错了。
& delay(5);i;{& &delay(5);&&nbsp,/*0*/&&&Ten=B&nbsp,0xbd,Ten=0;&&&&nbsp,0&&nbsp,/*4*/&0x3F;0x66;&&i= kbscan();key&P2_2=1;&uint&unsigned&&&&REGX51;0;&Thousand=H&&&nbsp,0xd7;Hundred=Ten,/*d*/&&nbsp.hiphotos.H&gt,0xb7,
0#define&&&&code&keytemp=i;kbscan(void)&&&&&nbsp,/*E*/&& for(key=16;&nbsp:数码管间隔跳动函数中&&main(void){&&&&&jz_code[17]={0&&delay(unsigned&}&void&&&&a)
&&&nbsp,0x7d;&&&char&P0=ledshow[Ten],/*A*/&uchar&unsigned&&&&0x77;&&&&(key);& while(a--)
for(i=100;&P2_1=0;0x71;&//左移{&&} &nbsp,/*5*/&&&&nbsp.
0x7e;0x39;&0x7D,/*b*/&&&&{ display();&&&&intuchar&&&nbsp,调小{&&&&&& } return&nbsp,/*6*/&//百位&nbsp,/*C*/&Bits=0;&nbsp://h;0x7C://h;uchar&nbsp,0x77},0&&&data_l(void)
&0x06;&//键盘代码
void&&nbsp,Hundred=0;&&nbsp,/*1*/&0x79,/*3*/&&&else&nbsp,Thousand=0;&&&&data_l();&nbsp,&&& unsigned&code&&static&ledshow[16]={&P1=0xf0,0display(void)//数码管显示;&&&&//键盘扫描 {&P2_3=1;0xee,0&&&&&&&&& }void&&P2_1=1;&P2=0xff!=0)&&&&&nbsp#include&&&key--) { &&&nbsp,/*7*/&
}uchar&&&0x5E,0x7b;&}&&&&&四个;&0x6D;0x5B;&0;&&&&P2_0=1; hang=P1;delay(5);&nbsp,/*2*/&if(i;&&P0=ledshow[Thousand];P0=ledshow[Bits];&&&&&nbsp,调试方法;&&&&uchar&if(;&&&keytemp=0;0x4F;&//延时 { unsigned&&P2_2=0;&nbsp,&//千位&i--);&//十位&&nbsp,0&&&char&&&//共阴数码管代码 uchar&delay(5),char&&&}}<img class="ikqb_img" src="&nbsp,
0&& delay(5); P1=0x0f;&while(1)&delay(5)!(keytemp==i))&//个位&&nbsp.hiphotos://h;char#define&nbsp
我要的是汇编语言的。补充问题里面。
写过这种程序。 用百度 网页,搜索:做而论道 按键控制移位显示百度一下,即可找到。
可是你使用c语言写的,我要的是汇编语言的。。
呵呵,单片机型号、显示器的接口、共阳、共阴数码管、右边的是那个接口...还有什么条件,你就一块说出来吧。别一段一段的挤。
AT89C51的cpu,共阳数码管。图给错了。
其他类似问题
为您推荐:
矩阵键盘的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁求求4x4矩阵键盘原理图 +pcb下载?_矩阵_百科问答
求求4x4矩阵键盘原理图 +pcb下载?
提问者:葛新卿
在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,如图1所示。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。 矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,上图中,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。这样,当按键没有按下时,所有的输出端都是高电平,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。具体的识别及编程方法如下所述。 矩阵键盘编辑本段2、矩阵式键盘的按键识别方法确定矩阵式键盘上何键被按下介绍一种“行扫描法”。 行扫描法 行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法,如上图所示键盘,介绍过程如下。 1、判断键盘中有无键按下 将全部行线Y0-Y3置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。 2、判断闭合键所在的位置 在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。 下面给出一个具体的例子: 图仍如上所示。8031单片机的P1口用作键盘I/O口,键盘的列线接到P1口的低4位,键盘的行线接到P1口的高4位。列线P1.0-P1.3分别接有4个上拉电阻到正电源+5V,并把列线P1.0-P1.3设置为输入线,行线P1.4-P.17设置为输出线。4根行线和4根列线形成16个相交点。 1、检测当前是否有键被按下。检测的方法是P1.4-P1.7输出全“0”,读取P1.0-P1.3的状态,若P1.0-P1.3为全“1”,则无键闭合,否则有键闭合。 2、去除键抖动。当检测到有键按下后,延时一段时间再做下一步的检测判断。 3、若有键被按下,应识别出是哪一个键闭合。方法是对键盘的行线进行扫描。P1.4-P1.7按下述4种组合依次输出: P1.7 1 1 1 0 P1.6 1 1 0 1 P1.5 1 0 1 1 P1.4 0 1 1 1 在每组行输出时读取P1.0-P1.3,若全为“1”,则表示为“0”这一行没有键闭合,否则有键闭合。由此得到闭合键的行值和列值,然后可采用计算法或查表法将闭合键的行值和列值转换成所定义的键值 4、为了保证键每闭合一次CPU仅作一次处理,必须却除键释放时的抖动。 键盘扫描程序: 从以上分析得到键盘扫描程序的流程图如图2所示。程序如下 SCAN: MOV P1,#0FH MOV A,P1 ANL A,#0FH CJNE A,#0FH,NEXT1 SJMP NEXT3 NEXT1: ACALL D20MS MOV A,#0EFH NEXT2: MOV R1,A MOV P1,A MOV A,P1 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 INC B INC B INC B JC NEXT5 NEXT6: MOV A,P1 ANL A,#0FH CJNE A,#0FH,NEXT6 MOV R0,#0FFH RET 键盘处理程序就作这么一个简单的介绍,实际上,键盘、显示处理是很复杂的,它往往占到一个应用程序的大部份代码,可见其重要性,但说到,这种复杂并不来自于单片机的本身,而是来自于操作者的习惯等等问题,因此,在编写键盘处理程序之前,最好先把它从逻辑上理清,然后用适当的算法表示出来,最后再去写代码,这样,才能快速有效地写好代码。
回答者:朱岑琳
Mail: Copyright by ;All rights reserved.51单片机4x4键盘矩阵扫描只能扫描出最后一列的按键,硬件没有问题。代码如下,求解!_百度知道
51单片机4x4键盘矩阵扫描只能扫描出最后一列的按键,硬件没有问题。代码如下,求解!
temp &=0x0f:
keycode=255,0x06;xms&
case 0x07,0x5b:
keycode=11;
default,0x66,0x77;
case 0x0b;
keycode=12;
key_temp=query_key();
case 0x0b!=255)
ms_delay(20);sbit L3=P1^2,0x6d;
temp=P3;}void show(uchar n){
P0=seg7[n];
P3 = 0x7f:
keycode=3;
P3 = 0xdf,0x5e;
case 0x0b;
P3 = 0xbf:
keycode=4;sbit L2=P1^1;reg51;void ms_delay(uint xms){sbit L1=P1^0:
keycode=8;
switch (temp)
case 0x0e,0x6f#include&
case 0x0b:
keycode=9;
case 0x07,0x39;sbit L4=P1^3;i--) ; for (
temp &=0x0f;0:
keycode=7:
keycode=1;
temp &=0x0f:
keycode=5;
case 0x0d;0,0x71};i&gt:
keycode=10;
break,0x7d:
keycode=2;uchar code seg7[16]={0x3f:
keycode=14;
case 0x0d;
keycode=255,0x07;
if (key_temp:
keycode=15;
P0=0x00; }main(){
uchar key_temp:
keycode=6,0x4f,0x7c;
switch (temp)
case 0x0e;
switch (temp)
case 0x0e;#define uint unsigned int#define uchar unsigned charsbit WEI=P2^7.h&
key_temp=255;sbit DUAN=P2^6;
case 0x0d;
return keycode,
key_temp=query_key():
keycode=13;
DUAN=0!=255)
show(key_temp),0x79:
keycode=0;
temp &=0x0f;
case 0x07; }uchar query_key(){xms--)
for (i=110;
case 0x07;
switch (temp)
case 0x0e;
case 0x0d;
break,0x7f
提问者采纳
当你按最后一列的按键时,在执行到最后一个switch语句时,便执行后直接退出switch语句你最后的一个switch……case语句中default: 和keycode=255。你把这两条语句去掉就可以了:后面已经把keycode改成255了,最后一个switch语句中有符合的case值,所以在前面几个switch语句中产生的keycode值,遇到break,也就是keycode=255,由于最后一个switch语句没有符合的case值,所以会执行case后面相应的语句:后面的语句
提问者评价
谢谢!新手犯了个脑残的错误。。。
其他类似问题
为您推荐:
其他2条回答
前三行,检测到了,但是,没有及时返回。
修改如下:
uchar query_key()
temp &=0x0f;
switch (temp)
case 0x0e:
case 0x0d:
case 0x0b:
case 0x07:
return 12;
temp &=0x0f;
switch (temp)
case 0x0e:
case 0x0d:
case 0x0b:
case 0x07:
return 13;
temp &=0x0f;
switch (temp)
case 0x0e:
case 0x0d:
case 0x0b:
return 10;
case 0x07:
return 1...
你这样当然是只有最后一行有效了,从第一行扫描开始,当扫描到有效键值时就退出返回就OK了。
51单片机的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁4x4键盘扫描_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
4x4键盘扫描
上传于||暂无简介
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
下载文档到电脑,查找使用更方便
还剩5页未读,继续阅读
你可能喜欢}

我要回帖

更多关于 按键小精灵 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信