模擬電子秤仿真實驗報告_第1頁
模擬電子秤仿真實驗報告_第2頁
模擬電子秤仿真實驗報告_第3頁
模擬電子秤仿真實驗報告_第4頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、.阿壩師范高等??茖W(xué)校電子信息工程系課程設(shè)計模擬電子秤仿真設(shè)計學(xué)生姓名樊益明專業(yè)名稱計算機(jī)控制技術(shù)班級計控班學(xué)號20113079阿壩師范高等??茖W(xué)校電子信息工程系二一三年四月'.模擬電子秤設(shè)計報告一、設(shè)計原理及要求設(shè)計原理:電子秤系統(tǒng)設(shè)計框圖大致如圖1 所示:四個定值電阻加一利用差分放大電個電位器,模擬應(yīng)路,對采集到的微小變式傳感器 , 電壓放大到 05V 采集微小的電壓信號ADC0832:8 位 2 進(jìn)制模數(shù)轉(zhuǎn)換器;將放大的電壓信號轉(zhuǎn)化為數(shù)值信號,方便單片機(jī)的處理MM74C922:鍵盤解碼器,方便了對 4x4 鍵盤的掃描。鍵盤的作用主要在單價的輸入上。51 單片機(jī) :處理和控制單元,

2、整個模擬仿真的靈魂原件。 1、將 ADC0832 轉(zhuǎn)化來的數(shù)據(jù)處理后存放在重量( Wight )并用LCD 顯示; 2、將鍵盤輸入的數(shù)據(jù)賦給單價( Price); 3、將總價( Total_price )計算出來,并顯示圖 1 系統(tǒng)整體設(shè)計框圖設(shè)計要求:1、要求單價由鍵盤輸入;2、重量的精度能夠達(dá)到十分之一千克;'.3、按鍵有提示音;4、有去皮的功能;二、主要硬件及仿真軟件硬件:(一)、 ADC0832ADC0832是一種8 位分辨率、雙通道A/D 轉(zhuǎn)換芯片。由于它體積小,兼容性,性價比高而深受單片機(jī)愛好者及企業(yè)歡迎。圖2.1 為 ADC0832 在 Proteus 中的邏輯符號圖 2

3、.1 ADC0832 邏輯符號芯片接口說明:CS 片選使能,低電平芯片使能;CH0 模擬輸入通道0,或作為IN+/- 使用。CH1 模擬輸入通道1,或作為IN+/- 使用。GND 芯片參考 0 電位(地)。DI 數(shù)據(jù)信號輸入,選擇通道控制。DO 數(shù)據(jù)信號輸出,轉(zhuǎn)換數(shù)據(jù)輸出。CLK 芯片時鐘輸入。Vcc/REF 電源輸入及參考電壓輸入(復(fù)用)。單片機(jī)對 ADC0832 的控制原理:正常情況下ADC0832 與單片機(jī)的接口應(yīng)為4 條數(shù)據(jù)線,分別是CS、CLK 、 DO、 DI 但由于 DO端與 DI 端在通信時并未同時有效并與單片機(jī)的接口是雙向的,所以電路設(shè)計時可以將DO 和 DI 并聯(lián)在一根數(shù)據(jù)

4、線上使用。(見圖3.6)當(dāng) ADC0832 未工作時其CS 輸入端應(yīng)為高電平,此時芯片禁用, CLK 和DO/DI 的電平可任意。當(dāng)要進(jìn)行A/D 轉(zhuǎn)換時,須先將CS 使能端置于低電平并且保持低電平直到轉(zhuǎn)換完全結(jié)束。此時芯片開始轉(zhuǎn)換工作,同時由處理器向芯片時鐘輸入端CLK 輸入時鐘脈沖, DO/DI 端則使用DI 端輸入通道功能選擇的數(shù)據(jù)信號。在第1 個時鐘脈沖的下沉之前DI 端必須是高電平,表示啟始信號。在第2、 3 個脈沖下沉之前DI 端應(yīng)輸入2 位數(shù)據(jù)用于選擇通道功能,其功能項見表1。'.表 1如表 1 所示,當(dāng)此2 位數(shù)據(jù)為“ 1”、“ 0”時,只對CH0 進(jìn)行單通道轉(zhuǎn)換。當(dāng)2

