导航:首页 > 操作系统 > 单片机怎么将键值显示

单片机怎么将键值显示

发布时间:2023-01-17 17:33:03

A. 单片机,设计一个计算器,能够自定义按键键值,并能通过串口调试助手将执行结果显示到计算机上。

你的这个题目范围太大了。限于篇幅无法在细节上一一讲明白。

主要的思路如下:

  1. 硬件设计:单片机需要能够检测键是否按下,就需要搭建电路。通常情况下按键有两种方式:一种是直接将键通过电阻电容连接到单片机IO引脚上,这种方式适用于按键数量不太多或单片机引脚数量足够多的情况。另外一种是将键纵横排列成按键网络,通过扫描的方法检测按下的是哪个键,这种适用于键数量较多,或IO引脚不足的情况,比如你的图上有4X4=16键,直接连接的方法需要16个IO口,网络的话,只需要4+4=8个IO口即可完成。具体哪种根据需要来,具体电路网上搜索。

    另外就是通讯电路,这个网上有好多RS232的,不再细说

  2. 算法设计

    由于是键盘,除了检测到哪个键按下外,还应该包含一定的消除抖动的能力,防止按下一个键却触发好多次同样的按下此键的情况。

    另外需要在单片机内存中建立“键-键值”的对应关系表,因为你要求能够自定义键值。

  3. 通讯

    你没有提到通讯是实时发送还是按下一个键,比如回车键后才发送。

    由于键盘的速度比较低,为了简单,可以采用检测到一个键按下后就发送一个键的代码。

    根据你所采用的单片机的不同,所用的对通讯的初始化、发送等代码也有所不同。具体不再细说。


B. 用51单片机1602LCD怎么显示仿手机键盘按键字符,要用c语言编,谢谢

检测按键状态吧,比如在1秒内发生的连续按键则切换对应的字符,比如数字1按键(字母A B C)在一定时间内1-2秒被按连续下(不是按住不放),则显示循环切换1 A B C。
关键应该是连续按键的检测问题。

C. 键值识别(单片机训练)急急急!!!

很亲切,我想电子专业的在大学都做过这个实验,好好看书,不难,自己动手搞出来的意义非常重大。

D. 51单片机怎么用按键控制一个数码管,按一下显示一个数字,顺序显示

1、首先,要把代码写好,点亮数码管。

E. 51单片机怎样用键盘控制数码管显示

51单片机怎样用键盘控制数码管显示的方法。

如下参考:

1.首先,编写代码并点亮数码管。

F. 在单片机C语言中,将按键设为1到9的数,怎样记录下按键的次数,并且将按键的键值按顺序在LCD上显示

假定你的单片机和LCD的关联部分已经做好了,直接调用函数就能在LCD上显示内容。

键盘的话,假定是每个键都和一个引脚串联(即按下该键,为高电平-1,否则低电平-0)

int num[16];//一般的LCD是16位数字吧,不知道你用的什么字库啊!
int index=15;
int i=0;

for( i=0; i<16; i++)num[i]=0;//初始化数组

//如果有按键
int GetKeyPress( k:int ){
num[index]=k;
index--;
if(index<0)index=15;
}

每次接受到按键后都将num数组的数据发送到LCD去显示,发送的顺序是从index位置开始往后

G. 用51单片机让1602液晶连续的显示矩阵键盘按键值,连续按下的数都回被显示出来。

先根据你要显示数字的个数定义一个unsigned char型的字符数组,调用扫描键盘函数,扫描到哪个键被按下的同时将键值存进对应的数组元素中,再调用液晶显示程序显示,液晶显示程序中显示的位数可变,可以定义一个变量来记录已按下的位数,显示的程序中实参为已按下按键的个数,这样就能实时显示数字了。

H. (51单片机)矩阵键盘计算出键值之后如何查表\显示

我想问一下,你的硬件连接是怎么连接的...
还有就是你现在算出的值是什么关系..
其实,书上有这方面的例程序的..
还有就是,建议不要装在P3口上,那样第二功能就不好用了....

