久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 18881|回復: 1
收起左側

單片機入門課堂實例:數(shù)碼管顯示4x4矩陣鍵盤的鍵號(仿真+代碼)

[復制鏈接]
ID:452950 發(fā)表于 2018-12-25 10:11 | 顯示全部樓層 |閱讀模式
目錄
數(shù)碼管顯示4x4矩陣鍵盤的鍵號              2
摘要              2
    關鍵詞              2
第一章 硬件              2
AT89C51              2
4*4鍵盤              6
第二章 軟件              9
    KEIL4              9
   匯編程序              10
   Proteus              15
   仿真電路圖              17
第三章 實物              17
   材料              17
   實物展示              18
課程設計心得              19
參考文獻              20
摘要:1、設計要求:單片機的p1口的p1.0-p1.7連接4x4矩陣鍵盤,p0口控制一只數(shù)碼管,當4x4矩陣鍵盤中的某一按鍵按下時,數(shù)碼管上顯示對應的鍵號。例如,1號鍵按下時,數(shù)碼管顯示“1”;九號鍵按下時,數(shù)碼管顯示“9”,等等。原理說明:本設計的關鍵點是如何進行鍵盤掃描,并計算出鍵號,然后把鍵號送數(shù)碼管顯示。

4*4矩陣式鍵盤       矩陣式鍵盤(或者叫行列式鍵盤)常應用在按鍵數(shù)量比較多的系統(tǒng)之中。這種鍵盤由行線和列線組成,按鍵設置在行、列結構的交叉點上,行、列線分別接在按鍵開關的兩端。行列式鍵盤可分為非編碼鍵盤和編碼鍵盤兩大類。編碼鍵盤內(nèi)部設有鍵盤編碼器,被按下鍵的鍵號由鍵盤編碼器直接給出,同時具有防抖和解決重鍵的功能。非編碼鍵盤通常采用軟件的方法,逐行逐列檢查鍵盤狀態(tài),當有鍵按下時,通過計算或查表的方法獲取該鍵的鍵值,通常,計算機通過程序控制對鍵盤掃描,從而獲取鍵值,根據(jù)計算機掃描的方法可以分為定時掃描法和中斷掃描法兩種。  本系統(tǒng)中的4*4矩陣式鍵盤結構簡單,按鍵數(shù)較少,采用非編碼式鍵盤,當有鍵按下時,由單片機通過程序掃描確定鍵值,并將獲得的鍵值通過LED數(shù)碼管顯示出來。鍵盤掃描原理 :本設計采用中斷式掃描法,這樣可以節(jié)約單片機開銷,提高單片機工作效率,使得單片機在沒有鍵盤輸入時可以處理其他工作,其具體工作過程為:  在沒有鍵按下時矩陣鍵盤行線接高電平,列線接低電平,當某個鍵被按下時,該按鍵所在行線電位被拉低,觸發(fā)單片機的外部中斷INT0,進入中斷子程序,在中斷程序中,單片機對矩陣鍵盤進行掃描以確定按下的鍵值,掃描過程如下:1、檢測行線電平,確定是否有按鍵被按下;2、延時去抖動;  [7]3、重新確認是否有按鍵被按下,若有,掃描鍵值,若沒有,返回主程序;4、掃描鍵值,首先行線接高電平,列線接低電平,對行線電平進行檢測, 以確定按下的鍵所在的行; 5、行線接低電平,列線接高點平,對列線電平進行檢測,確定按下的鍵所 在的列; 6、將掃描所得的按鍵值送入LED數(shù)碼管顯示。LED數(shù)碼管 本設計中使用的是七段共陰極LED數(shù)碼管。  如下圖所示為七段共陰極LED顯示器件的結構及外形圖。七段LED顯示器件就是將7個發(fā)光二極管按一定的方式組合在一起,如下圖所示。下表給出了共陽極7段LED顯示器件所能顯示的部分字符與7段控制顯示代碼的對應關系  下表給出了共陽段LED顯示器件所能顯示的部分字符與7段控制顯示代碼的對應關系
顯示字符
控制顯示代碼(十[8]六進制)
顯示字符
控制顯示代碼(十六進制)
1
F9H
A
88H
2
A4H
B
83H
3
B0H
C
C6H
4
99H
D
A1H
5
92H
E
86H
6
82H
F
8EH
7
F8H
不顯示
FFH
8
80H


9
90H


0
C0H


