51微控制器,用c語言,如何用矩陣鍵盤為變數char a賦

2021-09-10 12:11:49 字數 5806 閱讀 7570

1樓:煙火夜空

/***4×4矩陣按鍵構架——火柴天堂作品-20110921***/

/***源程式預設硬體環境:52微控制器,12mhz晶振,p1口 4×4矩陣鍵盤,詳細布局如下***/

/* 預設矩陣佈局,按鍵掃描方式1使用

p0 p1 p2 p3

│ │ │ │

p4─┼──┼──┼──┤ s1 s2 s3 s4

│ │ │ │

p5─┼──┼──┼──┤ s5 s6 s7 s8

│ │ │ │

p6─┼──┼──┼──┤ s9 s10 s11 s12

│ │ │ │

p7─┴──┴──┴──┘ s13 s14 s15 s16

*/#include"reg52.h" //包含52標頭檔案

#define true 1 //定義布林量'1':真

#define false 0 //定義布林量'0':假

#define uchar unsigned char //定義 無符號字元型資料 簡稱

#define uint unsigned int //定義 無符號整型資料 簡稱

#define keyport p1

#define key1value 1

#define key2value 2

//uchar code keycodelist[16]=;//按鍵**列表,按鍵掃描方式2使用,可按需要隨意修改順序

uchar keyscan() //按鍵掃描函式(方式1,需配合源程式矩陣佈局,返回值0表示無按鍵,1-16為對應按鍵),缺點:無法掃描組合鍵(同時按2個按鍵以上)

if(i==4) return 0; //若讀取出錯,返回無按鍵

temp_h=i; //將 按鍵行線數值 結果存於 temp_h

i=0;

while(i<4) //將 按鍵列線號 轉成數值

if(i==4) return 0; //若讀取出錯,返回無按鍵

temp_l=i; //將 按鍵列線號 結果存於 temp_l

scan_value=(temp_h<<2)+temp_l+1; //合併行列線數值,並轉成按鍵值,每條行線鍵值差為 4(temp_h<<2),按鍵值從1開始(+1,0為無按鍵 鍵值)

return scan_value; //返回 按鍵值}/*

uchar keyscan() //按鍵掃描函式(方式2,需配合 按鍵**列表 陣列 進行 鍵值 查詢,返回值0表示無按鍵,1-16為**表順序對應按鍵),缺點:無法掃描組合鍵

if(i==16) return 0; //若查詢出錯,或 行列線** 不在 按鍵**表中,返回無按鍵 鍵值0

return i+1; //返回按鍵值1~16(按鍵**列表中元素下標+1,0為無按鍵 鍵值)}*/

void keyresp() //按鍵響應函式

else keydownflag=false; //若掃描結果為假(即無按鍵),則清空按鍵按下標誌

if(keyreadyflag && !keydownflag) //若 按鍵已準備(響應),且無按鍵按下,(可知為 按下後又鬆手情況)

keyvalue=0; //清除按鍵值

keyreadyflag=false; //清空 按鍵準備(響應)標誌}}

void main() //主函式}

2樓:匿名使用者

首先給矩陣鍵盤的各個按鍵編碼(鍵碼),然後掃描鍵盤,檢測到按鍵按下用return返回鍵碼。

51微控制器如何用矩陣鍵盤輸入數值,最後賦值到一個變數上

3樓:匿名使用者

你好!!

你做矩陣鍵盤檢測的時候,會觸發相關的io口的狀態,通過分析io口,就能知道那個鍵按下;

定義一個變數,將按下的鍵值賦給變數就行了

4樓:

(1)用手

bai指頭按下矩陣鍵du

盤的0~9數字鍵即可輸入數zhi值。

(2)最後賦

dao值到一個變數上

unsigned char const str1="最後";

這樣就專把最後賦值到指標pt1上了屬

5樓:匿名使用者

uchar keyscan()

while(temp!=0xf0)}}

p3=0xfd;

temp=p3;

temp=temp&0xf0;

while(temp!=0xf0)

while(temp!=0xf0)}}

p3=0xfb;

temp=p3;

temp=temp&0xf0;

while(temp!=0xf0)

while(temp!=0xf0)}}

p3=0xf7;

temp=p3;

temp=temp&0xf0;

while(temp!=0xf0)

while(temp!=0xf0)}}

return num;}

c語言結構體中的一個char陣列怎麼賦值?

6樓:

常用兩種措施:

在宣告結構體變數時初始化,如——

//#include "stdafx.h"//if the vc++6.0, with this line.

#include "stdio.h"

struct stu;

int main(void);//這樣初始化printf("%d %s\n",s.x,s.name);

return 0;

}向陣列裡直接拷貝字串,如——

//#include "stdafx.h"//if the vc++6.0, with this line.

#include "stdio.h"

#include "string.h"

struct stu;

int main(void)

7樓:凌亂心扉

(1)用字元常量逐個初始化陣列。例如:

char a[8]=;

把8個字元依次分別賦給c[0]~c[7]這8個元素。

如果在定義字元陣列時不進行初始化,則陣列中各元素的值是不可預料的。如果花括號中提供的初值個數(即字元個數)大於陣列長度,則出現語法錯誤。

如果初值個數小於陣列長度,則只將這些字元賦給陣列中前面那些元素,其餘的元素自動定為空字元(即'\0')。