5、位數(shù)據(jù)為“ 1”、“ 1”時,只對 CH1 進(jìn)行單通道轉(zhuǎn)換。當(dāng)2 位數(shù)據(jù)為“ 0”、“ 0”時,將 CH0 作為正輸入端 IN+ , CH1 作為負(fù)輸入端 IN- 進(jìn)行輸入。當(dāng)2位數(shù)據(jù)為“ 0”、“ 1”時,將 CH0 作為負(fù)輸入端IN- , CH1 作為正輸入端 IN+ 進(jìn)行輸入。所以我們利用前1 2個脈沖來設(shè)置 ADC0832 的通道選擇,到第 3 個脈沖的下沉之后 DI 端的輸入電平就失去輸入作用,此后DO/DI 端則開始利用數(shù)據(jù)輸出 DO 進(jìn)行轉(zhuǎn)換數(shù)據(jù)的讀取。從第4 個脈沖下沉開始由DO 端輸出轉(zhuǎn)換數(shù)據(jù)最高位 DATA7 ,隨后每一個脈沖下沉 DO 端輸出下一位數(shù)據(jù)。直到第11 個脈沖

6、時發(fā)出最低位數(shù)據(jù)DATA0 ,一個字節(jié)的數(shù)據(jù)輸出完成。也正是從此位開始輸出下一個相反字節(jié)的數(shù)據(jù),即從第11 個字節(jié)的下沉輸出DATD0 。隨后輸出 8 位數(shù)據(jù),到第19 個脈沖時數(shù)據(jù)輸出完成,也標(biāo)志著一次A/D 轉(zhuǎn)換的結(jié)束。最后將 CS 置高電平禁用芯片,直接將轉(zhuǎn)換后的數(shù)據(jù)進(jìn)行處理就可以了。更詳細(xì)的時序說明請見圖2.2(圖 2.2為ADC0832 的時序圖)。圖 2.2 ADC0832 時序圖(二)、 LCD12232'.圖2.3LCD12232 邏輯符號管腳說明 :VDD :邏輯電源正GND(VSS) : 邏輯電源地VO(VEE) : LCD 驅(qū)動電源RESET :復(fù)位端。E1 :讀

7、寫使能。E2 :同 E1 引腳。/RD :讀允許,低電平有效。/WR :寫允許,低電平有效。R/W :讀寫選擇A0 :數(shù)據(jù) /指令選擇高電平:數(shù)據(jù)D0-D7 將送入顯示RAM ;低電平:數(shù)據(jù)D0-D7 將送入指令執(zhí)行器執(zhí)行。D0-D7 :數(shù)據(jù)輸入輸出引腳。圖 2.4為 LCD 的時序圖圖 2.4LCD12232 時序圖'.圖 2.5為顯示存儲器( DDRAM )與地址的對應(yīng)關(guān)系(顯示設(shè)定為 1/32DUTY ,顯示起始行為 10th)圖 2.5(三)、 AT89C51在 Protues 中 AT89C51 的邏輯符號如圖2.6 所示:圖 2.6AT89C51 邏輯符號'.AT8

8、9C51 是一種帶4K 字節(jié) FLASH 存儲器( FPEROM Flash Programmable and Erasable ReadOnly Memory )的低電壓、高性能CMOS 8 位微處理器,俗稱單片機(jī)。AT89C2051 是一種帶2K 字節(jié)閃存可編程可擦除只讀存儲器的單片機(jī)。單片機(jī)的可擦除只讀存儲器可以反復(fù)擦除1000 次。該器件采用ATMEL高密度非易失存儲器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51 指令集和輸出管腳相兼容。由于將多功能8 位 CPU 和閃爍存儲器組合在單個芯片中,ATMEL的 AT89C51 是一種高效微控制器, AT89C2051是它的一種精簡版本。AT89

