单片机键盘输入程序

作者&投稿:淡嘉 (若有异议请与网页底部的电邮联系)
通过键盘往单片机中输入任意数字的C语言程序?~

我这有个AVR的矩阵键盘的识别程序、其中PORTA就相当于51里的P0一样的端口的表示、PINA也是指的PORTA口、和PORTA的区别是PINA只能读!其他都一样的和51
/********************************************************
实验七: 矩阵式键盘实验
说明: 按按键K1-K16 数码管显示0-F的键码
注意: K17-K19为独立按键,使用这个程序是没有反应的

CPU型号: ATMEGA128A
晶振频率: 8MHZ
日期: 2011-3-12
联系方法: MCU.2000@163.com
********************************************************/
#include
#include
#define uchar unsigned char
#define uint unsigned int
void Delayus(uint US); //微秒延时子程序
void Delayms(uint MS); //毫秒延时子程序
uchar key_scan(void);
void init_io(void);
//共阳数码管数字码
uchar led_discode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};

uchar key_val=0;
//主函数
void main (viod)
{
uchar key_io;
init_io();
while(1)
{
PORTD=0XF0;
Delayms(5);
key_io=PIND & 0xf0;
if(key_io !=0xf0)
{
PORTD=0XF0;
Delayms(1);
key_io=PIND & 0xf0;
if(key_io !=0xf0)
{
key_val=key_scan();
key_val |= key_io;
}
switch(key_val)
{
case 0xee: key_val=0x00; break; //按键K1

case 0xde: key_val=0x01; break; //按键K2

case 0xbe: key_val=0x02; break; //按键K3

case 0x7e: key_val=0x03; break; //按键K4

case 0xed: key_val=0x04; break; //按键K5

case 0xdd: key_val=0x05; break; //按键K6

case 0xbd: key_val=0x06; break; //按键K7

case 0x7d: key_val=0x07; break; //按键K8

case 0xeb: key_val=0x08; break; //按键K9

case 0xdb: key_val=0x09; break; //按键K10

case 0xbb: key_val=0x0a; break; //按键K11

case 0x7b: key_val=0x0b; break; //按键K12

case 0xe7: key_val=0x0c; break; //按键K13

case 0xd7: key_val=0x0d; break; //按键K14

case 0xb7: key_val=0x0e; break; //按键K15

case 0x77: key_val=0x0f; break; //按键K16
} // switch(key_val)
} // if(key_io !=0xf0)

PORTD=0XF0;
//等待松开按键
key_io=PIND & 0xf0;
while(key_io !=0xf0)
{
key_io=PIND & 0xf0;
}
PORTC=led_discode[key_val]; //显示按键码
} // while(1)
}
void init_io(void)
{
DDRA=0XFF;//设置A口味输出
PORTA=0XFF;

DDRB=0XFf;;//设置B口味输出
PORTB=0XFF; //数码管位控制

DDRC=0XFF; //数码管段控制
PORTC=0X00;

DDRD=0X0F; //键盘接口
PORTD=0XF0;

DDRF=0X0E;
PORTF=0X0E;
PORTF&=0XF7; //锁存关闭LED显示

DDRB |=0X10; //PB4设为输出
PORTB|=0X10; //关闭PB4外接的LED
}
uchar key_scan(void)
{
uchar m,temp=0xf7;
for(m=0;m<4;m++)
{
PORTD=temp | 0xf0;
Delayms(1);
if((PIND & 0XF0)!=0XF0)
return(temp & 0x0f);
temp>>=1;
}
}
/****************************************************
函数名称: Delayus
功 能: 延时指定微秒(8M晶振)
参 数: US--延时的微秒数(大约,不是很精确,MS越大越准确)
返回值 : 无
/****************************************************/
void Delayus(uint US)
{
uint i;
US=US*5/4;
for( i=0;i<US;i++);
}
/****************************************************
函数名称: Delayms
功 能: 延时指定毫秒(8M晶振)
参 数: MS--延时的毫秒数
返回值 : 无
通过软件仿真反复实验得到的数值
/****************************************************/
void Delayms(uint MS)
{
uint i,j;
for( i=0;i<MS;i++)
for(j=0;j<1141;j++);
}


