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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6463|回復: 2
收起左側

單片機雙精度電子稱課程設計(論文)

[復制鏈接]
ID:161768 發表于 2017-6-2 17:00 | 顯示全部樓層 |閱讀模式

一、課程設計(論文)的內容

以89C51單片機為核心,制作一個LED顯示的雙精度電子稱設計。具體要求:

1、用4只LED數碼管輸出顯示重量。

2、可通過按鍵設置重量功能,且停鬧無須手工操作。

3、可通過按鍵設置重量的單位。

4、稱重時的誤差少于10g。

二、課程設計(論文)的要求與數據

1、系統框圖、方案論證;

2、各部分的硬件電路原理圖及功能說明;

3、程序流程圖及分析;

4、系統調試與分析;

5、源程序清單。

三、課程設計(論文)應完成的工作

1. 畫出系統框圖,論證系統設計方案;

2、器件選型,給出系統各個組成部分的硬件電路原理圖;

3、給出程序流程圖;

4、進行源程序的設計及調試;

5、撰寫課程設計報告的。

四、課程設計(論文)進程安排

序號

設計(論文)各階段內容

地點

起止日期

1

選擇課題,明確設計要求,查閱資料

校內

5.12

2

方案論證、系統總體設計

校內

5.13~5.14

3

硬件電路原理圖設計

校內

5.15~5.16

4

程序流程圖的設計、源程序的編制及系統調試

校內

5.17~5.18

5

撰寫課程設計報告

校內

5.19~5.20

6


五、應收集的資料及主要參考文獻

[1] MCS-51系列單片微型計算機及其應用

[2] MCS-51系列單片機實用設計

發出任務書日期: 2017年 05月12 日   指導教師簽名:

計劃完成日期:   2017年 05月20 日   教學單位責任人簽章:






目錄

1系統分析

1.1功能要求

1.2方案論證

2 系統設計

2.1 系統硬件電路的設計

2.2 系統程序的設計              9

3 結束語              18

參考文獻              19

附錄1材料清單              20

附錄2電路原理圖              21

附錄3實物圖              22

附錄4主要程序清單              23


1系統分析

1.1功能要求

本課題的主要設計思路是:利用壓力傳感器采集因壓力變化產生的電壓信號,經過電壓放大電路放大,然后再經過模數轉換器轉換為數字信號,最后把數字信號送入單片機。單片機經過相應的處理后,得出當前所稱物品的重量及總額,然后再顯示出來。此外,還可通過鍵盤設定所稱物品的價格。

本文主要主要以下幾個方面的工作:

(1)詳細講解了稱重器工作原理。

(2)對稱重器系統進行總體方案的設計。

(3)對于稱重器的硬件系統,重點介紹關于精度、轉換速率的壓力傳感器和A/D轉換模塊器件的選取。

(4)對于稱重器的軟件系統,通過解說LCD液晶顯示的使用及鍵盤的工作原理,對于主程序的編寫與調試提供重要的依據。

(5)依據稱重系統的總電路,通過Keil軟件C語言編程和Proteus仿真,實現模擬的稱重顯示。

(6)對稱重系統的測量值與顯示值的差值,進行系統的調試與誤差校正。

主要技術指標為:稱量范圍0~10Kg;分度值0.01kg;精度等級Ⅲ級;電源DC1.5V(一節5號電池供電)。

這種高精度智能電子秤體積小、計量準確、攜帶方便,集重量稱量功能與價格計算功能于一體,能夠滿足商業貿易和居民家庭的使用需求
1.001.jpg
圖1.1設計思路框圖

1.2方案論證

數碼管顯示。結構如圖1.2所示:

1.002.jpg

圖1.2數碼管顯示方案

此方案利用數碼管顯示物體重量,簡單可行,可以采用內部帶有模數轉換功能的單片機。此設計的硬件部分簡單,接口電路易于實現,并且在編程時大大減少程序量,在電路結構上只有簡單的輸出輸入關系。缺點是:硬件部分簡單,雖然可以實現電子稱基本的稱重功能,但是不能實現外部數據的輸入,無法實時地設定各種控制參數。由于數碼管只能實現簡單的數字和英文字符的顯示,不能顯示漢字以及其他的復雜字符,不能達到顯示購物清單的要求。又因為采用了具有模數轉換功能的單片機,系統電路過于簡單,系統硬件的擴展必受到限制,電子秤的功能過于單一,達不到設計的標準。

1






2 系統設計

2.1 系統硬件電路的設計

2.1.1 AT89S52的最小系統電路構成

AT89S52單片機的最小系統由時鐘電路、復位電路、電源電路及單片機構成。單片機的時鐘信號用來提供單片機片內各種操作的時間基準,復位操作則使單片機的片內電路初始化,使單片機從一種確定的初態開始運行。

單片機的時鐘信號通常用兩種電路形式得到:內部振蕩方式和外部振蕩方式。在引腳XTAL1和XTAL2外接晶體振蕩器(簡稱晶振)或陶瓷諧振器,就構成了內部振蕩方式。由于單片機內部有一個高增益反相放大器,當外接晶振后,就構成了自激振蕩器并產生振蕩時鐘脈沖。

當單片機的復位引腳RST出現2個機器周期以上的高電平時,單片機就執行復位操作。如果RST持續為高電平,單片機就處于循環復位狀態。根據應用的要求,復位操作通常有兩種基本形式:上電復位和上電或開關復位。上電復位要求接通電源后,自動實現復位操作。

上電或開關復位要求電源接通后,單片機自動復位,并且在單片機運行期間,用開關操作也能使單片機復位。單片機的復位操作使單片機進入初始化狀態,其中包括使程序計數器PC=0000H,這表明程序從0000H地址單元開始執行。

