当前位置:首页 » 编程语言 » 扫描键盘c语言

扫描键盘c语言

发布时间: 2022-04-28 16:57:44

㈠ 求一个单片机4X4矩阵键盘扫描程序,c语言的。

淘bao 旺铺: 广州华电 单片机学习板 单片机外围学习模块/传感器模块
//4*4键盘检测程序,按下键后相应的代码显示在数码管上
#include<reg51.h>
sbit beep=P2^3;
sbit la=P2^6;
sbit wela=P2^7;
unsigned char i=100;
unsigned char j,k,temp,key;
void delay(unsigned char i)
{
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
display(unsigned char num)
{
P0=table[num];
la=1;
la=0;
P0=0xc0;
wela=1;
wela=0;
}
void main()
{
la=0;
wela=0;
while(1)
{
P3=0xfe;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
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=temp&0xf0;
beep=0;
}
beep=1;
display(key);
P1=0xfe;
}
}
P3=0xfd;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
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=temp&0xf0;
beep=0;
}
beep=1;
display(key);
}
}
P3=0xfb;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
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=temp&0xf0;
beep=0;
}
beep=1;
display(key);
}
}
P3=0xf7;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
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=temp&0xf0;
beep=0;
}
beep=1;
display(key);
}
}
}
}

㈡ 寻单片机“经典键盘”的扫描程序(要C语言的)

uchar keyscan()
{
uchar key,i,keyscan;
P3=0x3d; //准备读取P3.2~P3.5 51的I/0为准双向I/0口 作为输入是最好先将其置1
//读取接地按键值
if((P1&0x3d)!=0x3d){ //若无按键按下 P3.2~P3.5为高
delay(); //延时去抖动
if((P1&0x3d)!=0x3d){//判断哪个按键按下
key=P1&0x3d;
return key;
}
}

keyscan=0x3D;
for(i=0;i<4;i++){
P1=keyscan; //输出I/O口扫描 输出 判断
if(P1!=keyscan){ //读取I/O口,看输出扫P1.0~P1.5的值是否与扫描不同
key=P1&0x3D; //转换扫描码
return key;
}
keyscan=(keyscan<<1)|0x01; //逐行输出扫描 0
}
return 0;
}

㈢ c语言怎样实现键盘操作

在你的基础上改的
#include<stdio.h>
#include<stdlib.h>

#define LISTSIZE 100
#define ADD 10
typedef struct {
int *elem;
int length;
int listsize;
}List;//定义线性表的结构体
void SqList(List &L)
{

//int i;//C++中C程序的变量定义放在开始

L.elem=(int *)malloc(LISTSIZE*sizeof(int));
if(!L.elem) exit(0);
L.listsize=LISTSIZE;
//printf("请输入线性表长度:");
//scanf("%d",&L.length);
//printf("为线性表赋值:");
//for(i=0;i<=L.length-1;i++)
//scanf("%5d",&L.elem[i]);
L.length =0;//如果是初始化,那么长度就是0
}//初始化线性表

int InsertSq(List &L,int i,int e)
{
int *p=NULL, *q=NULL;//所有变量的定义都必须置前
if(i<0||i>L.length+1) return 0;
if(L.length>=L.listsize)
{
int *newbase;
newbase=(int *)realloc(L.elem,(L.listsize+ADD)*sizeof(int));
if(!newbase) exit(0);
L.elem=newbase;
L.listsize+=ADD;
}

q=&L.elem[i-1];
for(p=&L.elem[L.length-1];p>=q;--p)
*(p+1)=*p;
*q=e;
L.length++;
return 1;
}//在线性表的第i个元素之前插入元素e

void PrintList(List L)
{
printf("顺序表中的元素:\n");
for(int k=0;k<=L.length-1;k++)
printf("%5d",L.elem[k]);
printf("\n");
}

void main()
{

//void SqList(List &L);
//int InsertSq(List &L,int i,int e);使用之前已经定义了,可以不用函数说明
List L;
int i,e; //函数调用前,变量必须定义

SqList(L);
printf("输入顺序表中元素的个数:");
scanf("%d",&i);

printf("请输入元素:");
for(int j=1;j<=i;j++)
{
scanf("%d",&e);
InsertSq(L,j,e);
}

PrintList(L);
printf("输入插入的元素及其位置:");
scanf("%5d%5d",&e,&i);
InsertSq(L,i,e);
PrintList(L);
}

㈣ 怎么用C语言键盘扫描程序写入msp430单片机

我用的是看门狗定时器消抖 程序代码 附上 是高级的定时器消抖
#include<msp430x14x.h>
#include"UART.h"
#define OK 1
#define NO 0
typedef unsigned char uint8;
typedef unsigned int uint16;
void key_init()
{
#ifdef DEBUG
send_string("key board is initaled");
NEXT;
#endif
P1DIR|=(BIT7+BIT6+BIT5+BIT4);
}
unsigned char key_scan()
{
P1OUT&=~(BIT7+BIT6+BIT5+BIT4);
if((P1IN&0X0F)!=0X0F) return OK;//返回一个作为判断是否按下
else return NO;
}
unsigned char key_get()
{
uint8 temp1=0x80;
uint8 n=0;
for(n=0;n<4;n++)
{
P1OUT=0XF0;
P1OUT&=~temp1;//依次将输入给低 且只有一个为低
temp1>>=1;
if((P1IN&BIT0)==0) return (1+(n*4));
if((P1IN&BIT1)==0) return (2+(n*4));
if((P1IN&BIT2)==0) return (3+(n*4));
if((P1IN&BIT3)==0) return (4+(n*4));
}
return 0;
}

