chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

單片機(jī)鍵盤輸入的程序

Wildesbeast ? 來源:21IC ? 作者:21IC ? 2020-06-21 11:38 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

這是讀取鍵盤的子程序

主要內(nèi)容為:如何定義位,如何得到按鍵狀態(tài),防止鍵盤干擾的方法

以及如何處理讀入的鍵值

思路:首先在某一引腳輸出一個(gè)電平,然后讀入引腳的電平,如果剛好相反

那么可能有按鍵發(fā)生,但是不排除干擾,為了防止干擾,需要軟件延時(shí)20ms

消除干擾,然后,等待用戶釋放,否則,可能重復(fù)的到某種結(jié)果,發(fā)生意外情況

應(yīng)該說鍵盤輸入是單片機(jī)外部指令輸入的重要途徑,因此如何設(shè)計(jì)鍵盤以及鍵盤的工作原理、讀鍵盤的方法、鍵盤的抗干擾設(shè)計(jì)等在單電能機(jī)系統(tǒng)設(shè)計(jì)中占有重要地位。這個(gè)例子在系統(tǒng)硬件的基礎(chǔ)上設(shè)計(jì)了軟件查詢程序、軟件延時(shí)程序(防止干擾),大致講述了一種查詢式鍵盤的工作原理與讀取方式。

下面是匯編語言寫的單片機(jī)鍵盤輸入程序

**************************************************

led1 bit p1.0 ;LED 顯示位定義

led2 bit p1.1

led3 bit p1.2

led4 bit p1.3

led5 bit p1.4

led6 bit p1.5

led7 bit p1.6

led8 bit p1.7

s1 bit p0.0 ;數(shù)碼管位定義

s2 bit p0.1

s3 bit p0.2

s4 bit p0.3

s5 bit p0.4

s6 bit p0.5

s7 bit p0.6

s8 bit p0.7

led_data equ p2 ;數(shù)碼管顯示數(shù)據(jù)定義

key1 bit p3.5 ;按鍵引腳定義

key2 bit p3.6 ;

key3 bit p3.7 ;

key equ 46h ;按鍵寄存單元

org 00h

jmp main

org 030h

main:mov sp,#30h ;首先定義

lcall REST;初始化子程序

lp:lcall pro_key ;調(diào)用鍵盤查詢子程序

lcall KEYPR ;用來顯示所查詢到的鍵值

jmp lp;反復(fù)調(diào)用,不斷查詢

REST:

mov a,#00h

mov b,#00h

mov p0,#0

mov p1,0ffh ;

mov p2,#0

mov key,#00h

mov p2,#255

clr beep

RET

KEYPR:

mov a,key ;鍵值在累加器KEY中

jz PROEND ;如果 A= 0,表示沒有按鍵,返回

cjne a,#1,k1;A= 1 ,用戶按了第一個(gè)鍵

mov a,#1 ;處理 A = 1的情況

mov dptr,#tab_nu ;查表

movc a,@a+dptr

mov led_data,a ;顯示 “1”

setb s1 ;在第一位

clr s2;其余兩位不顯示

clr s3

jmp PROEND;處理完成,子程序返回

;以下分別處理KEY = 2,3 的情況

k1:cjne a,#2,k2

mov a,#2

mov dptr,#tab_nu

movc a,@a+dptr

mov led_data,a

clr s1

setb s2

clr s3

jmp PROEND

k2:cjne a,#3, PROEND

mov a,#3

mov dptr,#tab_nu

movc a,@a+dptr

mov led_data,a

clr s1

clr s2

setb s3

PROEND:ret

**** 本內(nèi)容跟帖回復(fù)才可瀏覽 *****

;************ 定時(shí)20 ms *************

delay20ms: push psw ;保存原來的寄存器單元

clr psw.3;設(shè)置新的寄存器

clr psw.4;

mov r0,#2;延時(shí)參數(shù)1

mov r1,#250;延時(shí)參數(shù)2

mov r2,#2;延時(shí)參數(shù)3

dl1:djnz r0,dl1 ;延時(shí)循環(huán)1

mov r0,#250 ;重新設(shè)置循環(huán)數(shù)據(jù)

dl2:djnz r1,dl1 ;開始第二道循環(huán)

mov r0,#240;

mov r1,#248;