系統復位是任何微機系統執行的第一步,使整個控制芯片回到默認的硬件狀態下。51單片機的復位是由RESET引腳來控制的,此引腳與高電平相接超過24個振蕩周期后,51單片機即進入芯片內部復位狀態,而且一直在此狀態下等待,直到RESET引腳轉為低電平后,才檢查EA引腳是高電平或低電平,若為高電平則執行芯片內部的程序代碼,若為低電平便會執行外部程序。

1.003.jpg

圖2.1AT89S52最小系統電路

2.2.2  A/D轉換器與AT89S52單片機接口電路

AD574是美國Analog Device公司生產的12位單片A/D轉換器。它采用逐次逼近型的A/D轉換器,最大轉換時間為25us,轉換精度為0.05%,所以適合于高精度的快速轉換采樣系統。芯片內部包含微處理器借口邏輯(有三態輸出緩沖器),故可直接與各種類型的8位或者16位的微處理器連接,而無需附加邏輯接口電路,切能與CMOS及TTL電路兼容。AD574采用28腳雙列直插標準封裝。

1.004.jpg

圖2.2AD574芯片引腳圖

A/D574有5根控制線,邏輯控制輸入信號有: A0:字節選擇控制信號。 CE:片啟動信號。

/CS:片選信號。當/CS=0,CE=1同時滿足時,AD574才處于工作狀態,否則工作被禁止。

R/-C:讀數據/轉換控制信號。

12/-8:數據輸出格式選擇控制信號。當其為高電平時,對應12位并行輸出;為低電平時,對應8位輸出。

當R/-C=0,啟動A/D轉換:當A0=0,啟動12位A/D轉換方式;當A0=1,啟動8位轉換方式。

當R/-C=1,數據輸出,A0=0時,高8位數據有效;A0=1時,低4位數據有效,中間4位為0,高4位為三態。 輸出信號有:

STS:工作狀態信號線。當啟動A/D進行轉換時,STS為高電平;當A/D轉換結束時為低電平。則可以利用此線驅動一信號二極管的亮滅,從而表示是否處于A/D轉換。  

由于對AD574 的8、10、12引腳的外接電路有不同連接方式,所以AD574與單片機的接口方案有兩種,一種是單極性接法,可實現輸入信號0~10V或者0~20V的轉換;另一種為雙極性接法,可實現輸入信號-5~+5V或者-10~+10V之間轉換。本次設計采用單極性接法。

1.005.jpg

圖2.3 AD574與AT89S52的接線圖

根據芯片管腳的原理,無論啟動、轉換還是結果輸出,都要保證CE端為高電平,所以可以將單片機的/RD引腳和/WR端通過與非門與AD574的CE端連接起來。轉換結果分高8位、低4位與P0口相連,分兩次讀入,所以12/-8端接地。同時,為了使CS、A0、R/-C在讀取轉換結果時保持相應的電平,可以將來自單片機的控制信號經74LS373鎖存后再接入。CPU可采用中斷、查詢或者程序延時等方式讀取AD574的轉換結果,本設計采用查詢方式。

2.1.3  顯示電路與AT89S52單片機的接口電路

1.006.jpg

圖2.4 單片機與LCD接線圖

3.4  鍵盤電路與AT89S52的接口電路設計

鍵盤一般是由若干按鍵組成的開關矩陣,若按照其接線方式的不同,可分為兩種: 一種是獨立式接法,一種是矩陣式接法;若按照按鍵的結構原理,可分為兩類:一類是觸點式開關按鍵,如機械式開關、導電橡膠式開關等,一類是無觸點式開關按鍵,如電氣式按鍵、磁感應按鍵等。前者造價低,后者壽命長。

按鍵按下時,與此鍵相連的行線與列線導通,行線在無鍵按下時處于高電平。顯然如果讓所有的列線也處在高電平,那么按鍵按下與否不會引起行線電平的變化,因此,必須使所有的列線處在低電平。只有這樣,當按鍵按下時,該鍵所在的行電平才會由高電平變為低電平。CPU根據行電平的變化,便能判定相應的行有鍵按下。

對應鍵盤的相應取決于鍵盤的工作方式,鍵盤的工作方式應根據實際應用系統中CPU的工作情況而定,其選取的原則既要保證CPU能及時響應按鍵操作,又不要過多的占用CPU的工作時間。通常,鍵盤的工作方式有3種,即編程掃描、定時掃描和中斷掃描。

① 編程掃描方式:利用CPU完成其他工作的空余時間,調用鍵盤掃描子程序來響應鍵盤輸入要求。在執行鍵功能程序時,CPU不再響應鍵輸入要求,直到CPU重新掃描鍵值為止。

② 定時掃描方式,定時掃描方式就是每隔一段時間對鍵盤掃描一次,它利用單片機內部的定時器產生一定時間(列如10ms)的定時,當定時時間到,就會產生定時器溢出中斷。CPU響應中斷后對鍵盤進行掃描,并在有鍵按下時識別出該鍵,再執行該鍵的子程序。

③ 中斷掃描方式:采用上述兩種掃描方式時,無論是否有鍵按下,CPU都要定時掃描鍵盤,而單片機應用系統工作時,并非經常需要鍵盤輸入,因此,CPU經常處于空掃描狀態。為提高CPU工作效率,可采用中斷掃描工作方式。其工作過程如下:當無鍵按下時,CPU處理自己程序,當有鍵按下時,產生中斷請求,CPU轉去執行鍵盤掃描子程序,并識別鍵號。

說明此(低電平)行沒有鍵被按下。接著進行下一行“0”行掃描與列讀入,知道4行關不檢查完為止,若無鍵按下,則返回。