㈤ 一个c语言键盘扫描程序,如果按下 则加一 。不按下,则不变

#include "stdio.h"
main()
{
int i=0;
while(1)
{
getchar();
i++;
printf("%d \n",i);
}
}

㈥ C51 4*4键盘扫描程序(c语言)

键盘为4*4矩阵式连接,一共有16个按键。 工作原理为。P1端的低四位为列,高四位行。所先置低四位为低,高四位为高,当有按键按下时高四位就会有某位被拉低。只要判断高四位不为全高就说明有按键按下。判断有按键按下后就要判断是某位按下的,方法为,选将高四位的某一位置低。判断低四位是否有低电平出现。依次对高四位的每位置低并判断低四位出现的低电平。如高四位某位置低后低四某也有出现低电平。这样就能判断出低四位与高四位相连的位某位按键被按下了。通过定义好的编码就可以查出是某个按键被按下了,程序将按键值通过查表并发送到LED上显示。 6位LED为动态扫描方式 。先显示第一位,延时一定时间后在显示第二位依次类推。。。 共有17个按键。按下按键后数码管显示相应的数字,并左移一位。uchar kbscan(void) /*键扫描函数*/{uchar j; uchar sccode,recode; P2=0x0f; /*发0行扫描码*/ if((P2 & 0x0f)!= 0x0f) /*若有键按下*/ { dlms(); if((P2&0x0f)!= 0x0f) /*逐行扫描初值*/ { sccode=0xfe; for(j=4;j>0;j--) { while((sccode&0x10)!=0) { P2=sccode; /*输出行扫描码*/ if((P2&0xf0)!=0xf0) /*本行有键按下*/ { recode=(P2&0xf0)|0x0f; return((~sccode)+(~recode)); /*返回特征字节码*/ } else sccode=(sccode<<1)|0x01; /*行扫描码做移一位*/ } } } } return(0); /*无键按下,返回0值*/}参考链接: http://www.picavr.com/news/2008-07/6869.htm

㈦ 单片机键盘扫描C程序

#include<reg51.h>
#defineuintunsignedint
#defineucharunsignedchar
voiddelay(uintz);
sbitLE=P1^4;
ucharcodetable[]={
0xfc,0x60,0xda,0xf2,
0x66,0xb6,0xbe,0xe0,
0xfe,0xf6,0xee,0x3e,
0x9c,0x7a,0x9e,0x8e
};
voidmain()
{
uchartemp;
uintnum;
while(1)
{
P2=0xfe; //按键扫描第一行
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(10); //消抖
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0) //再次确认是否有键按下
{
temp=P2;
switch(temp)
{
case0xee:num=0;break;
case0xde:num=1;break;
case0xbe:num=2;break;
case0x7e:num=3;break;
}
while(temp!=0xf0) //松手检测
{
temp=P2;
temp=temp&0xf0;
}
delay(10); //消抖
LE=1;
P0=table[num];
LE=0;
P1=0x0f;
}
}


P2=0xfd; //按键扫描第二行
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(10);
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P2;
switch(temp)
{
case0xed:num=4;break;
case0xdd:num=5;break;
case0xbd:num=6;break;
case0x7d:num=7;break;
}
while(temp!=0xf0)
{
temp=P2;
temp=temp&0xf0;
}
delay(10);
LE=1;
P0=table[num];
LE=0;
P1=0x0f;
}
}


P2=0xfb; //按键扫描第三行
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(10);
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P2;
switch(temp)
{
case0xeb:num=8;break;
case0xdb:num=9;break;
case0xbb:num=10;break;
case0x7b:num=11;break;
}
while(temp!=0xf0)
{
temp=P2;
temp=temp&0xf0;
}
delay(10);
LE=1;
P0=table[num];
LE=0;
P1=0x0f;
}
}


P2=0xf7; //按键扫描第四行
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(10);
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P2;
switch(temp)
{
case0xe7:num=12;break;
case0xd7:num=13;break;
case0xb7:num=14;break;
case0x77:num=15;break;
}
while(temp!=0xf0)
{
temp=P2;
temp=temp&0xf0;
}
delay(10);
LE=1;
P0=table[num];
LE=0;
P1=0x0f;
}
}
}
}

voiddelay(uintz) //延时子函数
{
uintx;
for(z;z>0;z--)
for(x=1000;x>0;x--);
}

热点内容
左旋螺纹数控编程实例 发布:2025-05-16 00:11:49 浏览:9
安卓游戏旧版本从哪个软件下载 发布:2025-05-16 00:00:20 浏览:329
连接聚类算法 发布:2025-05-15 23:55:09 浏览:978
工资算法单休 发布:2025-05-15 23:52:30 浏览:819
超凡先锋配置不行怎么办 发布:2025-05-15 23:27:54 浏览:532
win7取消加密 发布:2025-05-15 23:26:37 浏览:472
不用internet打开ftp 发布:2025-05-15 23:06:00 浏览:154
sql字符串取数字 发布:2025-05-15 22:57:45 浏览:125
推荐编程课 发布:2025-05-15 22:34:12 浏览:618
表拒绝访问 发布:2025-05-15 22:29:37 浏览:978