9、C51單片機(jī)為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價廉的方案。AT89C51提供以下標(biāo)準(zhǔn)功能:4k 字節(jié) Flash 閃速存儲器,128 字節(jié)內(nèi)部RAM , 32 個 I/O 口線,兩個16 位定時 /計數(shù)器,一個5 向量兩級中斷結(jié)構(gòu),一個全雙工串行通信口,片內(nèi)振蕩器及時鐘電路。同時,AT89C51 可降至0Hz 的靜態(tài)邏輯操作,并支持兩種軟件可選的節(jié)電工作模式。空閑方式停止CPU 的工作,但允許RAM ,定時 /計數(shù)器,串行通信口及中斷系統(tǒng)繼續(xù)工作。掉電方式保存 RAM 中的內(nèi)容,但振蕩器停止工作并禁止其它所有部件工作直到下一個硬件復(fù)位。仿真軟件:(一) 、 Proteus它不僅具有其它E

10、DA 工具軟件的仿真功能,還能仿真單片機(jī)及外圍器件。它是目前最好的仿真單片機(jī)及外圍器件的工具,在這里完全能夠滿足我們對電子秤的仿真需要。(二)、 Keil C51KeilC51 是 51 系列兼容單片機(jī)C 語言軟件開發(fā)系統(tǒng),與匯編相比,C 語言在功能上、結(jié)構(gòu)性、可讀性、可維護(hù)性上有明顯的優(yōu)勢,因而易學(xué)易用。Keil 提供了包括C 編譯器、宏匯編、連接器、庫管理和一個功能強(qiáng)大的仿真調(diào)試器等在內(nèi)的完整開發(fā)方案,因為我們在此次模擬仿真中使用 C 語言編程,所以 Keil 幾乎就是我們的不二之選。三、設(shè)計步驟(一)、軟件設(shè)計1、延時函數(shù) delay()的編寫( Delay.c):在這個C 文件中,只有

11、一個函數(shù)void delay(uint x) ,該函數(shù)的作用是,延時100*x (微秒)。2、 ADC0832 的驅(qū)動代碼編寫( ADC0832.c):在這個 C 文件中,只有一個函數(shù)uchar ReadADC() ,它的返回值為8 位 2 進(jìn)制數(shù),表示的放大后的電壓值。圖 3.1 為 uchar ReadADC() 的程序設(shè)計流程圖'.開始各種賦值語句,作讀取數(shù)據(jù)時的初始化dat1=(dat1<<1)|ADC_DIO;讀取第 411,共8 個正向數(shù)據(jù)dat2=dat2|(uchar)ADC_DIO<<i);讀取第 1118,共 8 個反向數(shù)據(jù)Ydat1=dat

12、2N輸出輸出dat10x00結(jié)束圖 3.1程序設(shè)計流程圖3、 MM74C922 的驅(qū)動代碼編寫( MM74C922.c ):在這個C 文件中,有三個函數(shù):、 ucharGet_key() ,作用是獲得MM74C922轉(zhuǎn)化的4 位二進(jìn)制,并轉(zhuǎn)化為十進(jìn)制;、 voidBeep() ,是蜂鳴器的驅(qū)動程序;、 void Juge_key( )判斷按鍵值,并作出相應(yīng)操作圖 3.2 為 void Juge_key( ) 的程序設(shè)計流程圖'.開始uchar Get_key()獲得MM74C922轉(zhuǎn)化的 4 位二進(jìn)制,并轉(zhuǎn)化為十進(jìn)制bb=Get_key();switch(b)09121411輸出歸零確

13、認(rèn)去皮09結(jié)束15 、4、7顯示時間、特效、小數(shù)點(。)圖 3.2程序設(shè)計流程圖4、 LCD12232 的驅(qū)動代碼編寫( LCD12232.c ):在這個 C 文件中,主要包含了兩個顯示函數(shù)、 void LCDshow010(uint *a,uint b)這個函數(shù)主要是實現(xiàn)LCD 第一行的顯示,顯示“P: 0 W 0.0kg ”字樣。、 void LCDshow230(uint c)這個函數(shù)主要是實現(xiàn)LCD 第二行的顯示,顯示“總價:0.0 元”字樣。5、 Main 文件的編寫( Main.c ):在這個C 文件中,主要包含了main()函數(shù),它的功能是調(diào)用其他C 文件中的函數(shù),因此,在寫 m