如果提供的初值個數與預定的陣列長度相同,在定義時可以省略陣列長度,系統會自動根據初值個數確定陣列長度。

例如:char c=;

這時c陣列的長度自動定為9。也可以定義和初始化一個二維字元陣列,例如:

char diamond[5][5]=,,,

,};用它代表一個菱形的平面圖形。

(2)字串常量初始化陣列。例如:

char c=;

可寫為:char c=;

或去掉{}寫為:char c="c program";

注意:此時陣列c的長度不是9,而是10。因為字串常量的最後由系統加上一個'\0'。上面的初始化與下面的初始化等價。

char c=;

其定義的一般形式是:char陣列名[資料長度]

例如:char c[10];

c[0]='i';c[1]='';c[2]='l';c[3]='o';c[4]='v';c[5]='e';c[6]='';c[7]='y';c[8]='o';c[9]='u';

以上定義了c為字元陣列,包含10個元素。

由於字元型資料是以整數形式(ascii**)存放的,因此也可以用整型陣列來存放字元資料,例如:

int c[10];

但這時每個陣列元素佔2個位元組的記憶體單元,浪費儲存空間。

字元陣列也可以是二維或多維陣列,例如:

char c[5][10];

即為二維字元陣列。

初始化字元陣列的初始化與數值型陣列初始化沒有本質區別。但它除了可以逐個給陣列元素賦予字元外,也可以直接用字串對其初始化。

輸入輸出

字元陣列的輸入

(1)用getchar()或scanf()的'%c'格式符對陣列進行字元賦值。例如,對於陣列a[10]:用getchar()賦值:

for(i=0;i<10;i++)

a=getchar();

用scanf()賦值:

for(i=0;i<10;i++)

scanf("%c",&a);

(2)用scanf()的'%s'格式對陣列賦值。還是對於陣列a[10]:

scanf("%s",a);

或scanf("%s「,&a[0]);

輸入」c program「並回車時,a陣列會自動包含一個以」\0「結尾的字串」c program「。

字元陣列的輸出

(1)用putchar()或printf()的『%c』格式符對陣列進行字元賦值。例如,對於陣列a[10]:用putchar()賦值:

for(i=0;i<10;i++)

a=putchar();

用printf()賦值:

for(i=0;i<10;i++)

printf("%c",a);

輸出結果為:

c program

(2)用printf()的'%s'格式對陣列賦值。還是對於陣列a[10];

printf("%s",a);

輸出結果為:

c program

8樓:禮浦業雲韶

好吧,比如:

struct

emu=

那麼對char

ch賦值可以

for(j=0;j<=49;j++)

emu.ch[j]=j;

或者一個字元一個字元的賦值,比如emu.ch[0]='a';

對字串的賦值不能直接等於,要用函式strcpy,

9樓:匿名使用者

st.name="123"; 非法,常量字串不能直接賦值給字元陣列,因為st.name 地址是確定的,不能再改了。

char name[10]="123";可以的,定義時,進行初始化字元陣列。

10樓:匿名使用者

可以用string.h,標頭檔案裡面的strcpy()函式,拷貝

51微控制器(c語言) 怎麼把一個變數的某個位分離出來(假如定義一個char型變數a,我想把a的5

11樓:星遊空情

定義一個掩碼,讓你的變數a和掩碼做與運算就行了,比如你想把低4位分離出來,掩碼就是0x0f,假如分離後的變數是b,那麼b=a&0x0f,低5位相應的掩碼就是0x1f,

12樓:匿名使用者

定義一個位標誌,用位操作把8位資料中需要的取出來賦值給標誌位。

用c語言編寫一個程式,從鍵盤上輸入兩個字元給字元變數a,b,並輸出變數a,b的值。

13樓:a羅網天下

程式**如下:

#include //編譯預處理命令

int main(int argc, char *ar**) //主函式,字元的宣告

擴充套件知識:

matlab變數的特點:不需事先宣告,也不需指定變數型別,matlab自動根據所賦予變數的值或對變數所進行的操作來確定變數的型別;在賦值過程中,如果變數已經存在,matlab會用新值代替舊值,並以新的變數型別代替舊的變數型別。

變數的預設型別為double。

在51微控制器c語言程式設計中如何用sbit建立陣列

首先申明一bai下 新手一du枚 我也遇到同zhi樣的問題 說 dao個比較笨的辦法 用的時候專直屬 接給p1賦值 微控制器初始時所有i o口都為高電平,比如你想要floorled1 0 你就寫p1 0xfe floorled2 0 你就寫p1 0xfd floorled1 0 floorled2 ...

微控制器c語言延時程式,51微控制器C語言中delay函式是怎麼定義和使用的?

用定時器 可以衍生出定時中斷和標記迴圈查詢法 還有直接用軟體語句硬性延時 這個需要實際測試和調校過才比較準 但不管是哪一種,其最終 還是要依據微控制器工作頻率,具體的需要解釋太多,你還是看看對應微控制器的datasheet的各模組說明吧 可以用for迴圈延時 但是精度不夠 最好用定時器中斷 比如用定...

51微控制器c語言裡nop函式怎麼用

在單片bai機c語言中直接調du用庫函式即可,具體如下 zhi include 宣告瞭void nop void nop 產生一條 daonop指令。該函式的內作用 對於延時容很短的,要求在us級的,採用 nop 函式,這個函式相當彙編nop指令,延時幾微秒。nop指令為單週期指令,可由晶振頻率算出...