矩陣式鍵盤的結構與工作原理: 在鍵盤中按鍵數量較多時,為了減少I/矩陣式鍵盤有兩種識別鍵是否被按下的方法:行掃描法和線反轉法。行掃描法又稱逐行零掃描查詢法,及逐行輸出行掃描信號“0”,使各行依次為低電平,然后分別讀取列數據,檢查此(低電平)行中是否有鍵被按下。如果讀得某列線為低電平,則表示此(低電平)行線與列線的交叉處有鍵按下,再對該鍵該鍵譯碼計算,得到鍵值,然后轉入該鍵的功能子程序入口地址;如果沒有任何一根列線為低電平,則O口的占用,通常將按鍵排列成矩陣形式。在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過一個按鍵加以連接。這樣,一個端口(如P1口)就可以構成4*4=16個按鍵,比之直接將端口線用于鍵盤多出了一倍,而且線數越多,區別越明顯,比如再多加一條線就可以構成20鍵的鍵盤,而直接用端口線則只能多出一鍵(9鍵)。由此可見,在需要的鍵數比較多時,采用矩陣法來做鍵盤是合理的。

矩陣式鍵盤的按鍵識別方法 :確定矩陣式鍵盤上何鍵被按下介紹一種“行掃描法”。行掃描法 行掃描法又稱為逐行(或列)掃描查詢法,是一種最常用的按鍵識別方法,如下圖所示鍵盤,介紹過程如下。判斷鍵盤中有無鍵按下 將全部行線R0-R3置低電平,然后檢測列線的狀態。只要有一列的電平為低,則表示鍵盤中有鍵被按下,而且閉合的鍵位于低電平線與4根行線相交叉的4個按鍵之中。若所有列線均為高電平,則鍵盤中無鍵按下。 判斷閉合鍵所在的位置 在確認有鍵按下后,即可進入確定具體閉合鍵的過程。其方法是:依次將行線置為低電平,即在置某根行線為低電平時,其它線為高電平。在確定某根行線位置為低電平后,再逐行檢測各列線的電平狀態。若某列為低,則該列線與置為低電平的行線交叉處的按鍵就是閉合的按鍵。  

在本系統中鍵盤采用矩陣式鍵盤并采用編程掃描的工作方式。鍵盤為4 X 4鍵盤,包括0、1、2、3、4、5、6、7、8、9、十個數字及確認和清除鍵。

1.007.jpg

圖2.5 單片機與鍵盤接口電路

各個按鍵的功能說明:

數字鍵:.、0、1、2、3、4、5、6、7、8、9被按下時直接顯示在LCD液晶顯示屏上。

啟動鍵:當按下此鍵時,LCD液晶顯示開啟。

單價鍵:當此按鍵被按下時,此刻要求輸入稱重物品單價,即要求按下數字鍵。 確定鍵:前提是單價已輸入完畢,當此按鍵被按下時,LCD屏幕顯示當前稱重物品的總價格。

總價鍵:當稱重物品單價不變、重量改變時,按下此按鍵時,LCD液晶屏上顯示當前重量物品的總價格。

清除鍵:當此鍵按下時,單價及總價處的顯示清零。

2.2 系統程序的設計

2.2.1  主程序設計

在單片機應用系統的開發中,軟件的設計是最復雜和困難的,大部分情況下工作量都較大,特別是對那些控制系統比較復雜的情況。如果是機電一體化的設計人員,往往需要同時考慮單片機的軟硬件資源分配。本系統的軟件設計主要分為系統初始化、按鍵、顯示處理及信號頻率輸入處理。

程序設計是一件復雜的工作,為了把復雜的工作條理化,就要有相應的步驟和方法。其步驟可概括為以下三點:

(1) 分析系統控制要求,確定算法:對復雜的問題進行具體的分析,找出合理的計算方法及適當的數據結構,從而確定編寫程序的步驟。這是能否編制出高質量程序的關鍵。

(2) 根據算法畫流程圖:畫程序框圖可以把算法和解題步驟逐步具體化,以減少出錯的可能性。

(3)編寫程序:根據程序框圖所表示的算法和步驟,選用適當的指令排列起來,構成一個有機的整體,即程序。

程序數據的一種理想方法是結構化程序設計方法。結構化程序設計是對利用到的控制結構類程序做適當的限制,特別是限制轉向語句(或指令)的使用,從而控制了程序的復雜性,力求程序的上、下文順序與執行流程保持一致性,使程序易讀易理解,減少邏輯錯誤和易于修改、調試。根據系統的控制任務,本系統的軟件設計主要由主程序、初始化程序、A/D轉換子程序、鍵盤掃描子程序和顯示子程序等組成。

2.2.2  C語言在單片機中的應用

C語言是一種通用的計算機程序設計語言,在國際上非常流行。它既可以用來編寫計算機的系統程序,也可以用來編寫一般的應用程序。以前計算機的系統軟件主要用匯編語言編寫,單片機應用系統更是如此。C語言是當前最流行的程序設計語言,它像其它高級語言一樣,面向用戶,面向解題的過程,編程者不必熟悉具體的計算機內部結構和指令;C語言又像匯編語言一樣,可以對機器硬件進行操作。如進行端口0,1操作、位操作、地址操作,并可內嵌匯編指令,將匯編指令當作它的語句一樣。我們知道,匯編語言將涉及計算機硬件,所以C語言又像低級語言一樣,可以對計算機硬件進行控制,因此人們把它稱為介于高級語言與低級語言之間的一種中級語言。正是因為C語言具有這樣的特性,所以很適合編寫要對硬件進行操作的軟件程序。本文采用C語言進行編寫.因為經系統軟件比較,本系統存儲量較大,因此必須應用C語言編程了。 4.1.2 電子稱的軟件設計與實現

電子稱軟件設計均采用模塊化設計,整個程序包括主程序、A/D轉換模塊程序、鍵盤掃描程序、液晶顯示子程序等模塊。所有程序均采用C語言編寫。電子計價秤的軟件設計思路說明如下:主程序的作用為程序初始化,計算單價×物體重量(單價通過鍵盤給出,物體重量通過壓力傳感器獲得),并實時顯示十進制的物重,單價,總價。設定T0為計數工作方式,T1為定時工作方式。其中R0為標志位寄存器當為OOH時為正常顯示方式。當為01H時為累計顯示方式,在T1定時中斷程序中。一秒鐘采樣物料重量(已轉成脈沖頻率),并賦值重量計算RAM區和顯示RAM區。在INTO外部中斷程序中,采樣單價并賦值單價計算。

