當前位置:首頁 » 編程語言 » 掃描鍵盤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--);
}

熱點內容
c語言跳出死循環 發布:2025-05-15 20:06:04 瀏覽:823
a19處理器相當於安卓哪個水平 發布:2025-05-15 20:05:29 瀏覽:638
榮耀9i安卓強行關機按哪個鍵 發布:2025-05-15 20:00:32 瀏覽:750
密碼鎖寫什麼最好 發布:2025-05-15 19:05:31 瀏覽:782
5的源碼是 發布:2025-05-15 19:04:07 瀏覽:719
c語言創建的源文件 發布:2025-05-15 18:54:08 瀏覽:611
3個數字密碼鎖有多少種 發布:2025-05-15 18:49:48 瀏覽:684
壓縮包手機打開 發布:2025-05-15 18:37:34 瀏覽:217
安卓取消耳機模式怎麼取消 發布:2025-05-15 18:24:24 瀏覽:59
氣球怎麼解壓視頻 發布:2025-05-15 18:20:00 瀏覽:783