14、ain()函數(shù)時,應(yīng)當(dāng)先做其他文件的調(diào)用聲明,如下:#include"Font.h" / 存放取模數(shù)據(jù)的頭文件#include"Delay.c"/ 延時函數(shù)#include"LCD12232.c"/LCD12232的驅(qū)動程序#include"ADC0832.c"/ADC0832的驅(qū)動程序#include"MM74C922.c" /MM74C922的驅(qū)動程序圖 3.3 為 main( )的程序設(shè)計流程圖'.開始LCD的復(fù)位操作,為LCD的顯示做準(zhǔn)備,LCDrst();獲得 ADC的返回值a

15、dcdata=ReadADC();將電壓信號與重量建立等式關(guān)系weight=2*adcdata*1.960-Levelweight-3;LCD的第一行顯示LCDshow010(p,weight);計算出總價Total_price=Price*WeightLCD第二行顯示LCDshow230(Total_price);按鍵掃描函數(shù)Juge_key( )圖 3.3程序設(shè)計流程圖(二)、硬件電路搭建1、模擬應(yīng)變式傳感器單臂電橋的搭建:'.由于Proteus 沒有測重量的應(yīng)變式傳感器器件,所以在這里我們用四個電阻和一個電位器來模擬傳感器的工作原理。采用如圖3.4 所示電路圖連接:U o圖 3.

16、4模擬傳感器電橋其中、 R2 R4 100 ; R1 RV 1 R3 350 ;圖中所示 U o 為傳感器采集到的電壓信號, Rv1 =1.5? , R3 =348.5? ,所以 U o 的變化范圍為 05mV2、微小電壓信號差分放大電路的搭建:在實際應(yīng)用中,此種放大電路能夠有效的降低噪聲對正常信號的影響。在本次模擬中能夠有效的完成1000 倍的放大,將最大05mV 的電壓信號放大為最大05V 。連接電路圖如圖3.5 所示:具體推套方式如下:u3 u4u1u2RV 7RV 2RV 6RV 2u3u4RV 7RV 2RV6 ;u1u2RV 2RV 7RV 6;u3u41 2RV7u1u2RV 2

17、u3u5R7R5R5u3u4uOuOu4uOu5 uOR7R5R7R5R5R7 R5R6R8R8u3u4uOuOR7R5R5R7R5'.uO(1 2RV7)R5u1 u2RV 2R7根據(jù)以上推套,我們要實現(xiàn)1000倍的放大,則只需確定RV2 、 RV7、 R7、 R5四個電阻的阻值即可。本次設(shè)計中我們?nèi)V 21K、 RV7 185K 、 R7 10K 、 R520 K,只需調(diào)節(jié)RV 2和 RV7 、 RV6 即可達(dá)到1000 倍,應(yīng)當(dāng)注意的是: RV 7 、 RV 6 的調(diào)節(jié)幅度應(yīng)該始終保持一樣。U1U3U5UoU4U5U2圖 3.53、 ADC0832 與 51 單片機(jī)及LCD 的

18、連接電路:關(guān)于 ADC0832 與單片機(jī)的連接方法在前面已經(jīng)提過,在此不贅述了,我們選用CH0 作為信號輸入通道;關(guān)于 AT89C51 的:P1.0 P1.2 口分別接ADC0832 的片選使能端CS、時鐘信號端CLK 、數(shù)據(jù)輸出端DIO ,其中P1.6 接 MM74C922 的輸入提示端DA , P1.7 接蜂鳴器;'.圖 3.6 ADC0832 與 51 單片機(jī)及 LCD 的連接電路P0 端口接上拉電阻作LCD 的 D0 D7 數(shù)據(jù)輸入端;P2.0 P2.7 依次接LCD 的數(shù)據(jù)指令控制端A0 、 LCD 前半部分使能端E0、 LCD 后半部分使能端 E1、 LCD 讀寫控制端RW