2.2.3 系統主程序流程圖

主程序流程圖給出了系統工作的基本過程,描述了信號的基本流向,起到一個向導的作用。

本系統的軟件系統主要可分為主程序和定時器中斷程序兩大模塊。在程序過程中,加入了抗干擾措施。下面對部分模塊作介紹。

1.008.jpg

圖2.6 稱重總設計的仿真圖

1.009.jpg

圖2.7 系統總程序圖

2.2.4 系統子程序設計

系統子程序主要包括A/D轉換啟動及數據讀取程序設計、鍵盤輸入控制程序設計以及顯示程序設計等。

2.2.5  A/D轉換啟動及數據讀取程序設計

A/D轉換子程序主要是指在系統開始運行時,把稱重傳感器傳遞過來的模擬信號轉換成數字信號并傳遞到單片機所涉及到的程序設計

1.010.jpg

圖2.8 A/D轉換啟動及數據讀取程序流程圖

1.011.jpg

圖2.9 A/D0832轉換后的顯示圖像

1.012.jpg 圖2.10 A/D574轉換后的顯示圖像

2.2.6 顯示程序設計

顯示子程序主要是來判斷是否需要顯示,以及如何去顯示,也是十分重要的程序之一。

1.013.jpg

圖2.11 顯示子程序流程圖

1.014.jpg

圖2.12 顯示啟動按鍵按下后

1.015.jpg

圖2.13  顯示歡迎界面

2.2.7 鍵盤輸入控制程序設計

鍵盤電路設計成4X4矩陣式,由鍵盤編碼方式可以得出0,1,2,3,4,5,6,7,8,9以及啟動等功能選擇鍵。在程序中可以先判斷按鍵編碼,然后根據編碼將鍵盤代表的數值送到相應的存儲單元,再進行功能選擇或數據處理。

矩陣式鍵盤又叫行列式鍵盤。就是用I/O口線組成行、列結構,按鍵設置在行列的交點上。在按鍵較多時多用矩陣鍵盤,可以節省I/O口線。列如:占用8個I/O口線的4×4矩陣式結構可以構成16個鍵的鍵盤。當有鍵按下時,要逐行或逐列掃描來判斷是哪個按鍵按下。通常的掃描方式有掃描法和反轉法。

1.016.jpg

圖2.14 鍵盤逐行掃描過程

3 結束語
  隨著全球數字化技術的不斷發展,電子衡器已經在我們的生活各個領域得到了廣泛的應用,從工業貿易到能源交通都能看到電子衡器的技術應用。本文著眼于目前中小型市場商用電子稱智能化低、精度差、易損壞等特點,研發設計了基于AT89S52單片機的雙精度電子稱。
雙精度電子稱是針對目前中小型市場上現有的衡器無法同時運用于稱量微重物理和較重物體而研發的產品。該仿真設計系統主要包括五大模塊,即數據采集和雙精度轉換模塊、單片機處理模塊、鍵盤控制模塊、128*64液晶顯示模塊和軟件驅動模塊。啟動工作后,單片機可根據A/D采集的重量參數能夠自動選擇轉換精度值,完成相應的數據處理,同時在128*64的液晶屏上進行直觀的顯示重量、單價和總價,4*4鍵盤控制系統能夠實時進行單價調整,操作簡單方便,不僅能夠測量微重物理,而且能夠測量較重物體,完全達到了商品的自動化、數字化和智能化,具有很好的應用價值和意義。

本文唯一的不足是只對研發方案成果的進行了仿真設計,沒有運用實物進行驗證方案是否可行,有待進一步的研發。雖然沒有做出實物,但基于51單片機雙精度電子稱依然是一個具有前景的電子衡器產品,非常適合于中小型市場的物體稱重,如果雙精度電子稱進一步發展,與虛擬串口技術融合,將會實現與上位機的無線通訊,實現遠程監測,將更有價值。


參考文獻

[1] 黃堅,金惟偉.中小型電機產品近年出口情況簡述[J].中小型電機,2005,32(1) 9--12.

[1]趙茂泰. 智能儀器原理及應用[M].北京:電子工業出版社.2004  

[2]張毅剛. MCS-51單片機應用設計[M].哈爾濱:哈爾濱工業大學出版社.2003  [3]賈伯年, 俞樸.傳感器技術[M].東南大學出版社.2000  

[4]單成祥.傳感器理論設計基礎及其應用[M].北京:國防工業出版社.1999  [5]李道華,李玲,朱艷 .傳感器電路分析與[M].武漢:武漢大學出版社.2000  [6]沙占友 ,王彥朋等. 智能傳感器系統設計與應用[M].北京:電子工業出版社2004.6

[7]何希才,薛永毅. 傳感器及其應用實例[J].北京:機械工業出版社.2004.1         [8]李群芳. 單片機微型計算機與接口技術[M].電子工業出版社. [9]周立功. 單片機實驗與實踐[M].北京航空航天大學出版社.2004.6

[10]全國大學生電子設計競賽組委會.全國大學生電子設計競賽獲獎作品匯編[J].北京理工大學出版社.2005.11

[11]何立民 .單片機高級教材[M].北京:航空航天大學出版社.2000 [12]童詩白,華成英 .模擬電子技術基礎[M]. 北京:北京高等教育出社.2001 [13]程林 ,超省電型電子秤的設計方案[J].福建:福建省計量科學技術研究所. 2008.3


附錄1材料清單

名稱
型號
數量
     單片機
AT89C2051
1
     數字集成芯片
CD4017
2
     數字集成芯片
CD4069
1
超高亮數碼管
共陽  尺寸0.5inch
4
高亮發光二極管
1.017.jpg 3紅、透明
13
高亮發光二極管
3綠、透明
50
     普通二極管
IN4001
4
     普通二極管
IN4148
2
     穩壓二極管
