999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于單片機控制的簡易計算器

2012-04-29 00:00:00李峽
電子產品世界 2012年9期

摘要:本文論述了如何設計并制作一臺基于單片機控制的簡易計算器,簡單介紹了51單片機的各種I/O接口電路的形式及工作原理,概括分析了計算器控制程序編寫的一般思路,重點講解了鍵盤掃描程序、LED動態顯示程序的編寫以及軟、硬件聯調的的方法。

關鍵詞:單片機;計算器;矩陣鍵盤;動態顯示;蜂鳴器

DOI: 10.3969/j.issn.1005-5517.2012.9.012

計算器功能要求

該計算器鍵盤上有10個“數字按鍵0~9”,6個“功能按鍵(+、-、*、/、=、AC)”。要求當“數字按鍵”按下時,對應的數值能顯示出來;“功能按鍵”按下時,計算器能夠計算輸入的數值并顯示結果;而且每個按鍵按下后,計算器都能發出“嘟”的一聲。

硬件電路設計

為了實現上述功能,可采用多種電路方案,無論采用哪種形式,計算器都有三個基本的組成部分,即輸入電路、輸出電路與控制電路。

輸入電路主要完成信息的采集,如圖1所示,本文采用16鍵的4*4矩陣式鍵盤來實現,它由16個分別位于行和列的按鍵組成,其中4條列線分別接單片機的P1.0~P1.3,4條行線分別接單片機的P1.4~P1.7。

輸出電路由顯示部分和發聲部分組成,如圖2所示。其中顯示部分采用的是兩位LED數碼管動態掃描顯示電路,兩個數碼管均為共陽型,筆段a~dp分別接在一起,并與單片機的P0口相連,公共端分別受單片機的P2.0、P2.1控制;當CPU向P0口送出字型碼時,兩個數碼管接收相同的字型碼,但只有當P2.0或P2.1為低電平時,與數碼管公共端相連的三極管才會導通,對應的數碼管才會被點亮。發聲電路由蜂鳴器實現,由于人耳能感覺到的音頻范圍約在20Hz~20kHz之間,可以利用程序使單片機的P2.2輸出高、低變化的電平,則在該I/O口線上就能產生一定頻率的矩形波,將此I/O口線接蜂鳴器后,蜂鳴器就能發出聲音;由于單片機的I/O口線輸出的電流不足以驅動蜂鳴器發聲,因此需要在兩者之間加入功率驅動電路,如三極管。

控制電路對輸入的信息進行分析,按照計算器的功能要求實現相應的控制,可采用51系列單片機來實現。

裝配好后的計算器場景圖如圖3所示。

圖1 輸入電路原理圖

圖2 輸出電路原理圖

程序設計

作為簡易計算器,其功能就是將“數字按鍵”所對應的內容顯示出來,在“功能按鍵”按下時,能夠計算輸入的數值并顯示結果,并且在每個按鍵按下后,會發出“嘟”的一聲。因此,計算器處理程序共分為鍵盤輸入程序、LED動態顯示程序、蜂鳴器發聲程序以及運算處理程序四個部分。

鍵盤輸入程序設計

(1)按鍵查詢

單片機如何判斷某一時刻是否有按鍵按下呢?可以采用中斷或者查詢方式。本文采用查詢方式,先讓行線輸出全0、列線輸出全1,然后讀取各列線狀態,若無按鍵按下,則列線就保持全1;若有任一按鍵按下,則該按鍵對應的列線就會被拉低為0,讀取到的列線狀態就不會全為1,據此就可以知道某一時刻是否有按鍵按下。

(2)按鍵去抖

機械式按鍵在按下時,通常伴隨一定時間的觸點機械抖動,若在觸點抖動期間檢測按鍵,可能會導致判斷出錯,即按鍵一次按下被錯誤地認為是多次操作。為使單片機CPU能正確地讀出I/O口的狀態,對每一次按鍵只作一次響應,就必須考慮如何去除抖動,常用軟件法去抖動。即單片機獲得I/O口為低的信息后,不是立即認定按鍵已被按下,而是延時10毫秒或更長一些時間后再次檢測I/O口,如果仍為低,說明按鍵的確按下了。

(3)鍵盤掃描

