導航:首頁 > 操作系統 > 單片機怎麼將鍵值顯示

單片機怎麼將鍵值顯示

發布時間: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();
}
}

閱讀全文

與單片機怎麼將鍵值顯示相關的資料

熱點內容
怎麼在安卓手機登繪旅人 瀏覽: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
金斗雲伺服器 瀏覽:447