C4V7( 4.7V)
1
     三極管
9012
5
     三極管
9013
1
     輕觸按鍵
小(尺寸6×6mm×5.5)
3
     蜂鳴器
5 V
1
     晶振
6M(小體積)
1
     底座
14腳
1
     底座
16腳
2
     底座
20腳
1
     底座
40腳
1
     電阻
220歐姆,1/8瓦
8
     電阻
4.7K,1/8瓦
5
     電阻
100歐姆,1/8瓦
1
     電阻
10k,1/8瓦
4
     電阻
270歐姆,1/8瓦
1
     電容
100微法/25伏
2
     電容
220微法/25伏
1
     電容
30P  瓷片
3
     電容
104(0.1微法)
3
     變壓器
5 V/100 M A
1
     電源線
150cm
1
     固定腳
3套
     PCB線路板
直徑11.5
1


附錄2電路原理圖

1.018.jpg

附錄3實物圖


1.019.jpg

附錄4主要程序清單






  1. ALARMHBUFF2  EQU  77H             ;鬧鈴時間的時十位計時綬沖
  2.         ALARMHBUFF1  EQU  76H             ;鬧鈴時間的時個位計時綬沖
  3.         ALARMMBUFF2  EQU  75H             ;鬧鈴時間的分十位計時綬沖
  4.         ALARMMBUFF1  EQU  74H             ;鬧鈴時間的分個位計時綬沖
  5.         HBUFF2       EQU  73H             ;時十位計時綬沖
  6.         HBUFF1       EQU  72H             ;時個位計時綬沖
  7.         MBUFF2       EQU  71H             ;分十位計時綬沖
  8.         MBUFF1       EQU  70H             ;分個位計時綬沖
  9.         DP           EQU  6FH             ;控制數碼管點的亮暗
  10.         NUM          EQU  78H  ;前四秒還是后四秒計數
  11.         SBUFF        EQU  79H   ;秒十進制計時綬沖(低四位對應個位,高四位對應十位)
  12.         MBUFF        EQU  7AH            ;分十進制計時綬沖
  13.         HBUFF        EQU  7BH            ;時十進制計時綬沖
  14.         ALARMMBUFF   EQU  7CH           ;鬧鈴時間的分十進制計時綬沖
  15.         ALARMHBUFF   EQU  7DH           ;鬧鈴時間的時十進制計時綬沖
  16.         NUMT1    EQU  67H;用于控制時間調整時按鍵p3.2一次按下時,計數器T1中斷的次數
  17.         NUMT2    EQU  68H;用于控制時間調整時按鍵p3.3一次按下時,計數器T1中斷的次數
  18.         KEYNUMT1     EQU  69H         ;用于存儲NUMT1已經計數到第幾個半秒
  19.         KEYNUMT2     EQU  6AH         ;用于存儲NUMT1已經計數到第幾個半秒
  20.         STOREKEYNUMT2  EQU  6BH   ;用于存儲當前KEYNUMT1的值,以和下次做比較,看是否有變化
  21.         STOREKEYNUMT1  EQU  6CH     ;用于存儲當前KEYNUMT2的值,以和下次做比較,看是否有變化
  22.         ORG    0000H
  23.         AJMP   START
  24.         ORG    000BH
  25.         MOV    TH0 ,  #0BH    ;設置計數初值 ,R4用來存儲低位的初值
  26.         MOV    TL0 , R4
  27.         AJMP   INTERT0
  28.         ORG    001BH
  29.         AJMP   INTERT1
  30.         ORG    0040H
  31. START:  MOV    NUMT1 , #00H
  32.         MOV    NUMT2 , #00H
  33.         MOV    KEYNUMT1 , #00H
  34.         MOV    KEYNUMT2 , #00H
  35.         MOV    STOREKEYNUMT2   , #00H
  36.         MOV    STOREKEYNUMT1   , #00H
  37.         MOV    NUM , #8
  38.         MOV    DPTR ,  #TAB
  39.         MOV    ALARMHBUFF , #18H       ;置鬧鈴時間初始值為18:55
  40.         MOV    ALARMMBUFF , #55H
  41.         MOV    ALARMHBUFF2, #01H
  42.         MOV    ALARMHBUFF1, #08H
  43.         MOV    ALARMMBUFF2 , #05H
  44.         MOV    ALARMMBUFF1 , #05H
  45.         MOV    HBUFF2, #01H            ;置鬧鐘時間為18:53
  46.         MOV    HBUFF1, #08H
  47.         MOV    MBUFF2 , #05H
  48.         MOV    MBUFF1 , #03H
  49.         MOV    HBUFF ,  #18H
  50.         MOV    MBUFF ,  #53H
  51.         MOV    SBUFF ,  #3CH            ;置初始秒為60,計時時減
  52.         MOV    TCON ,  #05H             ;下降沿觸發
  53.         MOV    TMOD ,  #11H        ;初始化定時器,T0 ,T1  16位計時
  54.         MOV    TH0 ,  #0BH         ;設置計數初值,125ms計時
  55.         MOV    TL0 ,  #0DBH
  56.         MOV    TH1 , #3CH     ;T1置初值,進行100ms計時,用于調整時間
  57.         MOV    TL1 , #0B0H
  58.         MOV    IE , #82H       ;開T0中斷
  59.         SETB   PT0             ;T0中斷優先級最高
  60.         SETB   TR0            ;允許T0計數
  61.         SETB    P3.2
  62.         SETB    P3.3
  63. START1: MOV    A , HBUFF     ; 顯示時,7點以前及21點以后亮度調暗
  64.         SUBB   A , #7H
  65.         JC      START2
  66.         MOV    A , HBUFF
  67.         SUBB   A , #21H
  68.         JNC    START2
  69.         ACALL  DISPLAY
  70.         ACALL  ZDBS
  71.         AJMP   START3
  72. START2: ACALL   NIGHTDISPLAY
  73. START3: MOV   A ,ALARMHBUFF             ;檢測是否是定鬧時間
  74.         CJNE  A , HBUFF , START4
  75.         MOV   A , ALARMMBUFF
  76.         CJNE  A , MBUFF ,START4
  77.         MOV   C, DP                 ;若是定鬧時間,則利用dp的值來決定蜂鳴
  78.         MOV   P3.2, C
  79.         MOV   A , SBUFF
  80.         JNZ    START1               ;若還沒到1分鐘,則繼續蜂鳴
  81.         SETB   P3.2
  82. START4: JNB    P3.2,ADJUSTTIME1     ;循環等待中斷,并檢測是否鍵按下,若是,則進入相應程序
  83.         JNB    P3.3,ADJUSTTIME2
  84.         AJMP   START1
  85.         AJMP   START1

  86.       ;****************
  87.       ;*int0中斷子程序*
  88.       ;****************

  89. ADJUSTTIME1:NOP
  90.         MOV    KEYNUMT1  ,#00H
  91.         MOV    TH1 , #3CH                        ;T1置初值,進行100ms計時,用于調整時間
  92.         MOV    TL1 , #0B0H
  93.         SETB   ET1                              ;開T1中斷
  94.         SETB   PT1                              ;設T1中斷優先級最高
  95.         SETB   TR1                              ;允許T1計時
  96.         MOV    STOREKEYNUMT1 , KEYNUMT1        ;存儲當前次KEYNUMT1的值
  97. TIME1_1:ACALL  DISPLAY
  98.         MOV    A , KEYNUMT1
  99.         CJNE   A , STOREKEYNUMT1,TIME1_2   ;若當前KEYNUMT1的值與上一次的值不等,則時間加1分,否則繼續循環,等等至半分鐘
  100.         AJMP   TIME1_3
  101. TIME1_2:MOV    STOREKEYNUMT1 , KEYNUMT1   ;加1后存儲當前的KEYNUMT1的值
  102.         ACALL  ADDBUFF0                   ;分加1
  103. TIME1_3:JNB    P3.2,TIME1_1        ;若p3.2已關,則退出增時,否則繼續循環
  104.         CLR    ET1
  105.         CLR    PT1
  106.         CLR    TR1
  107.         AJMP   START1

  108. ;********************
  109. ;*****時間增1分******
  110. ;********************

  111. ADDBUFF0:MOV   A , MBUFF         ; 若按鍵小于1s,則分增1
  112.         ADD    A , #1
  113.         DA     A
  114.         MOV    MBUFF , A
  115.         ANL    A , #0FH
  116.         MOV    MBUFF1 , A
  117.         MOV    A , MBUFF
  118.         SWAP   A
  119.         ANL    A , #0FH
  120.         MOV    MBUFF2 , A
  121.         MOV    A ,  MBUFF
  122.         CJNE   A , #60H ,  ADDBUFF1
  123.         MOV    MBUFF , #00H
  124.         MOV    MBUFF2 , #00H
  125.         MOV    MBUFF1 , #00H
  126.         MOV    A , HBUFF                      ;時增1
  127.         ADD    A , #1
  128.         DA     A
  129.         MOV    HBUFF , A
  130.         ANL    A , #0FH
  131.         MOV    HBUFF1 , A
  132.         MOV    A , HBUFF
  133.         SWAP   A
  134.         ANL    A , #0FH
  135.         MOV    HBUFF2 , A
  136.         MOV    A , HBUFF
  137.         CJNE   A , #24H , ADDBUFF1     ;若沒到24小時,則不必初值置0
  138.         MOV    HBUFF , #00H
  139.         MOV    HBUFF2 , #00H
  140.         MOV    HBUFF1 , #00H
  141. ADDBUFF1:RET

  142. ;*********************************
  143. ;*int1中斷子程序******************
  144. ;*********************************   

  145. ADJUSTTIME2: NOP
  146.         ACALL  DL100MS
  147.         MOV    C , P3.3
  148.         JC     TIME2_6            ;如果(P3.3按鍵<100ms以上)   則不做處理
  149.         MOV    KEYNUMT2 , #00H    ;否則進入定鬧設置
  150.         MOV    STOREKEYNUMT2 , KEYNUMT2   ;記錄當前NUMT2的數據,以看下次有沒改變
  151. TIME2_1:NOP
  152.         MOV    TH1 , #3CH        ;T1置初值,進行100ms計時,用于調整時間
  153.         MOV    TL1 , #0B0H
  154.         SETB   ET1               ;開T1中斷
  155.         SETB   PT1               ;設T1中斷優先級最高
  156.         SETB   TR1               ;允許T1計時
  157. TIME2_2:ACALL  ALARMDISPLAY
  158.         MOV    A , KEYNUMT2
  159.         CJNE   A , STOREKEYNUMT2 ,TIME2_3
  160.         AJMP   TIME2_4
  161. TIME2_3: MOV    STOREKEYNUMT2 , KEYNUMT2
  162.         MOV    A , ALARMMBUFF              ; 若按鍵小于1s,則分增1
  163.         ADD    A , #1
  164.         DA     A
  165.         MOV    ALARMMBUFF , A
  166.         ANL    A , #0FH
  167.         MOV    ALARMMBUFF1 , A
  168.         MOV    A , ALARMMBUFF
  169.         SWAP   A
  170.         ANL    A , #0FH
  171.         MOV    ALARMMBUFF2 , A
  172.         MOV    A ,  ALARMMBUFF
  173.         CJNE   A , #60H ,  TIME2_4
  174.         MOV    ALARMMBUFF , #00H
  175.         MOV    ALARMMBUFF2 , #00H
  176.         MOV    ALARMMBUFF1 , #00H
  177.         MOV    A , ALARMHBUFF                         ;時增1
  178.         ADD    A , #1
  179.         DA     A
  180.         MOV    ALARMHBUFF , A
  181.         ANL    A , #0FH
  182.         MOV    ALARMHBUFF1 , A
  183.         MOV    A , ALARMHBUFF
  184.         SWAP   A
  185.         ANL    A , #0FH
  186.         MOV    ALARMHBUFF2 , A
  187.         MOV    A , ALARMHBUFF
  188.         CJNE   A , #24H , TIME2_4      ;若沒到24小時,則初值不必置0
  189.         MOV    ALARMHBUFF , #00H
  190.         MOV    ALARMHBUFF2 , #00H
  191.         MOV    ALARMHBUFF1 , #00H
  192. TIME2_4:NOP
  193.         JNB    P3.3,TIME2_2             ;若按鍵已經未按,則退出循環
  194.         CLR    ET1
  195.         CLR    TR1
  196.         MOV    KEYNUMT2 , #00H
  197.         MOV    NUMT2 , #00H
  198.         MOV    R2 , #10             ; 直到p3.3  20s鐘內都是未按,此時復原數據,即退出設置
  199. TIME2_7:MOV    R1 , #200                        
  200. TIME2_5:ACALL  ALARMDISPLAY
  201.         ACALL  DL1MS
  202.         JNB    P3.3 , TIME2_1
  203.         DJNZ   R1 , TIME2_5
  204.         DJNZ   R2 , TIME2_7
  205. TIME2_6:CLR   ET1
  206.         CLR    PT1
  207.         CLR    TR1
  208.         LJMP   START1
  209. ;***********************************
  210. ;**T1中斷子程序*********************
  211. ;***********************************

  212. INTERT1:NOP
  213.         MOV    TH1 , #3CH      ;T1置初值,進行100ms計時,用于調整時間
  214.         MOV    TL1 , #0B0H
  215.         PUSH   ACC
  216.         PUSH   PSW
  217.         CLR    ET0
  218.         CLR    ET1              ;關T1中斷
  219.         MOV    A , NUMT1
  220.         INC    A
  221.         MOV    NUMT1 , A        ;中斷一次則相應的增加NUMT1
  222.         CJNE   A , #5 ,  INTERT1NEXT     ;每中斷五次,即半秒,都增加KEYNUMT1
  223.         MOV    A ,KEYNUMT1
  224.         INC    A
  225.         MOV    KEYNUMT1 , A
  226.         MOV    NUMT1 , #00H       ;NUMT1已經是5了,則處理過KEYNUMT1后,重置NUMT1
  227. INTERT1NEXT:NOP
  228.         MOV    A , NUMT2          ;中斷一次則相應的增加NUMT1
  229.         INC    A
  230.         MOV    NUMT2 , A
  231.         CJNE   A, #5,ENDINTERT1   ;每中斷五次,即半秒,都增加KEYNUMT1
  232.         MOV    A ,   KEYNUMT2
  233.         INC    A
  234.         MOV    KEYNUMT2 , A
  235.         MOV    NUMT2 , #00H       ;NUMT1已經是5了,則處理過KEYNUMT1后,重置NUMT1
  236. ENDINTERT1: SETB   ET1
  237.         SETB   ET0
  238.         POP    ACC
  239.         POP    PSW
  240.         RETI




  241.      ;**************
  242.      ;** 整點報時 **
  243.      ;**************
  244. ZDBS:   MOV    A , MBUFF                  ;在整點時,響半秒
  245.         JNZ    ZDBSEND
  246.         MOV    A , SBUFF
  247.         CJNE   A , #3CH , ZDBSEND
  248.         CLR    P3.2
  249.         ACALL  DL0FIVE
  250.         SETB   P3.2
  251. ZDBSEND:RET

  252.      ;**************
  253.      ;**定鬧顯示子程序**
  254.      ;**************
  255. ALARMDISPLAY: MOV  P1 ,#0FFH                   ;使時的十位亮
  256.         MOV    A , ALARMHBUFF2
  257.         MOVC   A ,  @A+DPTR
  258.         SETB   ACC.7
  259.         MOV    P1 ,  A
  260.         CLR    P3.0
  261.         ACALL  DL1MS
  262.         SETB   P3.0
  263.         MOV    A , ALARMHBUFF1               ;使時的個位亮
  264.         MOVC   A ,  @A+DPTR
  265.         MOV    C ,  DP
  266.         MOV    ACC.7 ,  C
  267.         MOV    P1 ,  A
  268.         CLR    P3.1
  269.         ACALL  DL1MS
  270.         SETB   P3.1
  271.         MOV    A ,ALARMMBUFF2              ;使分的十位亮
  272.         MOVC   A ,  @A+DPTR
  273.         MOV    C ,  DP
  274.         MOV    ACC.7 ,  C
  275.         MOV    P1 ,  A
  276.         CLR    P3.4
  277.         ACALL  DL1MS
  278.         SETB   P3.4
  279.         MOV    A , ALARMMBUFF1       ;使時的個位亮
  280.         MOVC   A ,  @A+DPTR
  281.         SETB   ACC.7
  282.         MOV    P1,A
  283.         CLR    P3.5
  284.         ACALL  DL1MS
  285.         SETB   P3.5
  286.         RET

  287. ;********************************
  288. ;**晚上顯示子程序****************
  289. ;********************************    ;降低顯示的占空比,數碼管進入節能
  290. NIGHTDISPLAY:  NOP
  291.         MOV    P1 ,#0FFH
  292.         MOV    A , HBUFF2
  293.         MOVC   A ,  @A+DPTR
  294.         SETB   ACC.7
  295.         MOV    P1 ,  A
  296.         CLR    P3.0
  297.         ACALL  DL1MS                 ;亮1ms
  298.         SETB   P3.0
  299.         ACALL  DL1MS
  300.         ACALL  DL1MS                 ;暗2ms
  301.         MOV    A , HBUFF1
  302.         MOVC   A ,  @A+DPTR
  303.         MOV    C ,  DP
  304.         MOV    ACC.7 ,  C
  305.         MOV    P1 ,  A
  306.         CLR    P3.1
  307.         ACALL  DL1MS
  308.         SETB   P3.1
  309.         ACALL  DL1MS
  310.         ACALL  DL1MS
  311.         MOV    A ,MBUFF2
  312.         MOVC   A ,  @A+DPTR
  313.         MOV    C ,  DP
  314.         MOV    ACC.7 ,  C
  315.         MOV    P1 ,  A
  316.         CLR    P3.4
  317.         ACALL  DL1MS
  318.         SETB   P3.4
  319.         ACALL  DL1MS
  320.         ACALL  DL1MS
  321.         MOV    A , MBUFF1
  322.         MOVC   A ,  @A+DPTR
  323.         SETB   ACC.7
  324.         MOV    P1,A
  325.         CLR    P3.5
  326.         ACALL  DL1MS
  327.         SETB   P3.5
  328.         ACALL  DL1MS
  329.         ACALL  DL1MS
  330.         RET

  331.      ;**************
  332.      ;**顯示子程序**
  333.      ;**************
  334. DISPLAY: MOV   P1 ,#0FFH
  335.         MOV    A , HBUFF2
  336.         MOVC   A ,  @A+DPTR
  337.         SETB   ACC.7
  338.         MOV    P1 ,  A
  339.         CLR    P3.0
  340.         ACALL  DL1MS
  341.         SETB   P3.0

  342.         MOV    A , HBUFF1
  343.         MOVC   A ,  @A+DPTR
  344.         MOV    C ,  DP
  345.         MOV    ACC.7 ,  C
  346.         MOV    P1 ,  A
  347.         CLR    P3.1
  348.         ACALL  DL1MS
  349.         SETB   P3.1

  350.         MOV    A ,MBUFF2
  351.         MOVC   A ,  @A+DPTR
  352.         MOV    C ,  DP
  353.         MOV    ACC.7 ,  C
  354.         MOV    P1 ,  A
  355.         CLR    P3.4
  356.         ACALL  DL1MS
  357.         SETB   P3.4
  358.         MOV    A , MBUFF1
  359.         MOVC   A ,  @A+DPTR
  360.         SETB   ACC.7
  361.         MOV    P1,A
  362.         CLR    P3.5
  363.         ACALL  DL1MS
  364.         SETB   P3.5
  365.         RET

  366. TAB:    DB 88H,0BBH,94H,91H,0A3H ; 0 1 2 3 4
  367.         DB 0C1H,0C0H,9BH,80H,81H ; 5 6 7 8 9

  368.      ;**************
  369.      ;***延時程序***
  370.      ;**************

  371. DL1MS:  MOV    R6 ,  #20                  ;延時1ms
  372. DL11:   MOV    R7 ,  #25
  373. DL12:   DJNZ   R7 ,  DL12
  374.         DJNZ   R6 ,  DL11
  375.         RET

  376. DL100MS:MOV    R6 ,  #200                 ;延時100ms
  377. DL100MS1:MOV   R7 ,  #250
  378. DL100MS2:DJNZ  R7 ,  DL100MS2
  379.          DJNZ  R6 ,  DL100MS1
  380.          RET

  381. DL11S:  MOV    R5 , #10
  382. DL1S0:  MOV    R6 ,  #200              ;延時1s   10*250*200
  383. DL1S1:  MOV    R7 ,  #250
  384. DL1S2:  DJNZ   R7 ,  DL1S2
  385.         DJNZ   R6 ,  DL1S1
  386.         DJNZ   R5 , DL1S0
  387.         RET

  388. DL0FIVE:MOV    R5 , #5
  389. DL0:    MOV    R6 ,  #100                          ;延時0.5s
  390. DL1:    MOV    R7 ,  #250
  391. DL2:    DJNZ   R7 ,  DL2
  392.         DJNZ   R6 ,  DL1
  393.         DJNZ   R5 , DL0
  394.         RET

  395.      ;**************
  396.      ;*T0中斷子程序*
  397.      ;**************
  398. INTERT0:PUSH   ACC
  399.         PUSH   PSW
  400.         CLR    ET0                            ;關T0中斷
  401.         MOV    A , SBUFF
  402.         CJNE   A ,#028H,  SET1
  403.         MOV    R4 , #0DCH                    ;后四十秒的初值
  404. SET1:   DJNZ   NUM , ENDINTT0               ;若還沒到1s,則退出該次中斷
  405.         MOV    NUM , #8                     ;設置NUM初值
  406.         CPL    DP
  407.         DJNZ   SBUFF , ENDINTT0             ; 若還沒到60s,則退出該次中斷
  408.         MOV    SBUFF , #03CH
  409.         MOV    R4 , #0DBH                   ;前20秒的初值

  410. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