19、 以及 MM74C922 的四位數(shù)據(jù)傳輸斷A 、 B 、C、 D。(具體連接如圖3.6)4、鍵盤解碼器MM74C922以及 4*4 鍵盤的連接電路:關(guān)于 MM74C922 的電路連接如圖3.7 所示圖 3.7MM74C922 與矩陣式鍵盤的連接電路圖四、設(shè)計結(jié)論1、單價能夠由鍵盤輸入:當(dāng)開啟仿真時,在沒有調(diào)節(jié)模擬傳感器的前提下,LCD 的顯示如圖4.1 所示'.圖 4.1當(dāng)有重物時, LCD 的顯示如圖4.2 所示,重量的顯示范圍理論上為0.099.9kg圖 4.2這時,我們可以在鍵盤上按下重物的單價,Price的輸入理論范圍為099 元 /kg ,例如:我們輸入單價“ 15”, LC

20、D的顯示如圖4.3 所示:圖 4.3這時,我們只需要按下“確定”鍵,就可以得到總價了,LCD的顯示如圖4.4 所示:圖 4.4應(yīng)當(dāng)注意的是:、在每次使用前都應(yīng)當(dāng)按一下“歸零”鍵,來防止前次使用時使用過去皮功能;、在單價的輸入程序中,當(dāng)你按下了兩位數(shù)后,數(shù)字鍵就應(yīng)失效了,不能繼續(xù)輸入,若想重新輸入,則按下“歸零”鍵即可,例如:輸入“15”,若我們按下1 和 5 后繼續(xù)按7,則第三次按'.鍵是無效的,不會顯示在LCD 上;、且,我們在寫程序中應(yīng)當(dāng)加入防止重鍵的功能;、若單價只有一位數(shù) , 則 lCD 只顯示一位數(shù),不會出現(xiàn)“01”的情況,后面的重量、總價原理相同;2、重量的精度能夠達(dá)到十分

21、之一千克:理論上是達(dá)到要求了,但是由于我們用的是一個電位器來模擬傳感器的電阻變化,而這個電位器只能 1%的增加,而這1%換算到電壓的改變就為0.05mV,算上電壓與重量的關(guān)系1mV對應(yīng) 15kg ,則電位器每增加1%重量就應(yīng)該增加0.75kg 左右。如圖4.5a 和圖 4.5b 所示圖 4.5a 為當(dāng)電位器調(diào)節(jié)到60%的時候,采集到的重量為48.0kg ;圖 4.5b 為當(dāng)電位器調(diào)節(jié)到65%的時候,采集到的重量為51.8kg ;weightweight 65weight 60=3.8kg所以、平均變化為0.76kg圖 4.5a圖 4.5b3、去皮的功能:例,在圖4.5b 的顯示情況下我們使用“

22、去皮”的功能即按下“去皮”鍵,LCD的顯示如圖4.6所示:圖 4.6應(yīng)當(dāng)注意的是:在使用了去皮功能后,應(yīng)當(dāng)做歸零操作。4、按鍵有提示音:'.此項功能只需要增加一個蜂鳴器(接單片機(jī)P1.7 腳)在編寫按鍵掃描程序中,在每一個case語句后添加上蜂鳴器的驅(qū)動程序即可。當(dāng)有按鍵按下時,就會調(diào)用蜂鳴器的驅(qū)動序,促使蜂鳴器發(fā)出“滴”的一聲。附錄:圖一:所有電路連接的全局圖圖一附錄:附所有程序源代碼:'.Font.h/ 存放取模數(shù)據(jù)的頭文件#define uchar unsigned char#define uint unsigned intuint code number16=0x00,

23、0x00,0xE0,0x0F,0x10,0x10,0x08,0x20,0x08,0x20,0x10,0x10,0xE0,0x0F,0x00,0x00,/*"0",0*/0x00,0x00,0x10,0x20,0x10,0x20,0xF8,0x3F,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00,/*"1",1*/0x00,0x00,0x70,0x30,0x08,0x28,0x08,0x24,0x08,0x22,0x88,0x21,0x70,0x30,0x00,0x00,/*"2",2*/0x00,0x0