用手机发的

31H
VAL EQU 32H
ORG 00H
START: MOV DPTR,#TABLE ;段码表首地址
MOV P2,#10H ;数码管显示初始化

LSCAN: MOV P3,#0F0H ;列线置高电平,行线置高电平
L1: JNB P3.0,L2 ;逐行扫描
LCALL DELAY
JNB P3.0,L2
MOV LINE,#00H ;存行号
LJMP RSCAN
L2: JNB P3.1,L3
LCALL DELAY
JNB P3.1,L3
MOV LINE,#01H ;存行号
LJMP RSCAN
L3: JNB P3.2,L4
LCALL DELAY
JNB P3.2,L4
MOV LINE,#02H ;存行号
LJMP RSCAN
L4: JNB P3.3,L1
LCALL DELAY
JNB P3.3,L1
MOV LINE,#03H ;存行号

RSCAN: MOV P3,#0FH ;行线列线电平互换
C1: JNB P3.4,C2 ;逐列扫描
MOV ROW,#00H ;存列号
LJMP CALCU
C2: JNB P3.5,C3
MOV ROW,#01H ;存列号
LJMP CALCU
C3: JNB P3.6,C4
MOV ROW,#02H ;存列号
LJMP CALCU
C4: JNB P3.7,C1
MOV ROW,#03H ;存列号

CALCU: MOV A,LINE ;根据行号和列号计算键值
MOV B,#04H
MUL AB
ADD A,ROW
MOV VAL,A ;存键值

MOVC A,@A+DPTR ;要据键值查段码
MOV P2,A ;输出段码显示

LJMP LSCAN

DELAY: MOV R6,#20
D1: MOV R7,#250
DJNZ R7,$
DJNZ R6,D1
RET

TABLE: DB 00H,01H,02H,03H,04H,05H,06H,07H
DB 08H,09H,0AH,0BH,0CH,0DH,0EH,0FH

END
应该能看得懂 不是很难的