完整論文下載地址(word格式 可編輯):
http://www.zg4o1577.cn/bbs/dpj-86574-1.html



回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品亚洲一区二区三区 | 一级黄色网页 | 国产精品不卡 | 欧美极品在线播放 | 国产一在线观看 | 国产9 9在线 | 中文 | 成人精品鲁一区一区二区 | 成人做爰999 | 99在线播放 | 久久午夜国产精品www忘忧草 | 日韩中文字幕区 | 欧美高清性xxxxhdvideosex | 国产高清免费视频 | 免费国产视频 | 亚洲视频在线播放 | 国产精品视频网 | 人人干人人干人人 | 青草视频在线 | 成av人电影在线 | 午夜视频免费在线 | 午夜免费观看 | 91青青草视频| 成人精品福利 | 亚洲av毛片成人精品 | 欧美一区二区三区在线播放 | 狠狠天天 | 99日韩 | 午夜av成人 | 日本aaaa | 欧美日韩国产一区二区三区 | 日韩成人免费中文字幕 | 久操国产| 国产日韩精品久久 | 国产一区91精品张津瑜 | 99re视频在线观看 | 国产不卡一区 | 一级做a爰片久久毛片免费看 | 亚洲综合国产 | 久久不卡日韩美女 | 久久久一| 一级毛片大全免费播放 |