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接口分別連接起來,給系統加電,觀察電路運行情況,經驗證,該計算器完全能夠實現各項功能要求。

主站蜘蛛池模板: 在线看片免费人成视久网下载| 国产在线精彩视频二区| 精品久久国产综合精麻豆| 成人福利在线视频免费观看| 天天做天天爱天天爽综合区| 亚洲AⅤ永久无码精品毛片| 中文字幕伦视频| 久久香蕉国产线看观看精品蕉| 欧美亚洲欧美区| 国产裸舞福利在线视频合集| 亚洲久悠悠色悠在线播放| 国产91色在线| 国产精品视频免费网站| 一级毛片免费播放视频| 国内99精品激情视频精品| 91麻豆国产精品91久久久| 亚洲乱码在线播放| 一本久道热中字伊人| 久久亚洲美女精品国产精品| 色AV色 综合网站| 91口爆吞精国产对白第三集| 999国产精品永久免费视频精品久久| 国模粉嫩小泬视频在线观看| 欧美日韩北条麻妃一区二区| 欧美日韩va| 国产黄网站在线观看| 国产极品美女在线观看| 午夜天堂视频| 99视频在线免费看| 国语少妇高潮| 找国产毛片看| 国产农村妇女精品一二区| 久久77777| 久久a毛片| 久久综合婷婷| 国产麻豆aⅴ精品无码| 欧美高清视频一区二区三区| 亚洲一本大道在线| 国产精品福利一区二区久久| 在线高清亚洲精品二区| 亚洲综合精品香蕉久久网| 2021精品国产自在现线看| 国产成人91精品| 欧美区日韩区| 亚洲免费福利视频| 蝴蝶伊人久久中文娱乐网| 久久99久久无码毛片一区二区| 99久久亚洲综合精品TS| 高清无码不卡视频| 污网站免费在线观看| 久久视精品| 国产精品无码AV片在线观看播放| 国产 在线视频无码| 5555国产在线观看| 天天躁夜夜躁狠狠躁图片| 国产美女在线观看| 国产乱人免费视频| 中文字幕日韩欧美| 影音先锋丝袜制服| 99久久精品美女高潮喷水| 精品久久蜜桃| 一级做a爰片久久免费| 曰韩人妻一区二区三区| 91免费国产在线观看尤物| 亚洲欧美日本国产综合在线| 日韩高清在线观看不卡一区二区| 伊人久久大香线蕉综合影视| 欧美成人影院亚洲综合图| 国产一级毛片高清完整视频版| 无码专区国产精品一区| 夜夜爽免费视频| 亚洲精品成人7777在线观看| 色综合中文综合网| 国产欧美另类| 不卡无码h在线观看| 综合亚洲网| 国产精品漂亮美女在线观看| 亚洲毛片在线看| 91午夜福利在线观看| 在线欧美一区| 在线观看国产精品第一区免费| 免费精品一区二区h|