在本設計中,4*4鍵盤共有16個鍵,對其編號0~9,A~F,所以用一個7段數(shù)碼管靜態(tài)顯示即可滿足即時顯示按鍵信息的要求。所謂靜態(tài)顯示,就是當顯示器件顯示某個字符時,相[9]應的顯示段(發(fā)光二級管)恒定地導通或截止,直到顯示另一個字符為止。這種顯示方式顯示一個字符時,只需要微處理器送一次代碼,因此占用機時少,而且顯示穩(wěn)定可靠,其缺點是,使用元器件相對較多,且線路比較復雜,相對而言成本較高,比較適合顯示位數(shù)較少的情況。第二章 軟件部分KeilKeil C51是美國Keil Software公司出品的51系列兼容單片機C語言軟件開發(fā)系統(tǒng),與匯編相比,C語言在功能上、結構性、可讀性、可維護性上有明顯的優(yōu)勢,因而易學易用。用過匯編語言后再使用C來開發(fā),體會更加深刻。Keil C51軟件提供豐富的庫函數(shù)和功能強大的集成開發(fā)調(diào)試工具,全Windows界面,并將這些部分組合在一起。其方便易用的集成環(huán)境、強大的軟件仿真調(diào)試工具也會令你事半功倍。Keil C51生成的目標代碼效率非常之高,多數(shù)語句生成的匯編代碼很緊湊,容易理解。在開發(fā)大型軟件時更能體現(xiàn)高級語言的優(yōu)勢。  系統(tǒng)概述  :Keil C51軟件提供豐富的庫函數(shù)和功能強大的集成開發(fā)調(diào)試工具,全Windows界面。另外重要的一點,只要看一下編譯后生成的匯編代碼,就能體會到Keil C51生成的目標代碼效率非常之高,多數(shù)語句生成的匯編代碼很緊湊,容易理解。在開發(fā)大型軟件時更能體現(xiàn)高級語言的優(yōu)勢。 Keil C51單片機軟件開發(fā)系統(tǒng)的整體結構 C51工具包的整體結構,uVision與Ishell分別是C51 for Windows和for Dos的集成開發(fā)環(huán)境(IDE),可以完成編輯、編譯、連接、調(diào)試、仿真等整個開發(fā)流程。開發(fā)人員可用IDE本身或其它編輯器編輯C或匯編源文件。然后分別由C51及C51編譯器編譯生成目[10]標文件(.OBJ)。目標文件可由LIB51創(chuàng)建生成庫文件,也可以與庫文件一起經(jīng)L51連接定位生成絕對目標文件(.ABS)。ABS文件由OH51轉換成標準的Hex文件,以供調(diào)試器dScope51或tScope51使用進行源代碼級調(diào)試,也可由仿真器使用直接對目標板進行調(diào)試,也可以直接寫入程序存貯器如EPROM中。使用獨立的Keil仿真器時,注意事項  仿真器標配11.0592MHz的晶振,但用戶可以在仿真器上的晶振插孔中換插其他頻率的晶振。仿真器上的復位按鈕只復位仿真芯片,不復位目標系統(tǒng)。  仿真芯片的31腳(/EA)已接至高電平,所以仿真時只能使用片內(nèi)ROM,不能使用片外ROM;但仿真器外引插針中的31腳并不與仿真芯片的31腳相連,故該仿真器仍可插入到擴展有外部ROM(其CPU的/EA引腳接至低電平)的目標系統(tǒng)中使用。

匯編程序如下:
scan_code EQU 30H
          ORG 0000H
                              JMP start
                              ORG 0030H
start:  
          MOV P0,#0FFH ;初始化p0口,使輸出無顯示
loop:                                                            ; 循環(huán)調(diào)用read—key獲取鍵盤信息,若鍵盤按下,
         CALL read_[11]key              ; 則用R7返回鍵值信息
         CJNE R7,#0FFH,next              ; 若R7返回值不為0xff,則調(diào)用顯示函數(shù)
                              JMP loop
next:                                                                          ;顯示程序
          MOV A,R7
                              MOV DPTR,#disp_code
                            MOVC A,@A+DPTR
                              MOV P0,A
                              JMP loop
read_key:
          MOV scan_code,#7FH
                              MOV P1,#0FH
                              MOV A,P1
                              MOV R7,#0FFH
                            CJNE A,#0FH,wait_key   ;鍵盤按下則p1的值會改變
                              JMP end_key
wait_key:[12]
   CALL delay_10ms   ;延時10ms,若p1口仍右鍵按下,則跳到scan—key
                              MOV A,P1
                              MOV R7,#0FFH
                              MOV R6,#4
                            CJNE A,#0FH,scan_key
                              JMP end_key