dl3:djnz r2,dl1;第三道循環(huán)

nop;修正定時(shí)精度

pop psw ;恢復(fù)原來的寄存器組

ret ;返回

;*********** end *******************

;這是數(shù)字顯示表格,其中 帶小數(shù)點(diǎn)的數(shù)字比不帶小數(shù)點(diǎn)的數(shù)字大16

; 比如 0 的顯示代碼為 0;那么 0.的顯示代碼為 16;如此類推

tab_nu:

db 0c0h, 0f9h, 0a4h, 0b0h, 99h , 92h , 82h, 0f8h ;數(shù)字0-7 不帶小數(shù)點(diǎn)代碼

db 80h , 90h, 88h , 83h , 0c6h, 0a1h, 86h, 8eh ;數(shù)字8-f 不帶小數(shù)點(diǎn)代碼

db 40h , 79h, 24h , 30h , 19h , 12h , 02h, 78h ;數(shù)字0-7 帶小數(shù)點(diǎn)代碼

db 00h , 10h, 08h , 03h , 46h , 21h , 06h, 0eh ;數(shù)字8-f 帶小數(shù)點(diǎn)代碼

end;告訴編譯器本程序到此結(jié)束,一定需要加上,否則編譯通不過。

;c語言

**************************************************

//按不同的按鍵,會(huì)顯示不同的結(jié)果

#include 《8051.h》

#define uchar unsigned char

#define key1 P3_4 //鍵盤定義

#define key2 P3_5

#define key3 P3_6

//****************************************************************************

void delay(uchar times);

void display(uchar disseg,uchar disdata);

uchar keyb();

// 這里定義的是數(shù)碼管對(duì)應(yīng)的字符字根

code uchar disbuf_u[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,

0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,

0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,

0x00,0x10,0x08,0x03,0x46,0x21,0x06,0x0e};

// ***************************************************************************

uchar keybuf;

void main()

{

uchar keym = 0; //鍵盤返回結(jié)果的緩沖區(qū)

keybuf = 0;

P1 = 255; //關(guān)閉LED顯示

P0 = 0; //關(guān)閉數(shù)碼顯示

P2 = 255; //

while(1) //設(shè)置一個(gè)無限制循環(huán)

{

keym = keyb(); //得到按鍵結(jié)果

if(keym) keybuf = keym; //如果返回有效的按鍵結(jié)果才保存

display(keybuf-1,keybuf); //在相應(yīng)的位置顯示返回的結(jié)果

}

}

//*****************************************************************************

//下面是延時(shí)程序。具體的延時(shí)時(shí)間不能通過表面程序看出,(為什么?)

//如果我們需要一個(gè)精密的延時(shí)程序,那么我們可以采用內(nèi)嵌匯編代碼的方式

void delay(uchar times)

{

int t=100; //延時(shí)倍數(shù)

uchar i=times;

for(;i!=0;i--)

{for(;t!=0;t--){}}

}

//這里是顯示子程序,入口參數(shù)為

// disseg -》 位選 可選范圍 0-7 一共8個(gè)數(shù)碼管

// disdata -》 段選 可選范圍 0-31 一個(gè)32個(gè)字符

// 段選 0-15 16個(gè)字符 為 “0”-》“F”

// 段選 16-31 16個(gè)字符 為 “0.”-》“F.”

void display(uchar disseg,uchar disdata)

{

uchar dataf;

if(disseg 《 8) //只有當(dāng)要顯示的位數(shù)有效,才顯示。否則,不顯示

{

dataf = 1;

while(disseg)

{

dataf 《《= 1;

disseg--;

}

P0 = dataf;

P2 = disbuf_u[disdata];

}

else{P0=0,P2=255;} //關(guān)閉數(shù)碼管顯示

}

uchar keyb()

{

uchar key,keytmp;

key1 = 1; //將輸出線拉高

key2 = 1;

key3 = 1;

key = P3 ; //讀回來

key = key & 0xf0; //獲得鍵盤結(jié)果

if(key == 112 ) return 0; //如果用戶沒有按鍵返回 0

else

{

keytmp = key;

delay(1); //判斷是不是干擾

key = P3 & 0xf0;

if (key != keytmp ) return 0; //是干擾,返回 0

else //不是干擾,等待用戶釋放按鍵

{

do{

key1 = 1; //輸出拉高

key2 = 1;

key3 = 1;

key = P3 & 0xf0; //讀回來

P1_0 = ~P1_0; //如果用戶不釋放,閃爍 p1.0

}while(key != 112 ); //等待用戶釋放

P1_0 = 1; //用戶釋放以后,清除p1.0指示燈

switch(keytmp)

{

case 96: return 3;//返回用戶按鍵結(jié)果

case 80: return 2;

case 48: return 1;

}

}

}

}

