




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、方案分析論文基于stc89c52單片機控制電熱水壺溫度的設計中文摘要隨著微機測量和控制技術的迅速發展與廣泛應用,以單片機為核心的溫度采集與控制系統的研發與應用在很大程度上提高了生產生活中對溫度的控制水平。本設計論述了一種以stc89c52單片機為主控制單元,以ds18b20為溫度傳感器的溫度控制系統。該控制系統可以實時存儲相關的溫度數據并記錄當前的時間。系統設計了相關的硬件電路和相關應用程序。硬件電路主要包括stc89c52單片機最小系統,測溫電路、實時時鐘電路、lcd液晶顯示電路以及通訊模塊電路等。系統程序主要包括主程序,讀出溫度子程序,計算溫度子程序、按鍵處理程序、lcd顯示程序以及數據存
2、儲程序等。關鍵詞:stc89c52單片機;ds18b20;顯示電路目 錄一、引言4(一)課題研究的背景4(二)課題研究的目的和意義5二、硬件電路的設計5(一)系統設計的框架5(二)單片機最小系統電路6(三)單片機的選型61.stc89c52單片機簡介62.stc89c52單片機時序73.stc89c52單片機引腳介紹7(四)溫度傳感器電路9(五)系統電源電路的設計10(六)lcd顯示電路11(七)串口通訊電路12(八)按鍵接口電路13(九)ds1302時鐘電路13(十)存儲器接口電路13三、系統軟件設計14(一)計算溫度子程序15(二)按鍵處理子程序15(三)計算溫度子程序16(四)顯示數據刷
3、新子程序17四、結束語18參考文獻19致謝20附件1:系統原理圖21附件2:系統相關程序22一、ds18b20底層驅動程序22二、ds1302時鐘底層驅動程序27三、數據存儲底層驅動程序33一、引言(一)課題研究的背景工業控制是計算機的一個重要應用領域,計算機控制系統正是為了適應這一領域的需要而發展起來的一門專業技術,它主要研究如何將計算機技術、通過信息技術和自動控制理論應用于工業生產過程,并設計出所需要的計算機控制系統。隨著微機測量和控制技術的迅速發展與廣泛應用,以單片機為核心的溫度采集與控制系統的研發與應用在很大程度上提高了生產生活中對溫度的控制水平。本設計就是基于單片機stc89c52溫
4、度控制系統的設計,通過本次課程實踐,我們更加的明確了單片機的廣泛用途和使用方法,以及其工作的原理。(二)課題研究的目的和意義隨著社會的發展,溫度的測量及控制變得越來越重要。本文采用單片機stc89c52設計了溫度實時測量及控制系統。單片機stc89c52 能夠根據溫度傳感器ds18b20 所采集的溫度在液晶屏上實時顯示,通過控制從而把溫度控制在設定的范圍之內。所有溫度數據均通過液晶顯示器lcd顯示出來。系統可以根據時鐘存儲相關的數據。通過該課程的學習使我們對計算機控制系統有一個全面的了解、掌握常規控制算法的使用方法、掌握簡單微型計算機應用系統軟硬的設計方法,進一步鍛煉同學們在微型計算機應用方面
5、的實際工作能力。二、硬件電路的設計(一)系統設計的框架本課題設計的是一種以stc89c52單片機為主控制單元,以ds18b20為溫度傳感器的溫度控制系統。該控制系統可以實時存儲相關的溫度數據并記錄當前的時間。其主要包括:電源模塊、溫度采集模塊、按鍵處理模塊、實時時鐘模塊、數據存儲模塊、lcd顯示模塊、通訊模塊以及單片機最小系統。圖1 系統設計框架(二)單片機最小系統電路在課題設計的溫度控制系統設計中,控制核心是stc89c52單片機,該單片機為51系列增強型8位單片機,它有32個i/o口,片內含4k flash工藝的程序存儲器,便于用電的方式瞬間擦除和改寫,而且價格便宜,其外部晶振為12mhz
6、,一個指令周期為1s。使用該單片機完全可以完成設計任務,其最小系統主要包括:復位電路、震蕩電路以及存儲器選擇模式(ea腳的高低電平選擇),電路如下圖2所示:圖2 單片機最小系統(三)單片機的選型本課題設計的溫度控制系統主控制芯片選型為stc89c52單片機,其特點如下:1.stc89c52單片機簡介目前,51系列單片機在工業檢測領域中得到了廣泛的應用,因此我們可以在許多單片機應用領域中,配接各種類型的語音接口,構成具有合成語音輸出能力的綜合應用系統,以增強人機對話的功能。stc89c52單片機是深圳宏晶科技有限公司生產的一種單片機,在一小塊芯片上集成了一個微型計算機的各個組成部分。每一個單片機
7、包括:一個8位的微型處理器cpu;一個512k的片內數據存儲器ram;4k片內程序存儲器;四個8位并行的i/o接口p0-p3,每個接口既可以輸入,也可以輸出;兩個定時器/記數器;五個中斷源的中斷控制系統;一個全雙工uart的串行i/o口;片內振蕩器和時鐘產生電路,但石英晶體和微調電容需要外接。最高允許振蕩頻率是12mhz。以上各個部分通過內部總線相連接。2.stc89c52單片機時序 stc89c52單片機的一個執器周期由6個狀態(s1s6)組成,每個狀態又持續2個震蕩周期,分為p1和p2兩個節拍。這樣,一個機器周期由12個振蕩周期組成。若采用12mhz的晶體振蕩器,則每個機器周期為1us,每
8、個狀態周期為16us;在一數情況下,算術和邏輯操作發生在n期間,而內部寄存器到寄存器的傳輸發生在p2期間。對于單周期指令,當指令操作碼讀人指令寄存器時,使從s1p2開始執行指令。如果是雙字節指令,則在同一機器周期的s4讀人第二字節。若為單字節指令,則在51期間仍進行讀,但所讀入的字節操作碼被忽略,且程序計數據也不加1。在加結束時完成指令操作。多數stc89c52指令周期為12個機器周期,只有乘法和除法指令需要兩個以上機器周期的指令,它們需4個機器周期。 對于雙字節單機器指令,通常是在一個機器周期內從程序存儲器中讀人兩個字節,但movx指令例外,movx指令是訪問外部數據存儲器的單字節雙機器周期
9、指令,在執行movx指令期間,外部數據存儲器被訪問且被選通時跳過兩次取指操作。3.stc89c52單片機引腳介紹stc89c52單片機的40個引腳中有2個專用于主電源引腳,2個外接晶振的引腳,4個控制或與其它電源復用的引腳,以及32條輸入輸出i/o引腳。下面按引腳功能分為4個部分敘述個引腳的功能。(1)電源引腳vcc和vssvcc(40腳):接+5v電源正端;vss(20腳):接+5v電源正端。(2)外接晶振引腳xtal1和xtal2xtal1(19腳):接外部石英晶體的一端。在單片機內部,它是一個反相放大器的輸入端,這個放大器構成采用外部時鐘時,對于hmos單片機,該引腳接地;對于choms
10、單片機,該引腳作為外部振蕩信號的輸入端。xtal2(18腳):接外部晶體的另一端。在單片機內部,接至片內振蕩器的反相放大器的輸出端。當采用外部時鐘時,對于hmos單片機,該引腳作為外部振蕩信號的輸入端。對于chmos芯片,該引腳懸空不接。(3)控制信號或與其它電源復用引腳 控制信號或與其它電源復用引腳有rst/vpd、ale/p、psen和ea/vpp等4種形式。(a)rst/vpd(9腳):rst即為reset,vpd為備用電源,所以該引腳為單片機的上電復位或掉電保護端。當單片機振蕩器工作時,該引腳上出現持續兩個機器周期的高電平,就可實現復位操作,使單片機復位到初始狀態。當vcc發生故障,降
11、低到低電平規定值或掉電時,該引腳可接上備用電源vpd(+5v)為內部ram供電,以保證ram中的數據不丟失。(b)ale/ p (30腳):當訪問外部存儲器時,ale(允許地址鎖存信號)以每機器周期兩次的信號輸出,用于鎖存出現在p0口的低(c)psen(29腳):片外程序存儲器讀選通輸出端,低電平有效。當從外部程序存儲器讀取指令或常數期間,每個機器周期pesn兩次有效,以通過數據總線口讀回指令或常數。當訪問外部數據存儲器期間,pesn信號將不出現。(d)ea/vpp(31腳):ea為訪問外部程序儲器控制信號,低電平有效。當ea端保持高電平時,單片機訪問片內程序存儲器4kb(ms52子系列為8k
12、b)。若超出該范圍時,自動轉去執行外部程序存儲器的程序。當ea端保持低電平時,無論片內有無程序存儲器,均只訪問外部程序存儲器。對于片內含有eprom的單片機,在eprom編程期間,該引腳用于接21v的編程電源vpp。 (4)輸入/輸出(i/o)引腳p0口、p1口、p2口及p3口(a).p0口(39腳22腳):p0.0p0.7統稱為p0口。當不接外部存儲器與不擴展i/o接口時,它可作為準雙向8位輸入/輸出接口。當接有外部程序存儲器或擴展i/o口時,p0口為地址/數據分時復用口。它分時提供8位雙向數據總線。對于片內含有eprom的單片機,當eprom編程時,從p0口輸入指令字節,而當檢驗程序時,則
13、輸出指令字節。(b).p1口(1腳8腳):p1.0p1.7統稱為p1口,可作為準雙向i/o接口使用。對于mcs52子系列單片機,p1.0和p1.1還有第2功能:p1.0口用作定時器/計數器2的計數脈沖輸入端t2;p1.1用作定時器/計數器2的外部控制端t2ex。對于eprom編程和進行程序校驗時,p0口接收輸入的低8位地址。(c).p2口(21腳28腳):p2.0p2.7統稱為p2口,一般可作為準雙向i/o接口。當接有外部程序存儲器或擴展i/o接口且尋址范圍超過256個字節時,p2口用于高8位地址總線送出高8位地址。對于eprom編程和進行程序校驗時,p2口接收輸入的8位地址。(d).p3口(
14、10腳17腳):p3.0p3.7統稱為p3口。它為雙功能口,可以作為一般的準雙向i/o接口,也可以將每1位用于第2功能,而且p3口的每一條引腳均可獨立定義為第1功能的輸入輸出或第2功能。p3口的第2功能見下表 表1 單片機p3.0管腳含義引腳第2功能p3.0rxd(串行口輸入端0)p3.1txd(串行口輸出端)p3.2int0(部中斷0請求輸入端,低電平有效)p3.3int1(中斷1請求輸入端,低電平有效)p3.4t0(時器/計數器0計數脈沖端)p3.5t1(時器/計數器1數脈沖端)p3.6wr(部數據存儲器寫選通信號輸出端,低電平有效)p3.7rd(部數據存儲器讀選通信號輸出端,低電平有效)
15、綜上所述,mcs51系列單片機的引腳作用可歸納為以下兩點:1).單片機功能多,引腳數少,因而許多引腳具有第2功能;2).單片機對外呈3總線形式,由p2、p0口組成16位地址總線;由p0口分時復用作為數據總線。(四)溫度傳感器電路采用一線制數字溫度傳感器ds18b20來作為本課題的溫度傳感器。傳感器輸出信號進4.7k的上拉電阻直接接到單片機的p1.0引腳上。ds18b20溫度傳感器是美國達拉斯(dallas)半導體公司推出的應用單總線技術的數字溫度傳感器。該器件將半導體溫敏器件、a/d轉換器、存儲器等做在一個很小的集成電路芯片上。本設計中溫度傳感器之所以選擇單線數字器件ds18b20,是在經過多
16、方面比較和考慮后決定的,主要有以下幾方面的原因:(1)系統的特性:測溫范圍為-55+125 ,測溫精度為士0.5;溫度轉換精度912位可變,能夠直接將溫度轉換值以16位二進制數碼的方式串行輸出;12位精度轉換的最大時間為750ms;可以通過數據線供電,具有超低功耗工作方式。(2)系統成本:由于計算機技術和微電子技術的發展,新型大規模集成電路功能越來越強大,體積越來越小,而價格也越來越低。一支ds18b20的體積與普通三極管相差無幾,價格只有十元人民幣左右。(3)系統復雜度:由于ds18b20是單總線器件,微處理器與其接口時僅需占用1個i/o端口且一條總線上可以掛接幾十個ds18b20,測溫時無
17、需任何外部元件,因此,與模擬傳感器相比,可以大大減少接線的數量,降低系統的復雜度,減少工程的施工量。(4)系統的調試和維護:由于引線的減少,使得系統接口大為簡化,給系統的調試帶來方便。同時因為ds18b20是全數字元器件,故障率很低,抗干擾性強,因此,減少了系統的日常維護工作。ds18b20溫度傳感器只有三根外引線:單線數據傳輸總線端口dq ,外供電源線vdd,共用地線gnd。ds18b20有兩種供電方式:一種為數據線供電方式,此時vdd接地,它是通過內部電容在空閑時從數據線獲取能量,來完成溫度轉換,相應的完成溫度轉換的時間較長。這種情況下,用單片機的一個i/o口來完成對ds18b20總線的上
18、拉。另一種是外部供電方式(vdd接+5v),相應的完成溫度測量的時間較短。在本設計中采用外部供電方式實現ds18b20傳感器與單片機的連接,其接口電路如圖4所示。圖4 溫度傳感器接口(五)系統電源電路的設計本系統采用電源穩壓芯片是lm2596,該開關電壓調節器是降壓型電源管理單片集成電路,能夠輸出3a的驅動電流,輸入電壓是+5v,輸入電壓是+24v,同時具有很好的線性和負載調節特性。該器件內部集成頻率補償和固定頻率發生器,開關頻率為150khz,與低頻開關調節器相比較,可以使用更小規格的濾波元件。 該器件還有其他一些特點:在特定的輸入電壓和輸出負載的條件下,輸出電壓的誤差可以保證在±
19、4%的范圍內,振蕩頻率誤差在±15%的范圍內;可以用僅80a的待機電流,實現外部斷電;具有自我保護電路(一個兩級降頻限流保護和一個在異常情況下斷電的過溫完全保護電路)在該溫度控制系統中,其電源電路設計如下圖10所示。圖5 系統電源模塊(六)lcd顯示電路本課題設計的溫度控制系統是采用液晶屏128*64作為顯示模塊,其接口原理圖如下圖6所示:圖6 液晶顯示接口電路(七)串口通訊電路本課題設計的通訊采用的是常見的串口通訊,協議轉換芯片是采用max232a,其接口原理圖如下圖7所示:圖6 串口通訊接口電路(八)按鍵接口電路本課題設計采用的鍵盤模塊,其接口原理圖如下圖8所示:圖8 鍵盤模塊電
20、路(九)ds1302時鐘電路本課題設計的時鐘是采用時鐘芯片ds1302,其接口原理圖如下圖9所示:圖9 時鐘接口電路(十)存儲器接口電路本課題設計的存儲器采用的是at24c256,其接口原理圖如下圖十所示:圖10 存儲器電路三、系統軟件設計系統的軟件主要是采用c語言,對單片機進行變成實現各項功能。主程序對模塊進行初始化,而后調用讀溫度、處理溫度、顯示、鍵盤等模塊。用的是循環查詢方式,來顯示和控制溫度,主程序的主要功能是負責溫度的實時顯示、讀出并處理ds18b20的測量的當前溫度值并負責調用各子程序,其程序流程如圖10系統程序流程圖。開始初始化啟動db18b20讀溫度計算溫度lcd顯示圖10系統
21、程序流程圖(一)計算溫度子程序 讀出溫度子程序的主要功能包括初始化,判斷ds18b20是否存在,若存在則進行一系列的讀操,作若不存在則返回。其程序流程圖如圖11所示。圖11 讀溫度流程圖 (二)按鍵處理子程序 按鍵處理子程序主要是負責參數的設置,主程序每循環一次都要對按鍵進行掃描,判斷是否有輸入鍵按下則進行一系列的按鍵輸入操作。其程序流程框圖如圖12所示。圖12 溫度轉換流程圖(三)計算溫度子程序計算溫度子程序將ram中讀取值進行bcd碼的轉換運算,并進行溫度值正負的判定,其程序流程圖如圖13所示。 開始溫度零下?溫度值取補碼置“”標志計算小數位溫度bcd值計算整數位溫度bcd值 結束置“+”
22、標志ny圖13 計算溫度子程序(四)顯示數據刷新子程序顯示數據刷新子程序主要是對顯示緩沖器中的顯示數據進行刷新操作,當最高顯示位為0時將符號顯示位移入下一位。程序流程圖如圖14。溫度數據移入顯示寄存器十位數0?百位數0?十位數顯示符號百位數不顯示百位數顯示數據(不顯示符號) 結束nnyy圖14 數據刷新子程序四、結束語通過此次畢業論文的課題設計,我們學會了怎樣把所學的書本知識應用于實踐中去,并學會了如何去思考整個控制系統的軟硬件設計。實踐過程中我們遇到了一些困難,但在解決問題的過程中,我們學會了團隊合作精神和怎樣發現問題、分析問題,進而解決問題。此次課程設計不僅增強了我們學習專業課的興趣,而且
23、給了我們勇氣和信心,更重要的是它為我們以后的學習指明了方向。參考文獻1 李廣弟,朱月秀,王秀山.單片機基礎北京航空航天大學出版社,2001(07).2 蔡美琴,張為民等.mcs-51系列單片機系統及其應用高等教育出版社,2004(06).3 張毅剛,等.mcs-51單片機應用設計m.哈爾濱工業大學出版社,1997.4 劉瑞星,胡健等.protel dxp 實用教程機械工業出版社,2003(04).5 于海生. 計算機控制技術 機械工業出版社 2007(05).6 譚浩強. c程序設計 清華大學出版社.7 康華光. 電子技術基礎 模擬部分 高等教育出版社 1998(08).8 余錫存. 單片機原
24、理與接口技術 西安電子科技大學出版社,2003.致謝本論文是在我的指導老師密切關心和悉心指導下完成的。老師在課題開題期間和論文寫作的過程中給予了我許多指導,導師總是以認真負責、一絲不茍的工作態度閱讀并修改文章中不足的地方,他優良的作風和嚴謹治學的態度深深影響著我,至此,向恩師致以最真摯的感謝和最崇高的敬意!同時我要感謝我的同學,特別是我的室友們,正是他們在這幾年里陪我一起成長,一起學習,才讓我有了今天的成績。他們在平時的學習和生活中他們給予了我無私的關懷和幫助,在此表示我最誠摯的謝意。附件1:系統原理圖附件2:系統相關程序一、ds18b20底層驅動程序/延時 n ms/ds1820引腳定義sb
25、it tmdat =p10;void ds1820_delaycount (unsigned char coun) data unsigned char count; count=coun; while(count>0) count-; count=coun; while(count>0) count-;/復位ds18b20void ds1820_reset(void) tmdat=0; ds1820_delaycount(412); tmdat=1; ds1820_delaycount(16); /等待ds18b20應答unsigned char ds1820_answer(vo
26、id)data unsigned int i;data unsigned char j; i=0xc000; while(tmdat) i-;if (i=0)return(aban_return); i=0xffff; j=3; while(tmdat) i-;if (i=0) if(j=0) return(aban_return); else j-; i=0xffff; ds1820_delaycount(16); return(done_return);/等待ds18b20應答/讀取位bit ds1820_readbit(void) data int i=0; bit dat; tmdat
27、=0;i+;i+;i+;i+; tmdat=1;i+;i+;i+;i+;i+;i+;i+;i+; dat = tmdat;/ ds1820_delaycount(8); ds1820_delaycount(32); return dat;/讀取字節unsigned char ds1820_readbyte(void)data unsigned char i,j,dat=0; for(i=1;i<=8;i+) j=ds1820_readbit(); dat=(j<<7)|(dat>>1); return dat;/寫一個字節void ds1820_writebyte
28、(unsigned char dat) data signed char i=0; data unsigned char j; bit testb; for(j=1;j<=8;j+) testb=dat & 0x01; dat = dat>>1; if(testb) tmdat=0; i+;i+;i+;i+;i+;i+;i+;i+; tmdat=1; /ds1820_delaycount(8); ds1820_delaycount(32); else tmdat=0; /ds1820_delaycount(8); ds1820_delaycount(32); tmda
29、t=1; i+;i+;i+;i+;i+;i+;i+;i+; /讀操作開始unsigned char ds1820_starttem(void) ea=0; ds1820_reset(); if(ds1820_answer()=aban_return) ea=ea; return(aban_return); / ds1820_delayms(1); ds1820_delayms(4); ds1820_writebyte(0xcc); / ds1820_writebyte(0x55); / for(i=0;i<8;i+) /ds1820_writebyte(ds1820_tempi); ds
30、1820_writebyte(0x44); ea=ea; return(done_return);/讀所有傳感器int ds1820_readtem(void)data unsigned char a,b;data int y3;data float y4;data unsigned char i; ea=0; ds1820_reset(); if(ds1820_answer()=aban_return) ea=ea; return(0xffff); ds1820_delayms(4); ds1820_writebyte(0xcc); /跳過匹配傳感器 /ds1820_writebyte(0x
31、55); /匹配傳感器 / for(i=0;i<8;i+) /ds1820_writebyte(run_inf.system_index.ds1820_tempi); ds1820_writebyte(0xbe); /讀取溫度 for(i=0;i<9;i+) run_inf.system_index.ds1820_tempi=ds1820_readbyte(); if(crc(9)!=0) ea=1; return(0xffff); /計算crc a = run_inf.system_index.ds1820_temp0; b = run_inf.system_index.ds18
32、20_temp1; ds1820_reset(); y3 = (b<< 8)|a; y4=y3; y4=(y4*25)/4; ea=1; return(int)(y4);二、ds1302時鐘底層驅動程序/ds1302引腳定義sbit rtc_sc=p34;sbit rtc_io=p35;sbit rst_1302=p36;bdata unsigned char temp;sbit temp_0 = temp0;sbit temp_7 = temp7;/*ds1302驅動程序開始*/功能: 往ds1302寫入1byte數據void v_rtinputbyte(unsigned cha
33、r ucda) unsigned char i;temp = ucda;for(i=8; i>0; i-)rtc_io = temp_0; /*相當于匯編中的 rrc */rtc_sc = 1;rtc_sc = 0;temp = temp >> 1; /功能: 從ds1302讀取1byte數據unsigned char uc_rtoutputbyte(void) unsigned char i;rtc_io=1;for(i=8; i>0; i-) temp = temp >>1; /*相當于匯編中的 rrc */ temp_7 = rtc_io; rtc_s
34、c = 1; rtc_sc = 0; return(temp); /功能: 往ds1302寫入數據void write1302(unsigned char ucaddr,unsigned char ucda) bit ea; ea=ea; ea=0;rtc_rs_port&=(rtc_rs_bit);rtc_sc = 0;rtc_rs_port|=rtc_rs_bit;v_rtinputbyte(ucaddr); /* 地址,命令 */v_rtinputbyte(ucda); /* 寫1byte數據*/rtc_sc = 1;rtc_rs_port&=(rtc_rs_bit);e
35、a = ea; /功能: 讀取ds1302某地址的數據unsigned char read1302(unsigned char ucaddr)unsigned char ucda; bit ea; ea=ea; ea=0;rtc_rs_port&=(rtc_rs_bit);rtc_sc = 0;rtc_rs_port|=rtc_rs_bit;v_rtinputbyte(ucaddr); /* 地址,命令 */ucda = uc_rtoutputbyte(); /* 讀1byte數據 */rtc_sc = 1;rtc_rs_port&=(rtc_rs_bit);ea = ea;r
36、eturn(ucda);/功能: 設置初始時間void set1302(ptime_s time_temp) unsigned char i= 0x80; write1302(0x8e,0x00); /* 控制命令,wp=0,寫操作*/ write1302(i,time_temp->sec); i +=2; write1302(i,time_temp->min); i +=2; write1302(i,time_temp->hou); i +=2; write1302(i,time_temp->day); i +=2; write1302(i,time_temp->
37、;mon); i +=2; write1302(i,0x02); i +=2; write1302(i,time_temp->yea); i +=2; write1302(0x8e,0x80); /* 控制命令,wp=1,寫保護*/功能: 讀取ds1302當前時間void get1302(void) unsigned char i,time_bcd_temp6;unsigned char ucaddr = 0x81;for (i=0;i<7;i+) time_bcd_tempi = read1302(ucaddr);/*格式為: 秒 分 時 日 月 星期 年 */ ucaddr +
38、= 2; sec=time_bcd_temp0;min=time_bcd_temp1;hou=time_bcd_temp2;day=time_bcd_temp3;mon=time_bcd_temp4;yea=time_bcd_temp6; /連續6字節讀出程序void ds1302_read(unsigned char *ptr,unsigned char addr) unsigned char i;addr=addr*2+0x0c1;for(i=0;i<6;i+) *(ptr+i)=read1302(addr); addr+=2; /連續6字節寫入程序void ds1302_write
39、(unsigned char *ptr,unsigned char addr)unsigned char i;addr=addr*2+0x0c0;write1302(0x8e,0x00); /寫保護置低(關閉)for(i=0;i<6;i+) write1302(addr,*(ptr+i); addr+=2; write1302(0x8e,0x80); /寫保護置高(打開) void start1302(void) unsigned char temp; bit ea; ea=ea; ea=0; temp=read1302(0x81); temp&=0x7f; write1302(
40、0x8e,0x00); /* 控制命令,wp=0,寫操作*/ write1302(0x80,temp); write1302(0x90,0); write1302(0x8e,0x80); /* 控制命令,wp=1,寫保護*/ ea=ea;/ds1302驅動程序結束三、數據存儲底層驅動程序/atc256引腳定義sbit epr_sd=p33;sbit epr_sc=p32;bdata unsigned char temp1;sbit temp1_0 = temp10;sbit temp1_7 = temp17;/存儲器驅動程序開始void noack(void) epr_sd=1; epr_sc
41、=1; epr_sc=1; epr_sc=1; epr_sc=0;void ask()unsigned char i=0xff; epr_sd=1; epr_sc=1; epr_sc=1; epr_sc=1;doi-; if(epr_sd=0) epr_sc=0; i=0; while(i!=0);epr_sd=1;epr_sd=1;epr_sd=1;void stop() epr_sd=0; epr_sd=0; epr_sd=0; epr_sc=1; epr_sc=1; epr_sc=1; epr_sd=1; epr_sd=1; epr_sd=1; epr_sd=1;/24c256 star
42、tvoid start()epr_sc=1;epr_sd=1;epr_sd=1; epr_sd=0; epr_sd=0; epr_sc=0;void wrby(unsigned char x) unsigned char i; epr_sc=0;temp1=x;for(i=0;i<8;i+) /從高位開始傳送數據 epr_sd=temp1_7; temp1=temp1<<1; /左移一位 epr_sc=1; epr_sc=1; epr_sc=1; epr_sc=1; epr_sc=0; /24c256 rdby unsigned char rdby() /從高位開始讀出數據
43、unsigned char i;epr_sd=1;epr_sd=1;epr_sd=1;for(i=0;i<8;i+) epr_sc=1;epr_sc=1; temp1=temp1<<1; temp1_0=epr_sd; epr_sc=0; epr_sc=0;epr_sc=0; return(temp1);/24c256 waddr void waddr() start(); wrby(0xa0); ask();/24c256 raddrunsigned char raddr() start(); wrby(0xa1); ask(); temp1=rdby(); noack()
44、; stop(); return(temp1);void w16addr(unsigned int x) union unsigned int int_type;unsigned char char_type1; u_int_char;unsigned m,n;u_int__type=x; /將x的高位賦給m,低位賦給nm=u_int_char.char_type0;n=u_int_char.char_type1; wrby(m ); ask(); wrby(n ); ask();/延時void d5ms() unsigned char a, b; for (a=0;a<
45、=15;a+) for (b=0;b<0x7f;b+) ; /24c256 讀出一字節 unsigned char epr_read(unsigned int x) bit ea; ea=ea; ea=0; /關中斷 epr_wen; d5ms(); waddr(); w16addr(x); temp1=raddr(); ea=ea;/開中斷 return(temp1);/24c256 寫入一字節void epr_write(unsigned int f,unsigned char x) bit ea; ea=ea; ea=0 ; /關中斷 d5ms(); waddr(); w16add
46、r(f); wrby(x); ask(); stop(); d5ms();ea=ea; /開中斷/存儲器驅動程序結束匯編部分:temperature_l data 31h ;ds18b20低8位buffertemperature_h data 30h ;ds18b20高8位buffer temperature_hc data 32h ;計算后的百位和十位的bcd碼存放;buffer temperature_lc data 33h ;計算后的個位和小數位的bcd碼存放 temperature_zh data 34h ; 計算后十位和個位hex碼的存放bufferdis_buf_x data 35
47、h ;數碼管小數位buffer dis_buf_g data 36h ;數碼管個位buffer dis_buf_s data 37h ;數碼管十位buffer dis_buf_b data 38h ;數碼管百位buffer key_buf_g data 39h ;鍵盤輸入后,的個位值 key_buf_s data 49h ;鍵盤輸入后,的十位值 key_buf_b data 41h ;鍵盤輸入后,的百位值 k_up equ p1.1 ;上調按鈕 k_down equ p1.2 ;下調按鈕 k_enter equ p1.0 ;輸入數據確認按鈕 p_ds18b20 equ p3.0 ;讀取ds18b20的輸入端口 p_switch equ p3.1 ;可控硅控制 flag equ 20h.0 ;標志位,確定是否存在ds18b20 enter_flag equ 20h.1 ;鍵盤輸入的標志位, org 0000h ljmp main org 0100hmain: mov sp,#60h ;初始化 mov key_buf_g,#00h ;由于key
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 房地產銷售合同范本
- 創新創業基礎教程 課件 模塊二 創業機會識別
- 四川城市職業學院《醫學微生物學C》2023-2024學年第一學期期末試卷
- 長春早期教育職業學院《日語(1)》2023-2024學年第一學期期末試卷
- 山東財經大學東方學院《數字化人力資源管理》2023-2024學年第二學期期末試卷
- 山西省(運城地區)達標名校2024-2025學年初三保溫練習(二)生物試題含解析
- 江蘇省射陽實驗初中2025年初三下學期入學考試試生物試題理試卷含解析
- 個人按揭借款合同模板
- 通化師范學院《英語視聽說實驗教學》2023-2024學年第一學期期末試卷
- 民和回族土族自治縣2024-2025學年小升初數學自主招生備考卷含解析
- 房產稅對產業轉移的影響-來自重慶和上海的經驗證據
- 園林植物器官的識別-園林植物生殖器官的識別
- 醫院總務科的工作總結
- 手衛生與多重耐藥菌的消毒隔離護理課件
- 《生物醫學工程導論》課件
- 七年級語文下冊期中試卷含答案【部編版】
- 二手車鑒定評估報告書(范本)
- 招錄事業編人員政審表
- 西鐵計202119號 中國鐵路西安局集團有限公司關于印發《西安局集團公司地方涉鐵工程建設管理辦法》的通知2021-01-25
- 小學教育教學常規工作精細化管理實施方案
- 【小米公司財務共享服務中心的構建與運行探究8200字(論文)】
評論
0/150
提交評論