24、0,0x30,0x18,0x08,0x20,0x88,0x20,0x88,0x20,0x48,0x11,0x30,0x0E,0x00,0x00,/*"3",3*/0x00,0x00,0x00,0x07,0xC0,0x04,0x20,0x24,0x10,0x24,0xF8,0x3F,0x00,0x24,0x00,0x00,/*"4",4*/0x00,0x00,0xF8,0x19,0x08,0x21,0x88,0x20,0x88,0x20,0x08,0x11,0x08,0x0E,0x00,0x00,/*"5",5*/0x00,0x00,0

25、xE0,0x0F,0x10,0x11,0x88,0x20,0x88,0x20,0x18,0x11,0x00,0x0E,0x00,0x00,/*"6",6*/0x00,0x00,0x38,0x00,0x08,0x00,0x08,0x3F,0xC8,0x00,0x38,0x00,0x08,0x00,0x00,0x00,/*"7",7*/0x00,0x00,0x70,0x1C,0x88,0x22,0x08,0x21,0x08,0x21,0x88,0x22,0x70,0x1C,0x00,0x00,/*"8",8*/0x00,0x00,0xE0

26、,0x00,0x10,0x31,0x08,0x22,0x08,0x22,0x10,0x11,0xE0,0x0F,0x00,0x00,/*"9",9*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0 x00,0x00,0x00,0x00,0x00,/*" ",10*/0x08,0x20,0xF8,0x3F,0x00,0x24,0x00,0x02,0x80,0x2D,0x80,0x30,0x80,0x20,0x00,0x00,/*"k",11*/0x00,0x00,0x00

27、,0x6B,0x80,0x94,0x80,0x94,0x80,0x94,0x80,0x93,0x80,0x60,0x00,0x00,/*"g",*/0x00,0x00,0x00,0x30,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*".",13*/0x20,0x80,0x20,0x40,0x22,0x20,0x22,0x10,0x22,0x0C,0xE2,0x03,0x22,0x00,0x22,0x00,0x22,0x00,0xE2,0x3F,0x22,0x40,0x22,0

28、x40,0x22,0x40,0x20,0x40,0x20,0x78,0x00,0x00,/*" 元",14*/;uint code tem16=0x08,0x20,0xF8,0x3F,0x08,0x21,0x08,0x01,0x08,0x01,0x08,0x01,0xF0,0x00,0x00,0x00,/*"P",0*/0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" : ",1*/0xF8,0x03,0x08,0x3

29、C,0x00,0x07,0xF8,0x00,0x00,0x07,0x08,0x3C,0xF8,0x03,0x00,0x00,/*"W",2*/0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" : ",3*/0x00,0x40,0x00,0x30,0x00,0x00,0xF1,0x03,0x12,0x39,0x14,0x41,0x10,0x41,0x10,0x45,0x10,0x59,0x14,0x41,0x12,0x41,0xF1,0x7

30、3,0x00,0x00,0x00,0x08,0x00,0x30,0x00,0x00,/*" 總 ",4*/0x00,0x01,0x80,0x00,0x60,0x00,0xF8,0xFF,0x07,0x00,0x40,0x80,0x20,0x60,0x90,0x1F,0x0C,0x00,0x03,0x00,0x0C,0x00,0x90,0xFF,0x20,0x00,0x40,0x00,0x40,0x00,0x00,0x00,/*" 價 ",6*/0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0

31、x00,0x00,0x00,0x00,0x00,/*" :",8*/ Delay.c/ 延時函數(shù)void delay(uint x)/*100us延時函數(shù) */uint i;while(x-)for(i=100; i>0; i-); LCD12232.c/LCD12232 的使用函數(shù)sfr DATAport=0x80;/ 定義 LCD12232 數(shù)據(jù)口 (0x80 表示P0口)sbit lcda0=P20;/ 寫(數(shù)據(jù) /指令)( 1/0)選擇 sbit lcde1=P21;/LCD 左邊使能sbit lcde2=P22;/LCD 右邊使能sbit lcdrw=P23