我想问的是,键盘的行和例是怎么连接的...
下面我改了一下程序,行是,P3.0-P3.3,例是,P3.4-P3.7,最后得到的键值存在,KEYS中数为,0-15,
有什么问题可以再问...
START:
MOV P1,#00H
MOV P2,#0FH
CLR KEYCARD
LOOP:
ACALL KEY_CHECK
JNB KEYCARD,LOOP ;为0从重新扫描
ACALL KEY_MARK ;为1有按键,调用KEY_MARK
AJMP LOOP
KEY_CHECK: ;键盘扫描
MOV P3,#0FH
MOV A,P3
ANL A,#0FH
CJNE A,#0FH,KEY_C1
CLR KEYCARD
RET
KEY_C1:
ACALL DELAY ;有键接下,消抖
SETB KEYCARD
RET
KEY_MARK:
MOV A,#0EFH ;第一例,行扫描,
KEY_M1: ;键值扫描
MOV P3,A
MOV KEYS,A
MOV A,P3
ANL A,#0FH ;取与
CJNE A,#0FH,KEY_M2 ;在第一例则跳,KEY_M2
MOV A,KEYS ;并非在第一例刚移位
SETB C
RLC A
JC KEY_M1 ;C=1,重新扫描..
CLR KEYCARD ;扫完一圈后,完成..
RET
KEY_M2: ;键值计算
MOV R0,#KEYS ;将KEYS的地址装入R0
XCH A,@R0 ;交换KEYS,A
XCHD A,@R0 ;交换低4位..
MOV KEYS,A
MOV R0,#0
LCALL KEY_ZHI
KEY_MX: ;等待按键释放
MOV A,P3
ANL A,#0FH
CJNE A,#0FH,KEY_MX
CLR KEYCARD
RET
KEY_ZHI:
MOV A,R0
INC R0
MOV DPTR,#KEY_VALUE
MOVC A,@A+DPTR
CJNE A,KEYS,KEY_ZHI ;查找键值.
DEC R0
MOV KEYS,R0
MOV P1,KEYS ;KEYS中的数为:0-15
RET
DELAY:
MOV R7,#20 ;延时大约2ms
D1: MOV R6,#50
DJNZ R6,$
DJNZ R7,D1
RET
KEY_VALUE: DB 0EEH,0DEH,0BEH,07EH,0EDH,0DDH,0BDH,07DH,0EBH,0DBH,0BBH,07BH,07EH,07DH,077H
END

I. 怎样将单片机矩阵键盘的值保存起来并显示

#include <reg52.h>
#include <intrins.h>

#define uint unsigned int
#define uchar unsigned char

sbit la=P2^6;
sbit wela=P2^7;

uchar code table[]=
{
0x3f,
0x06,
0x5b,
0x4f,
0x66,
0x6d,
0x7d,
0x07,
0x7f,
0x6f,
0x77,
0x7c,
0x39,
0x5e,
0x79,
0x71,
};

void delay_ms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}

void display(uchar num)
{
P0=table[num];
la=1;
la=0;
}

void keyscan()
{
uchar temp,key;
P3=0xfe;
temp=P3;
temp&=0xf0;
if(temp!=0xf0)
{
delay_ms(10);
temp=P3;
temp&=0xf0;
if(temp!=P3)
{
temp=P3;
switch(temp)
{
case 0xee:
key=0;
break;
case 0xde:
key=1;
break;
case 0xbe:
key=2;
break;
case 0x7e:
key=3;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp&=0xf0;
}
display(key);
}
}
P3=0xfd;
temp=P3;
temp&=0xf0;
if(temp!=0xf0)
{
delay_ms(10);
temp=P3;
temp&=0xf0;
if(temp!=P3)
{
temp=P3;
switch(temp)
{
case 0xed:
key=4;
break;
case 0xdd:
key=5;
break;
case 0xbd:
key=6;
break;
case 0x7d:
key=7;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp&=0xf0;
}
display(key);
}
}
P3=0xfb;
temp=P3;
temp&=0xf0;
if(temp!=0xf0)
{
delay_ms(10);
temp=P3;
temp&=0xf0;
if(temp!=P3)
{
temp=P3;
switch(temp)
{
case 0xeb:
key=8;
break;
case 0xdb:
key=9;
break;
case 0xbb:
key=10;
break;
case 0x7b:
key=11;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp&=0xf0;
}
display(key);
}
}
P3=0xf7;
temp=P3;
temp&=0xf0;
if(temp!=0xf0)
{
delay_ms(10);
temp=P3;
temp&=0xf0;
if(temp!=P3)
{
temp=P3;
switch(temp)
{
case 0xe7:
key=12;
break;
case 0xd7:
key=13;
break;
case 0xb7:
key=14;
break;
case 0x77:
key=15;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp&=0xf0;
}
display(key);
}
}
}

void main()
{
P0=0;
la=1;
la=0;
P0=0xfe;
wela=1;
wela=0;
while(1)
{
keyscan();
}
}

阅读全文

与单片机怎么将键值显示相关的资料

热点内容
安卓快手下载怎么没有下载到本地 浏览:228
怎么在安卓手机登绘旅人 浏览:404
桌面文件全部加密 浏览:401
6s怎么外接u盘需要什么app 浏览:131
linux查看文件权限命令 浏览:685
安卓手游存档怎么用 浏览:761
linuxyum安装ftp 浏览:690
村委会主任可以推行政命令吗 浏览:102
电脑文件夹封面多张图片 浏览:263
网吧总服务器叫什么 浏览:922
多个算法解决同一个问题 浏览:455
小车解压后我的购车发票呢 浏览:977
做app开发用什么云服务器 浏览:177
linux网卡子接口 浏览:985
21岁职高毕业学程序员怎么学 浏览:321
vs如何对单个文件编译 浏览:6
为什么有的电脑不能安装python 浏览:75
金蝶迷你版加密狗检测到过期 浏览:186
硬件描述语言编译结果 浏览:655
程序员逆天改命 浏览:19