確定有按鍵按下后,就要判斷該按鍵所在行和列。通常采用行列掃描法,即用行線作輸出線,列線作輸入線。分別將每條行線置為低電平,而其它行線為高電平,如使P1.4-P1.7依次輸出為1110、1101、1011、0111四組狀態,在每組行狀態輸出時,讀取列線P1.0-P1.3的狀態信息,若全為1,說明為“0”這一行沒有按鍵按下,接著輸出下一組行狀態并讀取列線狀態信息,直到列線不全為1為止。經這樣逐行、逐列輸出、讀取后,就可以確定被按下的按鍵所在的行和列了。為了實現鍵盤的數據輸入功能和命令處理功能,每個按鍵都有其處理子程序,因此每個按鍵都對應一個鍵值,鍵值可以根據需要任意定義。本設計要求的計算器鍵盤如圖3中所示,我們可以讓數字鍵依次定義為0~9,功能鍵分別定義為10~15,將鍵值存放在TAB表格中,如表1所示。當有按鍵按下時,根據行列掃描程序可以確定按鍵所在的行號和列號,然后使用查表指令,取得各按鍵對應的鍵值。

鍵盤掃描程序流程圖如圖4所示。

LED動態掃描顯示程序設計

所謂動態掃描,是指采用分時方法,輪流控制各個數碼管的公共端,使各個數碼管依次輪流點亮,且循環往復,只要每次重復的時間不大于20ms,主觀感覺如同靜態一樣。

若要動態顯示一個兩位的隨機數,首先要通過除法指令將其個位和十位分開,然后分別使用查表指令來獲得相應數值,再通過各自的LED控制位顯示,可按圖5所示的流程圖設計程序。其參考程序如下:

XIANSHI:MOV P2,#0FFH;關閉所有LED

MOV A,RESULT ;將隨機數送A中

MOV B,#10

DIV AB ;使用除法指令,將十位數存放在A中,個位數存放在B中

MOV DPTR,#TABLE;表格首地址送DPTR中

MOVC A,@A+DPTR;使用查表指令,取十位數對應的字型碼到A中

MOV P0,A;送十位數的字型碼到P0口

MOV P2,#0FEH;打開左邊LED

ACALL DELAY;調用延時子程序

MOV P2,#0FFH;關閉所有LED,否則顯示混亂

MOV A,B

MOVCA,@ A+DPTR;使用查表指令,取個位數對應的字型碼到A中

MOV P0,A ;送個位數的字型碼到P0口

MOV P2,#0FDH;打開右邊的LED,同時關閉左邊的LED

ACALL DELAY;調用延時子程序

AJMP XIANSHI;重新開始顯示

TABLE:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;共陽數碼管字型碼表

其中DELAY是一個延時子程序,其延時時間不能大于20ms,這樣重復顯示的頻率才不小于50Hz,人眼才不會感到燈的閃爍。

發聲電路程序設計

根據發聲原理可知,要讓圖2中的蜂鳴器發出“嘟”聲,需要編程控制P2.2引腳,使其輸出一定頻率的音頻脈沖。為此需要計算出某一音頻的周期,為簡單起見可使高低電平持續時間相同(即半個周期),并用延時子程序DELAY來實現,然后讓P2.2引腳循環輸出該時長的高低電平,就可得到相應的音頻脈沖了。參考程序如下:

MAIN:CPL P2.2;P2.2取反

LCALL DELAY ;調延時子程序

SETB P2.2 ;P2.2輸出高電平

LCALL DELAY;調延時子程序

LJMP MAIN ;循環執行主程序

DELAY:MOV R0,#07H;延時子程序

LOOP2:MOV R1,#1FH

LOOP1:DJNZ R1,LOOP1

DJNZ R0,LOOP2

RET

這里的延時子程序采用的是軟件延時,也可以用單片機的定時/計數器來實現延時。

計算器主程序設計

主程序是計算器控制的關鍵,首先初始化參數,關閉所有數碼管。然后掃描鍵盤,看是否有按鍵輸入。若有,經過去抖處理后,再次掃描鍵盤,如果仍有按鍵輸入,則調用發聲程序和鍵盤掃描程序。然后根據獲取的鍵值判斷,是數字按鍵,清零鍵(AC),還是功能按鍵(+、-、*、/、= )。若是數字按鍵,則送LED顯示并保存數值;若是清零鍵,則做清零處理;若是功能按鍵,則要判斷是“=”,還是運算按鍵。若是“=”,則計算最后結果,并送LED顯示;若是運算按鍵,則保存相對運算程序的首地址。主程序流程圖如圖6所示。