32、;/ (讀 /寫)( 1/0)狀態(tài)選擇sbit lcdbusy=P07;/ 忙狀態(tài)檢測位(即數(shù)據(jù)口最高位)void LCDcmd(uchar temp)delay(2);lcde1=0;/禁止控制器lcde2=0;lcda0=0;/寫指令模式lcdrw=0;/寫使能lcde1=1;/控制器使能lcde2=1;DATAport=temp;/寫指令lcde1=0;/寫完后,禁止控制器lcde2=0;/* 寫數(shù)據(jù) */void LCDdata(bit lcde,uchar temp)delay(2);lcde1=0;/禁止控制器lcde2=0;lcda0=1;/寫數(shù)據(jù)模式lcdrw=0;/寫使能lc

33、de1=lcde;/(lcde=0/1)( 左 / 右 ) 控制器使能lcde2=lcde;DATAport=temp;/寫數(shù)據(jù)lcde1=0;/寫完后,禁止主控制器lcde2=0;/*LCD 清屏 */void LCDclr(uint Page)'.unsigned char i;LCDcmd(0xB8|Page);/設(shè)置主控制器頁地址LCDcmd(0x00);/設(shè)置主控制器列地址for(i=0;i<61;i+)LCDdata(0,0x00);for(i=0;i<61;i+)LCDdata(1,0x00);/*LCD 初始化 */void LCDrst()LCDcmd(0

34、xE2);/ 復(fù)位LCDcmd(0xAE);/ 關(guān)顯示LCDcmd(0xA4);/ 正常驅(qū)動模式LCDcmd(0xA9);/ 占空比為1/32(即32 行液晶顯示驅(qū)動)LCDcmd(0xA1);/ 設(shè)定列驅(qū)動與液晶列數(shù)據(jù)口連接方式 LCDcmd(0xEE);/ 正常讀寫模式(讀 / 寫數(shù)據(jù)后列地址+1)LCDclr(0);/擦除 0 頁LCDclr(1);/擦除 1 頁LCDclr(2);/擦除 2 頁LCDclr(3);/擦除 3 頁LCDcmd(0xAF);/ 開顯示/*寫 LCD 字符串 */*寫指令 */void LCDshow010(uint *a,uint b)uint i,j;f

35、or(j=0;j<2;j+)LCDcmd(0xB8|j);/第 j 頁顯示LCDcmd(0x00);/設(shè)置列開始地址for(i=0; i<16;i+)/寫前半部分 ,顯示 “P:”LCDdata(0,tem0i*2+j%2);if(a1=0)for(i=0; i<8;i+)/寫前半部分,如果十位為0,空格占位LCDdata(0,number10i*2+j%2);elsefor(i=0; i<8;i+)/寫前半部分 ,顯示單價的十位LCDdata(0,numbera1i*2+j%2);for(i=0; i<8;i+)/寫前半部分,顯示單價的個位LCDdata(0,n

36、umbera0i*2+j%2);for(i=0; i<8;i+)/寫前半部分,空格占位LCDdata(0,number10i*2+j%2);for(i=0; i<8;i+)/寫前半部分,空格占位LCDdata(0,number10i*2+j%2);for(i=0; i<8;i+)/寫前半部分,空格占位LCDdata(0,number10i*2+j%2);for(i=0; i<5;i+)/寫后半部分,顯示“W:”LCDdata(0,tem2i*2+j%2);for(i=5; i<16;i+)/寫后半部分 ,越界處理LCDdata(1,tem2i*2+j%2);if(

37、b/100=0)for(i=0; i<8;i+)/寫后半部分,如果十位為0,空格占位LCDdata(1,number10i*2+j%2);elsefor(i=0; i<8;i+)/寫后半部分,顯示重量的十位LCDdata(1,numberb/100i*2+j%2);for(i=0; i<8;i+)/寫后半部分 ,顯示重量的個位LCDdata(1,number(b/10)%10i*2+j%2);for(i=0; i<8;i+)/寫后半部分,顯示小數(shù)點LCDdata(1,number13i*2+j%2);for(i=0; i<8;i+)/寫后半部分,顯示重量的小數(shù)位L