//

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • led
    led
    +關(guān)注

    關(guān)注

    243

    文章

    24329

    瀏覽量

    683801
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6071

    文章

    45259

    瀏覽量

    660170
  • 鍵盤
    +關(guān)注

    關(guān)注

    4

    文章

    868

    瀏覽量

    41360
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    單片機(jī)燒錄原理是怎樣的?輝芒微單片機(jī)燒錄程序詳細(xì)步驟講解

    燒錄(Programming)就是把 .hex/.bin 文件里的機(jī)器碼搬運(yùn)進(jìn)單片機(jī)片內(nèi) Flash 的過程。輝芒微(FMD)單片機(jī)內(nèi)部有一塊 自舉 BootROM,上電時(shí)會(huì)先跑這段程序;如果檢測
    的頭像 發(fā)表于 09-17 16:14 ?533次閱讀
    <b class='flag-5'>單片機(jī)</b>燒錄原理是怎樣的?輝芒微<b class='flag-5'>單片機(jī)</b>燒錄<b class='flag-5'>程序</b>詳細(xì)步驟講解

    單片機(jī)的儲(chǔ)存優(yōu)點(diǎn)是什么

    單片機(jī)作為嵌入式系統(tǒng)的核心,其儲(chǔ)存系統(tǒng)是實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)與程序運(yùn)行的關(guān)鍵部分。與獨(dú)立存儲(chǔ)芯片相比,單片機(jī)的儲(chǔ)存單元在集成度、功耗、可靠性等方面具備獨(dú)特優(yōu)勢(shì),這些優(yōu)點(diǎn)使其能適應(yīng)從消費(fèi)電子到工業(yè)控制的多樣化
    的頭像 發(fā)表于 07-31 10:09 ?389次閱讀

    怎么測單片機(jī)系統(tǒng)頻率

    單片機(jī)系統(tǒng)頻率是指單片機(jī)工作時(shí)的時(shí)鐘頻率,它直接影響單片機(jī)的運(yùn)行速度和處理能力,準(zhǔn)確測量系統(tǒng)頻率對(duì)單片機(jī)應(yīng)用開發(fā)、程序調(diào)試和性能優(yōu)化具有重要
    的頭像 發(fā)表于 07-25 11:39 ?285次閱讀

    單片機(jī)怎么驅(qū)動(dòng)電機(jī)?

    在各類自動(dòng)化設(shè)備和智能裝置中,電機(jī)是重要的執(zhí)行部件,而單片機(jī)作為控制核心,需要通過特定的方式驅(qū)動(dòng)電機(jī)運(yùn)轉(zhuǎn)。單片機(jī)驅(qū)動(dòng)電機(jī)并非直接連接即可,而是要根據(jù)電機(jī)類型和功率,搭配合適的驅(qū)動(dòng)電路,才能實(shí)現(xiàn)穩(wěn)定
    的頭像 發(fā)表于 07-25 09:31 ?287次閱讀

    單片機(jī)是怎么控制的

    單片機(jī)作為電子系統(tǒng)的控制核心,通過接收外部信號(hào)、執(zhí)行預(yù)設(shè)程序、驅(qū)動(dòng)外部設(shè)備的方式實(shí)現(xiàn)控制功能,其控制過程涉及信號(hào)輸入、數(shù)據(jù)處理和指令輸出三個(gè)關(guān)鍵環(huán)節(jié),每個(gè)環(huán)節(jié)的協(xié)同配合決定了整體控制效果。 信號(hào)
    的頭像 發(fā)表于 07-23 13:59 ?260次閱讀

    單片機(jī)怎么燒程序

    單片機(jī)程序是將編寫好的程序代碼寫入單片機(jī)內(nèi)部存儲(chǔ)單元,讓單片機(jī)按照預(yù)設(shè)邏輯工作的過程,是單片機(jī)
    的頭像 發(fā)表于 07-23 11:47 ?465次閱讀

    STC單片機(jī)范例程序

    電子發(fā)燒友網(wǎng)站提供《STC單片機(jī)范例程序.zip》資料免費(fèi)下載
    發(fā)表于 06-04 16:27 ?7次下載

    2.4寸TFT彩屏配套測試程序-51單片機(jī)

    如題,2.4寸TFT彩屏配套測試程序-51單片機(jī)。
    發(fā)表于 06-04 16:26 ?0次下載

    單片機(jī)和伺服有什么區(qū)別

    單片機(jī)和伺服的區(qū)別 單片機(jī)(Microcontroller)和伺服(Servo System)是兩種完全不同的技術(shù)概念,分別屬于 控制系統(tǒng)硬件 和 運(yùn)動(dòng)控制執(zhí)行系統(tǒng) 。以下是它們的詳細(xì)對(duì)比和區(qū)別
    的頭像 發(fā)表于 05-26 09:18 ?449次閱讀

    C51單片機(jī)及C語言知識(shí)點(diǎn)必備秘籍

    定時(shí)/計(jì)數(shù)器實(shí)驗(yàn) 21:單片機(jī)串行口介紹 系列四 22:單片機(jī)串行口通信程序設(shè)計(jì) 23:LED 數(shù)碼管靜態(tài)顯示接口與編 24:動(dòng)態(tài)掃描顯示接口電路及程序 25:
    發(fā)表于 05-15 14:00

    單片機(jī)Debug工具性能對(duì)比 單片機(jī)調(diào)試常用命令

    單片機(jī)(Microcontroller Unit, MCU)調(diào)試是嵌入式開發(fā)中的一個(gè)重要環(huán)節(jié),它幫助開發(fā)者發(fā)現(xiàn)和修復(fù)代碼中的錯(cuò)誤,優(yōu)化程序性能。不同的單片機(jī)和開發(fā)環(huán)境可能使用不同的調(diào)試工具和命令
    的頭像 發(fā)表于 12-19 09:56 ?1932次閱讀

    單片機(jī)編程語言有哪些選擇

    單片機(jī)(Microcontroller Unit,MCU)編程是指為單片機(jī)編寫程序的過程,這些程序控制單片機(jī)的行為和功能。單片機(jī)廣泛應(yīng)用于嵌
    的頭像 發(fā)表于 11-01 14:13 ?3313次閱讀

    單片機(jī)調(diào)試常見問題與解決方法

    單片機(jī)調(diào)試是嵌入式系統(tǒng)開發(fā)中的一個(gè)重要環(huán)節(jié),它涉及到對(duì)單片機(jī)程序的測試和優(yōu)化,以確保系統(tǒng)能夠正常工作。在調(diào)試過程中,開發(fā)者可能會(huì)遇到各種問題。 1. 程序無法燒錄到
    的頭像 發(fā)表于 11-01 14:11 ?3559次閱讀

    仿真設(shè)計(jì)|基于51單片機(jī)的傳送帶計(jì)數(shù)器

    控制光電傳感器工作;(3)用LCD1602顯示傳送帶通過產(chǎn)品的數(shù)量,顯示終值與當(dāng)前計(jì)數(shù)值;(4)通過矩陣鍵盤輸入數(shù)字設(shè)置計(jì)數(shù)終止值,點(diǎn)擊確定退出設(shè)置;矩陣鍵盤還可實(shí)現(xiàn)設(shè)置數(shù)值清零、計(jì)數(shù)值清零等功能;當(dāng)
    的頭像 發(fā)表于 10-22 14:12 ?846次閱讀
    仿真設(shè)計(jì)|基于51<b class='flag-5'>單片機(jī)</b>的傳送帶計(jì)數(shù)器

    單片機(jī)怎么寫入程序

    單片機(jī)(Microcontroller Unit,MCU)是一種集成電路芯片,它將計(jì)算機(jī)的CPU、存儲(chǔ)器、輸入/輸出接口等功能集成在一個(gè)芯片上。單片機(jī)廣泛應(yīng)用于嵌入式系統(tǒng)和物聯(lián)網(wǎng)設(shè)備中。編寫
    的頭像 發(fā)表于 10-21 11:21 ?3029次閱讀