主程序編寫的關鍵在于對按下按鍵的鍵值進行判斷,然后轉到相應的處理程序中。在這里,用得比較多的指令是比較不相等轉移指令CJNE Rn,#DATA,REL。

表1 按鍵對應鍵值和表格地址

圖3 計算器場景圖

圖4 鍵盤掃描程序流程圖

圖5 LED動態掃描顯示流程圖

圖6 計算器主程序流程圖

程序調試及功能驗證

計算器程序編好后,輸入到計算機中,并建立ASM源文件,然后添加到KEIL C51仿真軟件中,進行編譯和調試。調試方法采用分模塊調試,逐個解決。將計算器程序分成幾個程序塊,每個程序塊分別單獨進行調試,出現問題時及時在本模塊解決。每個程序塊都調試正常后,再逐個模塊添加,在添加過程中,要注意各個程序塊之間的協調問題。如鍵盤掃描程序中用到了R1,而在發聲程序中也用到了R1,這兩個程序在單獨調試時都沒有問題,但聯調時卻會報錯,就是因為R1沖突了。同樣的問題還有延時子程序,在按鍵去抖、LED動態掃描顯示以及發聲程序中都要用到延時子程序DELAY,但各自的延時時間不同,因此在聯調程序時,可將不同的延時子程序命名為DELAY1、DELAY2、DELAY3。

另外,在調試過程中,為了實現對錯誤信息的正確定位,可以采用單步運行和全速運行相結合的方法。全速運行配合設置斷點,可以確定錯誤的大致范圍;單步運行可以了解程序中每條指令的執行情況,對照指令運行結果就可知道該指令執行的正確性。

計算器程序全部調試完成后,使用編程器將目標文件燒寫到51單片機中,然后將51單片機插入到主板的IC插座上,并將計算器電路板和主板的電源接口、I/O接口分別連接起來,給系統加電,觀察電路運行情況,經驗證,該計算器完全能夠實現各項功能要求。

主站蜘蛛池模板: 精品综合久久久久久97超人| 亚洲综合色婷婷| 精品国产三级在线观看| 亚洲成人一区在线| 亚洲一级无毛片无码在线免费视频 | 亚洲成人高清在线观看| 国产特级毛片| 日本不卡视频在线| 国产欧美在线| 国产日韩欧美黄色片免费观看| 青青操国产视频| 色香蕉影院| 欧美日韩精品一区二区在线线 | 国产成人精品日本亚洲77美色| 国产成人精品三级| 美女无遮挡免费视频网站| 五月婷婷中文字幕| 97精品伊人久久大香线蕉| 99久久精品国产麻豆婷婷| 91国语视频| 热re99久久精品国99热| 欧美日韩资源| 日韩a级毛片| 久久亚洲美女精品国产精品| 免费在线色| 欧美a级完整在线观看| 日本在线视频免费| 欧美激情二区三区| 国产成人免费视频精品一区二区 | 亚洲精品在线影院| 国产99视频精品免费视频7| 99视频在线看| 亚洲Av激情网五月天| 久青草免费在线视频| 国产精品极品美女自在线| 国产超碰在线观看| 欧美精品亚洲二区| 午夜精品区| 日韩国产一区二区三区无码| 亚洲天堂伊人| 天天色天天综合网| 日韩午夜片| 波多野结衣第一页| 性喷潮久久久久久久久| AV色爱天堂网| 综合天天色| 欧美精品不卡| 国产成人在线无码免费视频| 国产情侣一区二区三区| 91视频区| 欧美亚洲第一页| 国产aaaaa一级毛片| 亚洲永久精品ww47国产| 五月婷婷精品| 六月婷婷激情综合| 久久精品人人做人人综合试看| 久久五月天国产自| 中日韩欧亚无码视频| 亚洲高清无码久久久| 国产日本欧美在线观看| 中文字幕亚洲第一| 久久伊人色| 久久特级毛片| 看国产一级毛片| 九色视频最新网址 | 亚洲欧州色色免费AV| 国产成人一二三| 午夜福利无码一区二区| 亚洲高清中文字幕| 99视频只有精品| 影音先锋丝袜制服| 成人综合在线观看| 色天堂无毒不卡| 91青青在线视频| 福利视频久久| 日韩小视频网站hq| 国产精品美女在线| 日本久久免费| 综合色婷婷| 亚洲高清资源| 国产靠逼视频| 精品一区二区三区波多野结衣|