P3=0xfe;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;// 延时一下过掉前面5ms的抖动,再去读取数据
if(temp!=0xf0)
{
temp=P3; //到此正确接收键盘信息,并switch判断其值
switch(temp)
{
case 0xee:
key=1;
break;
case 0xde:
key=2;
break;
case 0xbe:
key=3;
break;
case 0x7e:
key=4;
break;
}
while(temp!=0xf0) //判断是否离开按键,离开了后再去读取下个........
{
temp=P3;
temp=temp&0xf0;
}
}
}
//到此第一行已经扫描完毕,接下来扫描第二行
P3=0xfd;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;// 延时一下过掉前面5ms的抖动,再去读取数据
if(temp!=0xf0)
{
temp=P3; //到此正确接收键盘信息,并switch判断其值
switch(temp)
{
case 0xed:
key=5;
break;
case 0xdd:
key=6;
break;
case 0xbd:
key=7;
break;
case 0x7d:
key=8;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
//第二行扫描完毕
P3=0xfb;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;// 延时一下过掉前面5ms的抖动,再去读取数据
if(temp!=0xf0)
{
temp=P3; //到此正确接收键盘信息,并switch判断其值
switch(temp)
{
case 0xeb:
key=9;
break;
case 0xdb:
key=10;
break;
case 0xbb:
key=11;
break;
case 0x7b:
key=12;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
//第三行扫描完毕
P3=0xf7;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;// 延时一下过掉前面5ms的抖动,再去读取数据
if(temp!=0xf0)
{
temp=P3; //到此正确接收键盘信息,并switch判断其值
switch(temp)
{
case 0xe7:
key=13;
break;
case 0xd7:
key=14;
break;
case 0xb7:
key=15;
break;
case 0x77:
key=16;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
//四行全比扫描完毕得到最重要的结果key
return key;
}


求单片机实现4×4键盘输入,并用LCD1602显示键盘输入的数字的程序
因为4×4的键盘在输入的过程中单片机可以直接利用ipl C去进行输入。

在手机里怎样设置键盘
1、Jovi输入法:呼出键盘--点击菜单图标查看;2、百度输入法定制版:呼出键盘--点击“du”图标查看;3、搜狗输入法定制版:呼出键盘--点击“S”图标选择功能设置。4、vivo输入法:进入设置--系统管理\/更多设置--输入法--vivo输入法中,设置部分功能开关。一、指的输入法切换方法,可以这样操作:1、进...

ipad基本功能和使用方法
在输入英文或中文时,只要在输入的文字后面连按两下“Space”空白键,就可以快速输入一个句号。(如果不喜欢这个功能,可以进入“设定”→“通用”→“键盘”→“句号快捷键”,将“句号快捷键”功能关闭即可)。10、将键盘分成两半儿 由于苹果平板电脑的屏幕尺寸比较大,双手拿着打字会比较费劲,尤其是手...

电脑键盘上的按键的具体作用
还是找了点哈,爱问知识人独家 回答^_^: 一、主键盘区 1、回车键(Enter) 回车键有两个,分别位于主键盘区和小键盘区的右侧。当我们从键盘输入命令或输入文本另一段的时候,一般都要按一下回车键。 2、大写字母锁定键(Caps Lock) 位于主键盘区第三排的最左边。主要功能是改变大小写字母的输入...

电脑键盘输入混乱怎么解决
电脑键盘输入混乱怎么解决 篇3 1、14英寸部分机台键盘上有NumLK按键,可以通过fn+NumLK开启或关闭数字小键盘。2、15英寸部分机台有小键盘区域,可以直接按下NumLK按键开启或关闭数字小键盘。3、部分键盘上没有标注NumLK按键,可通过fn+Insert开启或关闭数字小键盘。4、搭载Vivo键的机型(VivoBook14),...

怎么把平板的键盘用到笔记本电脑上
1、在ipad上下载百度输入法应用程序,并点击打开百度输入法。2、在打开的百度输入法键盘界面中,找到箭头所指的选项,并点击选择。3、之后即可将百度输入法的26位键盘更改成9键。3. 平板电脑键盘怎么开啊 一般在打开一个需要进行文字输入的软件,就能自动出现键盘呀!比如“备忘录”或微博、QQ什么的!

电脑键盘功能的用法
电脑零基础知识-鼠标和电脑键盘功能基础知识

键盘快捷键大全
详情请查看视频回答

电脑健盘按键每个功能与作用。
Enter键:回车键,英文是“输入”的意思。是用得最多的键,因而在键盘上设计成面积较大的键,像手枪的形状,便于用小指击键。主要作用是执行某一命令,在文字处理软件中是换行的作用。F1~F12键:功能键。英文Function,中文为“功能”的意思。在不同的软件中,起为其定义的相应功能的作用,也可以...

日语输入法用键盘切换平假名和片假名?
日语输入法 用键盘切换平假名和片假名有两种方法:一:第一种 打出平假名按f7就可以变成片假名,如果打出片假名按f6就可以变成平假名,而按f9变罗马字。但这是并不适用于所有的电脑操作。一般没有更改的系统,初始情况下是这样的操作。如果电脑使用的是微软自带的那个 Microsoft IME 的话,那么按ctrl...

盖州市13852618810: 利用单片机实现键盘输入的电路图和程序 -
靳苑丽珠: 假设你运用独立键盘检测原理实现上述功能,用弹性小按键一头接地,另一头接单片机引脚即可. 程序参考一下,实现功能:按键盘,蜂鸣器响,再按,蜂鸣器不响. #include<reg52.h> #defined uint unsigned int sbit key=P3^4;//定义小按键 ...

盖州市13852618810: 单片机键盘操作程序编写 -
靳苑丽珠: 试试如下程序:void keyscan() {if(key1 == 0) {delay(10);if(key1 == 0) {TR0 = 0;while(key1 == 0) delay(10);TR0 = 1;}}if(key2 == 0) {delay(10);if(key2 == 0) {while(key2 == 0);TR0 = 0;}}if(key3 == 0) {delay(10);if(key3 == 0) {while(...

盖州市13852618810: 简单的51单片机键盘C程序
靳苑丽珠: A|=B; 等价于 A=A|B;是先进行或运算,再把运算结果赋给A,之后的A已经不是原来的A了.第一个键值判断后,你就键值变量已经被赋予新的值了.如果正好按的是第一个键则能返回1,如果不是第一个键按下,但经过 if((keyvalue|=0xfb)!=0...

盖州市13852618810: 通过键盘往单片机中输入任意数字的C语言程序? -
靳苑丽珠: 我玩的pic相信51应该也差不多我整理一下发 #include unsigned char code table[]={0x3f,0x06,0x5b,0x4f, //01230x66,0x6d,0x7d,0x07, //45670x7f,0x6f,0x77,0x7c, //89ab0x39,0x5e,0x79,0x71}; //cdef unsigned char temp; unsigned char key; unsigned ...

盖州市13852618810: 51单片机键盘程序 -
靳苑丽珠: 你的问题是这样的你每次返回之前应该把相应的扫描线也置高 否则程序第二次执行的时候 就会扫描错误f(PinA==FALSE) PinA=TRUE; Pin2=TRUE; /////// return 2;}

盖州市13852618810: 单片机 数码管显示键盘输入 计算器程序 程序中 -
靳苑丽珠: uchar inkey() ///键定义 { uchar i,j=1,k; uchar code keytab[16]={0x81,0x41,0x21,0x11,0x82,0x42,0x22,0x12,0x84,0x44,0x24,0x14,0x88,0x48,0x28,0x18}; for(i=0;i<4;i++) { P1=~j; //将11111110赋给P1口;k=~P1; //将P1口的数值取反赋给k; k=k&...

盖州市13852618810: 单片机的键盘程序 -
靳苑丽珠: KD_KEY一定已经被定义为一个I/O端口了.像sbit KD_KEY Px^x然后这个端口一定接了一个按键到地.当键按下时此端口为低电平,KD_DEY=0,则!KD_KEY=1,条件满足,执行程序.所以这条语句可以判断按键是否按下.

盖州市13852618810: 51单片机 如何4*4矩阵键盘输入按键 继电器输出信号 -
靳苑丽珠: ........... Inter0_process() interrupt 2 //外部中断1 { Key_scan();//你的键盘扫描程序(中断服务程序),一旦触发中断,将运行至本段. } //主程序main() {........... ........... ........... EX1=1; //开中断一 P3.3 IT1=1; //下降沿触发 ET1=1; EA=1;........... ...........} 注:图中的键盘接法都是独立按键接发,矩阵键盘没有见过能直接触发中断的.

盖州市13852618810: AVR单片机按键程序 -
靳苑丽珠: 读输入的状态要用PIND 不知道你几个按键;假设你4个按键PD0 PD1 PD2 PD3 uchar key; DDRD=0x00; PORTD=0x00; key=PIND; key=key&0x0F;如果PD0 PD1同时按下key=0x03 if(key==0x03)

盖州市13852618810: 单片机矩阵键盘C程序 -
靳苑丽珠: //P2为你键盘 的IO口 unsigned char keyscan() { unsigned char temp,key; P2=0xf0; temp=P2; if(temp!=0xf0) { delay(10); if(temp!=0xf0) { temp|=0x0f; P2=temp; key=P2; while(P2!=temp)//松手检测 { P2=temp; } return key;//返回键码 } } }

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网