38、CDdata(1,numberb%10i*2+j%2);for(i=0; i<16;i+)/寫后半部分 顯示 “kg符”號LCDdata(1,number11i*2+j%2);void LCDshow230(uint c)uint i,j;for(j=2;j<4;j+)LCDcmd(0xB8|j);/第 j 頁顯示'.LCDcmd(0x00);/設(shè)置列開始地址for(i=0; i<40;i+)/寫前半部分 ,顯示 “總價: ”LCDdata(0,tem4i*2+j%2);if(c/10000=0)for(i=0; i<8;i+)/ 寫前半部分,如果千位為0,千位

39、空格占位LCDdata(0,number10i*2+j%2);elsefor(i=0; i<8;i+)/寫前半部分 ,顯示總價的千位LCDdata(0,numberc/10000i*2+j%2);if(c/1000=0)for(i=0; i<8;i+)/ 寫前半部分,在千,百位都為0 的情況下,百位空格占位LCDdata(0,number10i*2+j%2);elsefor(i=0; i<8;i+)/寫前半部分 ,顯示總價的百位LCDdata(0,number(c/1000)%10i*2+j%2);if(c/100=0)for(i=0; i<5;i+)/寫前半部分,在千

40、、百、十位都為0 的情況下,十位空格占位LCDdata(0,number10i*2+j%2);for(i=5; i<8;i+)/ 寫后半部分,顯示空格占位,因為存在越界LCDdata(1,number10i*2+j%2);elsefor(i=0; i<5;i+)/寫前半部分,顯示總價的十位LCDdata(0,number(c/100)%10i*2+j%2);for(i=5; i<8;i+)/ 寫后半部分,顯示總價的十位,因為存在越界LCDdata(1,number(c/100)%10i*2+j%2);for(i=0; i<8;i+)/寫后半部分,顯示總價的個位LCDda

41、ta(1,number(c/10)%10i*2+j%2);for(i=0; i<8;i+)/寫后半部分,顯示小數(shù)點LCDdata(1,number13i*2+j%2);for(i=0; i<8;i+)/寫后半部分,顯示總價的小數(shù)位LCDdata(1,numberc%10i*2+j%2);for(i=0; i<16;i+)/寫后半部分,顯示“元 ”符號LCDdata(1,number14i*2+j%2); ADC0832.c/ADC0832 的使用函數(shù)sbit ADC_CS =P10;sbit ADC_CLK=P11;sbit ADC_DIO =P12;uchar ReadAD

42、C() /把模擬電壓值轉(zhuǎn)換成8 位二進(jìn)制數(shù)并返回uchar i,dat1=1,dat2=0;ADC_CS=0;ADC_CLK=0;ADC_DIO=1;_nop_();_nop_();ADC_CLK=1;_nop_();_nop_();ADC_CLK=0;ADC_DIO=1; _nop_();_nop_(); ADC_CLK=1;_nop_();_nop_();ADC_CLK=0;ADC_DIO=0; _nop_();_nop_(); ADC_CLK=1;_nop_();_nop_();ADC_CLK=0;ADC_DIO=1; _nop_();_nop_(); for(i=0;i<8;i+

43、)ADC_CLK=1;_nop_();_nop_();ADC_CLK=0;_nop_();_nop_();dat1=(dat1<<1)|ADC_DIO;for(i=0;i<8;i+)dat2=dat2|(uchar)ADC_DIO<<i);ADC_CLK=1;_nop_();_nop_();ADC_CLK=0;_nop_();_nop_();'.ADC_CS=1;return (dat1=dat2)?dat1:0x00; MM74C922.c /MM74C922的使用函數(shù)sbit DA=P16;sbit BEEP=P17;uchar Get_key()uint a=16;if(DA)a=P2/16;return a;void Beep()uchar i;for(i=0;i<100;i+)delay(1);BEEP=BEEP;BEEP=1;void Juge_key(uint *c,uint e,uint f,uint *g,uint *h) uint i,b=Get_key();switch(b)case 0:if(c1!=0)break;for(i=1;i>0;i-)ci=ci-1;ci=1;while(DA);Beep(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論