scan_key:
          MOV P1,scan_code       ;將0x7f循環(huán)右移并賦給P1
                              MOV A,P1
                            CJNE A,scan_code,get_key;p1的值改變則確定出其行數(shù)
                               RR A
                              MOV scan_code,A
                            DJNZ R6,scan_key
                              JMP end_key
get_key:
   ;       MOV P1,#0FH
              ;                MOV R1,P1
              ;              CJNE R1,#0FH,$[13]
                              MOV R7,#4
get_key0:
          JNB ACC.0,add_r6;移位循環(huán)判斷最低位,為0則確定其列數(shù)
                               RR A
                            DJNZ R7,get_key0
                              MOV R7,#0FFH
                              JMP end_key
add_r6:
    DEC R6 ;從第0個鍵盤數(shù)起,數(shù)滿(R6-1)*4個鍵盤,再加上第R6行
              MOV A,R6      ;的列數(shù)R7-1,便得第幾個鍵盤按下
                              MOV B,#4
                              MUL AB
                              DEC R7
                              ADD A,R7
                              MOV R7,A
end_key:
          RET[14]
delay_10ms:
          MOV R7,#10
delay0:
          MOV R6,#0FAH
delay1:
          NOP                                ;   1us
                              NOP                                          ;  1us
                            DJNZ R6,delay1              ; 2us+R6循環(huán)250次,延時250*4us
                            DJNZ R7,delay0                ;2us+R7循環(huán)10次,延時10*250*4us=10ms
                            RET
disp_code:
          DB 40H,79H,24H,30H
                              DB 19H,12H,02H,78H
                              DB 00H,18H,08H,03H
                              DB 46H,21H,06H,0EH
              END

使用Proteus 軟件進行單片機系統(tǒng)仿真設計,是虛擬仿真技術和計算機多媒體技術相結合的綜合運用,有利于培養(yǎng)學生的電路設計能力及仿真軟件的操作能力;在單片機課程設計和全國大學生電子設計競賽中,我們使用 Proteus 開發(fā)環(huán)境對學生進行培訓,在不需要硬件投入的條件下,學生普遍反映,對單片機的學習比單純學習書本知識更容易接受,更容易提高。實踐證明,在使用 Proteus 進行系統(tǒng)仿真開發(fā)成功之后再進行實際制作,能極大提高單片機系統(tǒng)設計效率。因此,Proteus 有較高的推廣利用價值。仿真電路圖如下:第三章 實物材料:
材料名稱
晶振
22pf電容
10uf電容
按鍵
C51芯片
芯片卡槽
數(shù)碼管
USB接口
杜邦線
數(shù)量
1
2[18]
1
17
1
1
1
1
若干
實物展示:第四章  心得體會通過本次單片機課程設計,我不僅加深了對單片機理論知識的理解,學會了學以致用的重要性;而且還學會了如何去加強鍛煉創(chuàng)新精神,同時也提高了自身的動手能力,讓我深刻的意識到理論與實際結合的重要性。 在本次設計過程中,雖然設計的題目不是很難,但在實際操作過程當中也遇到了不少困難,通過遇到的困難[19]也讓我不斷地去查找資料,不斷地詢問同學,不斷地去開動自己的腦子,從而也不斷地超越自我,讓自己的知識能夠得到不斷地完善;同時更重要的是,在這一設計過程當中,讓我懂得了在學習的道路上會遇到很多的阻礙,但關鍵的是能做到堅持不懈,不輕易放棄;最終達到自己想要的目標。  單片機的學習對于我們專業(yè)來說非常的重要,通過本次設計也讓我更加清晰了對專業(yè)的了解,理論知識再豐富,沒有實際的操作經(jīng)驗也是不行的;本次設計也運用到了proteus仿真軟件,由于之前沒有學過該仿真軟件,所以在操作的過程中遇到了很多困難,但慶幸的是通過不斷的學習,對proteus軟件也有了很大的了解,也學會了一些簡單的操作,所以也讓我意識到,如果你想學好,通過自己的努力就一定會學好。 當然在本次設計過程中,也遇到了很多的困難,比如很多關于單片機的基礎知識學的不是很好。當然在設計過程中也少不了同學們的互相幫助,要是沒有同學幫助的幫助,我想我一個人也不可能在短時間內(nèi)完成設計要求;所以在此也要感謝在設計中給予我?guī)椭闹笇Ю蠋熀屯瑢W們。 0.png

全部資料51hei下載地址:
數(shù)碼管顯示4x4矩陣鍵盤的鍵號.zip (149.2 KB, 下載次數(shù): 122)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:115923 發(fā)表于 2020-3-24 20:31 | 顯示全部樓層
------------------------------------
P1.0 P1.1 P1.2 P1.3
p1.4 S1 S5 S9 S13
P1.5 S2 S6 S10 S14
P1.6 S3 S7 S11 S15
P1.7 S4 S8 S12 S16
------------------------------------
實現(xiàn)原理:
當高電平端口與低電平端口短接時,高電平端口會被拉成低電平
------------------------
算法分析:
1,檢查是否有鍵按下:
P1=f0h (即0-3置1,4-7置0)
檢查P1口是否是0F0H
是,則無鍵按下
否,則有鍵按下
2,掃描按下的鍵值:
循環(huán)(依次將4至7口單獨置0)
檢查0-3口是否有低電平端
確定被按下的鍵
返回鍵值
3,鍵盤防抖:
抖動原因:鍵按下時,會產(chǎn)生電壓的波動,持續(xù)約10MS
去抖方法:10MS掃描一次,使前后兩次均有鍵按下
********************************************************/
#include<ytc51.h>
uchar jps,ks; //鍵盤緩存
/*鍵盤掃描程序1,檢查是否有按鍵*/
uchar keyfun()
{
uchar key_c;
P2 = P2 & 0x03;
P2 = P2 | 0x3c;
key_c = P2;
if((key_c & 0xfc) == 0x3c) return (0);
else return(1);
}
/*鍵盤掃描程序2,確定按鍵數(shù)值*/
uchar keyscan()
{
uchar i,k;
P2 = P2 & 0x03;
P2 = P2 | 0xbc;
if((P2 & 0x3c) != 0x3c)
{
i = 0;
k = (~P2) & 0x3c;
}
else
{
P2 = P2 & 0x03;
P2 = P2 | 0x7c;
if((P2 & 0x3c) != 0x3c)
{
i = 1;
k = (~P2) & 0x3c;
}
}
k = k>>3;
if( k==4 ) k=3;
k=i*4+k+1;
return(k);
}
/**********************************************************************
函數(shù)功能: 定時器中斷函數(shù)(掃描鍵盤)(10ms 16位定時)
入口參數(shù): 無
出口參數(shù): 無
***********************************************************************/
void Time0_Func() interrupt 3 /*當定時器中斷時執(zhí)行此函數(shù)*/
{
TH1=(0xffff-9259)/256; /*T0初始化*/
TL1=(0xffff-9259)%256;
WR = 1;
if((ks == 0) && ( keyfun() ))
{
jps = keyscan();
}
ks = keyfun();
}
/**********************************************************************
函數(shù)功能: 上電初始化函數(shù)
入口參數(shù): 無
出口參數(shù): 無
***********************************************************************/
void Power_Up(void)
{
TMOD = 0x10;/*Time0/1為16計數(shù)器*/
TH1=(0xffff-9216)/256;/*10ms*/
TL1=(0xffff-9216)%256;/*10ms*/
TR1=1;
SCON = 0x00;//串口工作模式設置
IE=0x88; /*EA=1 ET1=1*/
P0=0xff;
P2=0xff;
}
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩精品一区二区三区中文在线 | 精品视频一区二区在线观看 | 亚洲97| 免费永久av | 99精品99| 亚洲福利网 | 日本欧美在线视频 | 一级片在线观看 | 一级做a爰片性色毛片16美国 | 蜜桃五月天 | 亚洲草草视频 | 成人高清在线 | 久久aⅴ乱码一区二区三区 91综合网 | 日韩一区二区三区视频 | 日本黄色高清视频 | 久久精品国产久精国产 | 久久久国产精品 | 激情五月综合网 | 国产一区中文 | 久久精品在线免费视频 | 国产欧美一区二区三区在线播放 | 亚洲综合久久精品 | 不卡一区二区三区四区 | 日韩一区二区三区在线观看视频 | 黄 色 毛片免费 | 国产精品久久久久久久久久久久午夜片 | 毛片链接 | 成人性视频免费网站 | 中文字幕一区二区三区乱码图片 | 在线一区二区国产 | 国产精品久久二区 | 日韩中文字幕在线播放 | 天天躁日日躁aaaa视频 | 四虎海外| 亚洲视频免费在线播放 | 欧美精品一区二区三区一线天视频 | 国产精品 亚洲一区 | 欧美激情啪啪 | 波多野结衣一区二区三区 | 久久精品国产一区二区电影 | 女女爱爱视频 |