單片機電子秤設計報告15949_第1頁
單片機電子秤設計報告15949_第2頁
單片機電子秤設計報告15949_第3頁
單片機電子秤設計報告15949_第4頁
單片機電子秤設計報告15949_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

.. .. ..單片機電子秤設計報告秤是一種在實際工作和生活中經(jīng)常用到的測量器具。隨著計量技術和電子技術的發(fā)展,傳統(tǒng)純機械結(jié)構的桿秤、臺秤、磅秤等稱量裝置逐步被淘汰,電子稱量裝置電子秤、電子天平等以其準確、快速、方便、顯示直觀等諸多優(yōu)點而受到人們的青睞。和傳統(tǒng)秤相比較,電子秤利用新型傳感器、高精度AD轉(zhuǎn)換器件、單片機設計實現(xiàn),具有精度高、功能強等特點。本課題設計的電子秤具有基本稱重、鍵盤輸入、計算價格、顯示、超重報警功能。該電子秤的測量范圍為0-10Kg,測量精度達到 5g,有高精度,低成本,易攜帶的特點。電子秤采用液晶顯示漢字和測量記過,比傳統(tǒng)秤具有更高的準確性和直觀性。另外,該電子秤電路簡單,使用壽命長,應用范圍廣,可以應用于商場、超市、家庭等場所,成為人們?nèi)粘I钪胁豢缮俚谋匦杵?。一、功能描?、采用高精度電阻應變式壓力傳感器 ,測量量程 0-10kg,測量精度可達5g。2、采用電子秤專用模擬/數(shù)字(A/D)轉(zhuǎn)換器芯片hx711對傳感器信號進行調(diào)理轉(zhuǎn)換,HX711采用了海芯科技集成電路專利技術,是一款專為高精度電子秤而設計的24位A/D轉(zhuǎn)換器芯片。3、采用STC89C52單片機作為主控芯片 ,實現(xiàn)稱重、計算價格等主控功能。4、采用128*64漢字液晶屏顯示稱重重量 、單價、總價等信息。5、采用4*4矩陣鍵盤進行人機交互 ,鍵盤容量大,操作便捷。6、具有超量程報警功能 ,可以通過蜂鳴器和 LED燈報警。7、系統(tǒng)通過 USB電源供電,單片機程序也可通過 USB線串行下載。. 專業(yè).專注 ... .. ..二、硬件設計1、硬件方案單片機電子秤硬件方案如圖 1所示:稱重傳感器24位A/D芯片hx711電路矩陣鍵盤 單片機主控芯片 電源系統(tǒng)液晶顯示圖1 單片機電子秤硬件方案稱重傳感器感應被測重力,輸出微弱的毫伏級電壓信號。該電壓信號經(jīng)過電子秤專用模擬/數(shù)字(A/D)轉(zhuǎn)換器芯片hx711對傳感器信號進行調(diào)理轉(zhuǎn)換。HX711采用了海芯科技集成電路專利技術,是一款專為高精度電子秤而設計的24位A/D轉(zhuǎn)換器芯片,內(nèi)置增益控制,精度高,性能穩(wěn)定。HX711芯片通過2線串行方式與單片機通信。單片機讀取被測數(shù)據(jù),進行計算轉(zhuǎn)換,再液晶屏上顯示出來。矩陣鍵盤主要用于計算金額 。當被測物體重量得到后 ,用戶可以通過矩陣鍵盤輸入單價,電子秤自動計算總金額并在液晶屏顯示。電源系統(tǒng)給單片機、HX711電路及傳感器供電。2、稱重傳感器傳感器是測量機構最重要的部件。稱重傳感器本身具有單調(diào)性,其主要參數(shù)指標是靈敏度、總誤差和溫度漂移。靈敏度. 專業(yè).專注 ... .. ..稱重傳感器的電靈敏度為滿負荷輸出電壓與激勵電壓的比值 ,典型值是2mV/V。當使用2mV/V靈敏度和5V激勵電壓的傳感器時 ,其滿度輸出電壓為10mV。通常,為了使用稱重傳感器線性度最好的一段稱重范圍 ,應當僅使用滿度范圍的三分之二 。因此滿度輸出電壓應當大約為 6mV。當電子秤應用于工業(yè)環(huán)境時 ,在6mV滿度范圍內(nèi)測量微小的信號變化并非易事 。(2)總誤差總誤差是指輸出誤差和額定誤差的比值 。典型電子秤的總誤差指標大約是0.02%,這一技術指標相當重要 ,它限制了使用理想信號調(diào)節(jié)電路所能達到的精確度,決定了ADC分辨率的選擇以及放大電路和濾波器的設計 。漂移稱重傳感器也產(chǎn)生與時間相關的漂移。目前常用的稱重傳感器有電阻應變式壓力傳感器、電容壓力傳感器、壓電式壓力傳感器。選用時應按穩(wěn)定行、精度登記、壽命和安裝環(huán)境要求考慮,其主要特點如下:電容式壓力傳感器穩(wěn)定性較差,精度和靈敏度較高,壽命較短,對環(huán)境要求苛刻,不易長距離傳輸。壓電式壓力傳感器穩(wěn)定性好,精度和靈敏度高,壽命長,但大量程的壓力傳感器尚待進一步研究。(3)電阻應變式壓力傳感器穩(wěn)定性較好 ,精度和靈敏度較高 ,壽命較長,對測量環(huán)境要求不太嚴格 。綜上所述,選用電阻應變式壓力傳感器作為電子秤稱重傳感器是最為合適的。電阻應變式壓力傳感器主要由彈性體 、電阻應變片電纜線等組成 ,內(nèi)部線路采用惠更斯電橋,當彈性體承受載荷產(chǎn)生變形時,電阻應變片(轉(zhuǎn)換元件)受到拉伸或壓縮應變片變形后,它的阻值將發(fā)生變化(增大或減小),從而使電橋失去平衡,產(chǎn)生相應的差動信號,供后續(xù)電路測量和處理。電阻應變式傳感器測量原理如圖2所示。. 專業(yè).專注 ... .. ..圖2 電阻應變式傳感器測量原理當垂直正壓力P作用于梁上時,梁產(chǎn)生形變,電阻應變片R1、R3受壓彎拉伸,阻值增加;R2、R4受壓縮,阻值減小。電橋失去平衡,產(chǎn)生不平衡電壓,不平衡電壓與作用在傳感器上的載菏P成正比,從而將非電量轉(zhuǎn)化成電量輸出。R1、R2、R3和R4組成惠更斯電橋,將2對電阻應變片的阻值變化轉(zhuǎn)變成輸出電壓,其工作原理如圖3所示。圖3 測量電橋原理3、電子秤專用24位AD轉(zhuǎn)換芯片HX711及其電路HX711采用了海芯科技集成電路專利技術,是一款專為高精度電子秤而設計的24位A/D轉(zhuǎn)換器芯片。與同類型其它芯片相比,該芯片集成了包括穩(wěn)壓電源、片內(nèi)時鐘振蕩器等其它同類型芯片所需要的外圍電路,具有集成度高、響應速度快、抗干擾性強等優(yōu)點。降低了電子秤的整機成本,提高了. 專業(yè).專注 ... .. ..整機的性能和可靠性 。該芯片與后端 MCU 芯片的接口和編程非常簡單 ,所有控制信號由管腳驅(qū)動,無需對芯片內(nèi)部的寄存器編程。輸入選擇開關可任意選取通道A或通道B,與其內(nèi)部的低噪聲可編程放大器相連。通道A的可編程增益為128或64,對應的滿額度差分輸入信號幅值分別為±20mV或±40mV。通道B則為固定的32增益,用于系統(tǒng)參數(shù)檢測。芯片內(nèi)提供的穩(wěn)壓電源可以直接向外部傳感器和芯片內(nèi)的A/D轉(zhuǎn)換器提供電源,系統(tǒng)板上無需另外的模擬電源。芯片內(nèi)的時鐘振蕩器不需要任何外接器件。上電自動復位功能簡化了開機的初始化過程。HX711內(nèi)部方框圖如圖 4所示。其外部管腳如圖 5所示。圖4HX711內(nèi)部方框圖圖5 HX711外部管腳圖. 專業(yè).專注 ... .. ..圖5為HX711芯片應用于計價秤的一個參考電路圖。該方案使用內(nèi)部時鐘振蕩器(XI=0),10Hz的輸出數(shù)據(jù)速率(RATE=0)。電源(2.7~5.5V)直接取用與MCU芯片相同的供電電源。通道A與傳感器相連,通道B通過片外分壓電阻與電池相連,用于檢測電池電壓。圖6HX711計價秤應用參考電路圖本課題設計的HX711電路如圖7所示:. 專業(yè).專注 ... .. ..圖7HX711電路4、單片機STC89C52及其電路(1)STC89C52單片機概述STC89C52系列單片機是宏晶科技生產(chǎn)的單時鐘 /機器周期(1T)的單片機,是高速/低功耗/超強抗干擾的新一代 8051單片機,指令代碼完全兼容傳統(tǒng) 8051,但速度快8-12倍,內(nèi)部集成MAX810專用復位電路。(2)STC89C52單片機特點增強型 8051CPU,1T,單時鐘/機器周期,指令代碼完全兼容傳統(tǒng)8051;工作電壓:5.5V-3.5V(5V單片機);工作頻率范圍:0~40MHz,相當于普通8051的0~80MHz;用戶應用程序空間 4K//8K/16k/32K/64K 字節(jié);片上集成1280字節(jié)RAM;通用I/O口(32/36個),復位后為準雙向口/弱上拉(普通8051傳統(tǒng)I/O口);ISP(在系統(tǒng)可編程)/IAP(在應用可編程),無需專用編程器/仿真器。每個I/O口驅(qū)動能力均可達到 20mA,但整個芯片最大不要超過120mA;可通過串口(P3.0/P3.1)直接下載用戶程序,數(shù)秒即可完成一片;. 專業(yè).專注 ... .. ..有EEPROM功能;看門狗;內(nèi)部集成MAX810專用復位電路(外部晶體12M以下時,復位腳可直接1K電阻到地);時鐘源:外部高精度晶體/時鐘,內(nèi)部R/C振蕩器;用戶在下載用戶程序時,可選擇是使用內(nèi)部R/C振蕩器還是外部晶體/時鐘;常溫下內(nèi)部R/C振蕩器頻率為:5.0V單片機為:11MHz ~17MHz;共4個16位定時器,兩個與傳統(tǒng)8051兼容的定時器/計數(shù)器,16位定時器T0和T1,沒有定時器2,但有獨立波特率發(fā)生器做串行通訊的波特率發(fā)生器,再加上2路PCA模塊可再實現(xiàn)2個16位定時器;外部中斷I/O口4路,傳統(tǒng)的下降沿中斷或低電平觸發(fā)中斷,并新增支持上升沿中斷的PCA模塊,PowerDown模式可由外部中斷喚醒;通用全雙工異步串行口(UART);工作溫度范圍:-40~+85℃(工業(yè)級)/0~75℃(商業(yè)級);封裝:PDIP-40,PLCC-44。STC89C52單片機管腳及封裝STC89C52單片機有多種封裝形式,本設計中選用40DIP封裝,其管腳定義如圖8所示。. 專業(yè).專注 ... .. ..圖8STC89C52管腳圖本課題設計的電子秤的單片機應用電路如圖9所示:. 專業(yè).專注 ... .. ..圖9STC89C52單片機電路圖中DOUT和PDSCK為單片機與HX711的AD轉(zhuǎn)換電路交換數(shù)據(jù)的通信線。beep為蜂鳴器報警信號線,alert為報警燈信號線,RXD和TXD為串口通信線,也可以用于單片機程序的串行 ISP下載。. 專業(yè).專注 ... .. ..5、液晶屏電路圖10LCD顯示電路液晶屏電路如圖 10所示。LCD_CS、LCD_RES、LCD_RS、LCD_SDA、LCD_SCK為液晶模塊與單片機接口的控制線 。CS_ZK、SCK_ZK、SO_ZK和SI_ZK為字庫和單片機接口的控制線 。該液晶為晶訊聯(lián)公司的 128*64漢字屏JLX12864G-086-PC顯示信息。該顯示模塊既可以當成普通的圖像型液晶顯示模塊使用 (即顯示普通圖像型的單色圖片功能),又含有JLX-GB2312字庫IC,可以從字庫IC中讀出內(nèi)置的字庫的點陣數(shù)據(jù)寫入到 LCD驅(qū)動IC中,以達到顯示漢字的目的 。其接口引腳功能介紹:表一 液晶模塊接口引腳功能. 專業(yè).專注 ... .. ..6、矩陣鍵盤電路矩陣鍵盤電路如圖 11所示:圖11矩陣鍵盤電路圖中4*4矩陣鍵盤可以顯示 0-9數(shù)字、小數(shù)點和五個功能鍵。鍵盤行掃描信號為ROW1—ROW4,列掃描信號為 COL1—COL4。行信號為輸入信號,低電平有效;列信號為輸出信號。當沒有鍵按下時,即使行掃描輸入低電平信號 ,列信號仍為高電平 ;當行掃描為低電平并且有鍵按下時 ,相應的列輸出低電. 專業(yè).專注 ... .. ..平。該低電平信號可以定位至按下鍵的位置 。7、聲光報警電路聲光報警電路如圖 12所示。圖12 聲光報警電路當測量重量超過量程時,beep和alert 給出低電平信號,驅(qū)動蜂鳴器鳴響,報警燈亮。8.電源電路本設計采用USB接口供電,電源電壓5V。同時,其電路原理如圖所示。. 專業(yè).專注 ... .. ..圖16 供電電路三、Protel 硬件開發(fā)軟件Protel 是目前國內(nèi)最流行的通用 EDA軟件,它是將電路原理圖設計、PCB板圖設計、電路仿真和 PLD設計等多個實用工具軟件組合后構成的EDA工作平臺,是第一個將 EDA軟件設計成基于 Windows 的普及型產(chǎn)品。它集成了軟件界面 、仿真功能和 PLD設計和信號完整性分析 ,在此基礎上 Protel99SE 又增加了一些新的功能 ,用戶使用更加方便靈活。Protel的功能十分強大 ,在電子電路設計領域占有極其重要的地位 。它以其強大功能和實用性 ,逐漸獲得廣大硬件設計人員的青睞 ,是目前眾多EDA設計軟件中用戶最多的產(chǎn)品之一 。1.Protel 軟件組成Protel 軟件主要由電路原理圖設計模塊 、印制電路板設計模塊 (PCB設計模塊)、電路信號仿真模塊和 PLD邏輯器件設計模塊等組成 ,各模塊具有強大的功能 ,可以很好的實現(xiàn)電路設計與分析 。原理圖設計模塊(Schematic模塊)電路原理圖是表示電氣產(chǎn)品或電路工作原理的重要技術文件,電路原. 專業(yè).專注 ... .. ..理圖主要由代表各種電子器件的圖形符號 、線路和結(jié)點組成 。圖4.1所示為一張電路原理圖。該原理圖是由 Schematic 模塊設計完成的。Schematic 模塊具有如下功能 :豐富而靈活的編輯功能 、在線庫編輯及完善的庫管理功能 、強大的設計自動化功能 、支持層次化設計功能等 。印制電路板設計模塊(PCB設計模塊)印制電路板 (PCB)制板圖是由電路原理圖到制作電路板的橋梁 。設計了電路原理圖后 ,需要根據(jù)原理圖生設計成印制電路板的制板圖 ,然后在根據(jù)制板圖制作 具體的電路板。印制電路板設計模塊具有如下主要功能和特點:可完成復雜印制電路板 (PCB)的設計;方便而又靈活的編輯功能;強大的設計自動化功能 ;在線式庫編輯及完善的庫管理 ;完備的輸出系統(tǒng)等。電路信號仿真模塊電路信號仿真模塊是一個功能強大的數(shù)字/模擬混合信號電路仿真器,能提供連續(xù)的模擬信號和離散的數(shù)字信號仿真 。它運行在 Protel 的EDA/Client 集成環(huán)境下 ,與ProtelAdvancedSchematic 原理圖輸入程序協(xié)同工作,作為Advanced Schematic 的擴展,為用戶提供了一個完整的從設計到驗證仿真設計環(huán)境 。在Protel中進行仿真 ,只需從仿真用元器件庫中放置所需的元器件 ,連接好原理圖 ,加上激勵源 ,然后單擊防真按鈕即可自動開始 。2.PCB板設計(1) 定元件的封裝①打開網(wǎng)絡表 (可以利用一些編輯器輔助編輯 ),將所有封裝瀏覽一遍,確保所有元件的封裝都正確無誤并且元件庫中包含所有元件的封裝,網(wǎng)絡表中所有信息全部大寫 ,一面載入出問題 ,或PCBBOM 不連續(xù)。②標準元件全部采用公司統(tǒng)一元件庫中的封裝 。③④⑥⑤元件庫中不存在的封裝 ,應自己建立元器件庫 。. 專業(yè).專注 ... .. ..建立PCB板框①根據(jù)PCB結(jié)構圖,或相應的模板建立PCB文件,包括安裝孔、禁布區(qū)等相關信息。②尺寸標注。在鉆孔層中應標明PCB的精確結(jié)構,且不可以形成封閉尺寸標注。(3)載入網(wǎng)絡表①載入網(wǎng)表并排除所有載入問題,具體請看《PROTEL技術大全》。其他軟件載入問題有很多相似之處,可以借鑒。②如果使用PROTEL,網(wǎng)表須載入兩次以上(沒有任何提示信息)才可以確認載入無誤。(4)布局①首先要確定參考點。一般參考點都設置在左邊和底邊的邊框線的交點(或延長線的交點)上或印制板的插件的第一個焊盤。②一但參考點確定以后,元件布局、布線均以此參考點為準。布局推薦使用25MIL網(wǎng)格。③根據(jù)要求先將所有有定位要求的元件固定并鎖定。④布局的基本原則A.遵循先難后易 、先大后小的原則 。B.布局可以參考硬件工程師提供的原理圖和大致的布局 ,根據(jù)信號流向規(guī)律放置主要原器件 。C.總的連線盡可能的短 ,關鍵信號線最短 。D.強信號、弱信號、高電壓信號和弱電壓信號要完全分開 。E.高頻元件間隔要充分 。F.模擬信號、數(shù)字信號分開 。⑤相同結(jié)構電路部分應盡可能采取對稱布局 。⑥按照均勻分布 、重心平衡、版面美觀的標準來優(yōu)化布局 。PCB設計遵循的規(guī)則①地線回路規(guī)則:. 專業(yè).專注 ... .. ..圖17 地線回路規(guī)則環(huán)路最小規(guī)則 ,即信號線與其回路構成的環(huán)面積要盡可能小 ,環(huán)面積要盡可能小 ,環(huán)面積越小 ,對外的輻射越少 ,接收外界的干擾也越小 。針對這一規(guī)則 ,在地平面分割時 ,要考慮到地平面與重要信號走線的分布 ,防止由于地平面開槽等帶來的問題 ;在雙層板設計中 ,在為電源留下足夠空間的情況下 ,應該將留下的部分用參考地填充,且增加一些必要的過孔,將雙面信號有效連接起來 ,對一些關鍵信號盡量采用地線隔離 ,對一些頻率較高的設計 ,需特別考慮其地平面信號回路問題 ,建議采用多層板為宜。②竄擾控制竄擾(CrossTalk)是指 PCB上不同網(wǎng)絡之間因較長的平行布線引起的相互干擾 ,主要是由于平行線間的分布電容和分布電感的作用 。克服竄擾的主要措施是 :A.加大平行布線的間距 ,遵循3W規(guī)則。B.在平行線間插入接地的隔離線 。C.減少布線層與地平面的距離③屏蔽保護圖18 屏蔽保護對應地線回路規(guī)則 ,實際上也是為了盡量減小信號的回路面積 ,多用于一些比較重要的信號 ,如時鐘信號 ,同步信號;對一些特別重要 ,頻率. 專業(yè).專注 ... .. ..特別高的信號 ,應該考慮采用銅軸電纜屏蔽結(jié)構設計 ,即將所布的線上下左右用地線隔離 ,而且還要考慮好如何有效的讓屏蔽地與實際地平面有效結(jié)合。④走線方向控制規(guī)則相鄰層的走線方 向成正交結(jié)構,避免將不 同的信號線在相鄰層 走成同一方向,以減少不必要的層間竄擾 ;當由于板結(jié)構限制 (如某些背板 )難以避免出現(xiàn)該情況 ,特別是信號速率較高時 ,應考慮用地平面隔離各布線層,用地信號線隔離各信號線 。⑤電源與地線層的完整性規(guī)則對于導通孔密集 的區(qū)域,要注意避免孔在 電源和地層的挖空區(qū) 域相互連接,形成對平面層的分割 ,從而破壞平面層的完整性 ,并進而導致信號線在地層 的回路面積增大 。四、軟件設計1、軟件流程圖本設計主程序使用了定時器,用來實現(xiàn)每0.5秒稱重一次的功能,流程圖如圖19所示。鍵盤掃描程序如圖20所示。時鐘中斷入口逐列掃描Counter累加有鍵按下?置稱重標志取鍵值返回返回圖19 時鐘中斷程序流程圖 圖20 鍵盤掃描程序流程圖主程序軟件流程如圖 21所示。. 專業(yè).專注 ... .. ..數(shù)據(jù)初始化端口初始化顯示初始化定時器初始化進入后臺while循環(huán)無有稱重標志嗎?有稱重并計算總價顯示重量和總價鍵盤掃描圖21 主程序流程圖3、主程序下面介紹main.c主程序編寫,其他程序略。頭文件和一些宏定義#include<reg52.h>#include<intrins.h>#include<string.h>#include"lcd.h"#include"hx711.h"#include"keyboard.h"定義量程系數(shù)#defineRATIO2114/1623管腳、常量、變量定義. 專業(yè).專注 ... .. ..//定義標識volatilebitFlagTest=0; //定時測試標志,每0.5秒置位,測完清0volatilebitFlagKeyPress=0; //有鍵按下標志,處理完畢清 0volatilebitFlagSetPrice=0; //價格設置狀態(tài)標志 ,設置好為 1。管腳定義sbitLedA=P2^2;sbitbeep=P1^0;sbitalert=P1^1;顯示用變量intCounter;ucharidatastr1[6]="000000";inti,iTemp;//稱重用變量unsignedlongidataFullScale;// 滿量程AD值/1000unsignedlongAdVal; //AD 采樣值unsignedlongweight; //重量值,單位gunsignedlongidataprice; //單價,長整型值,單位為分unsignedlongidatamoney; //總價,長整型值,單位為分//鍵盤處理變量ucharkeycode;ucharDotPos; //小數(shù)點標志及位置函數(shù)聲明voidint2str(int,char*);voidData_Init();voidPort_Init();voidTimer0_Init();voidTimer0_ISR();voidINT1_Init();voidKeyPress(uchar);voidTo_Zero();voidDisplay_Price();voidDisplay_Weight();voidDisplay_Money();各子程序整型轉(zhuǎn)字符串的函數(shù),轉(zhuǎn)換范圍0--65536voidint2str(intx,char*str){inti=1;. 專業(yè).專注 ... .. ..inttmp=10;while(x/tmp!=0){i++;tmp*=10;}tmp=x;str[i]='\0';while(i>1){str[--i]='0'+(tmp%10);tmp/=10;}str[0]=tmp+'0';}重新找回零點,每次測量前調(diào)用voidTo_Zero(){FullScale=ReadCount()/1000;price=0;}顯示單價,單位為元,四位整數(shù),兩位小數(shù)voidDisplay_Price(){unsignedinti,j;display_GB2312_string(5,44," ");i=price/100; //得到整數(shù)部分j=price-i*100;// 得到小數(shù)部分int2str(i,str1);//顯示整數(shù)部分if(i>=1000){display_GB2312_string(5,44,str1);}elseif(i>=100){display_GB2312_string(5,52,str1);}elseif(i>=10){. 專業(yè).專注 ... .. ..display_GB2312_string(5,60,str1);}else{display_GB2312_string(5,68,str1);}顯示小數(shù)點display_GB2312_string(5,76,".");顯示小數(shù)部分int2str(j,str1);if(j<10){display_GB2312_string(5,84,"0");display_GB2312_string(5,92,str1);}else{display_GB2312_string(5,84,str1);}}顯示重量,單位kg,兩位整數(shù),三位小數(shù)voidDisplay_Weight(){unsignedinti,j;display_GB2312_string(3,60," ");//weight 單位是gi=weight/1000; //得到整數(shù)部分j=weight-i*1000;// 得到小數(shù)部分int2str(i,str1);if(i>=10){display_GB2312_string(3,60,str1);}else{display_GB2312_string(3,68,str1);}display_GB2312_string(3,76,".");int2str(j,str1);if(j<10){. 專業(yè).專注 ... .. ..display_GB2312_string(3,84,"00");display_GB2312_string(3,100,str1);}elseif(j<100){display_GB2312_string(3,84,"0");display_GB2312_string(3,92,str1);}else{display_GB2312_string(3,84,str1);}}顯示總價,單位為元,四位整數(shù),兩位小數(shù)voidDisplay_Money(){unsignedinti,j;display_GB2312_string(7,44," ");if(money>999999) //超出顯示量程{display_GB2312_string(7,44,"-------");return;}i=money/100;//得到整數(shù)部分j=money-i*100;//得到小數(shù)部分int2str(i,str1);//顯示整數(shù)部分if(i>=1000){display_GB2312_string(7,44,str1);}elseif(i>=100){display_GB2312_string(7,52,str1);}elseif(i>=10){display_GB2312_string(7,60,str1);}else. 專業(yè).專注 ... .. ..{display_GB2312_string(7,68,str1);}顯示小數(shù)點display_GB2312_string(7,76,".");顯示小數(shù)部分int2str(j,str1);if(j<10){display_GB2312_string(7,84,"0");display_GB2312_string(7,92,str1);}else{display_GB2312_string(7,84,str1);}}數(shù)據(jù)初始化voidData_Init(){price=0;DotPos=0;beep=1;alert=1;}管腳配置voidPort_Init(){}定時器0初始化voidTimer0_Init(){ET0=1; //允許定時器 0中斷TMOD=1; //定時器工作方式選擇TL0=0x06;TH0=0xf8; //定時器賦予初值TR0=1; //啟動定時器}. 專業(yè).專注 ... .. ..定時器0中斷voidTimer0_ISR(void)interrupt1using0{TL0=0x06;TH0=0xf8; //定時器賦予初值每0.5秒鐘刷新重量Counter++;if(Counter>=200){FlagTest=1;Counter=0;}}按鍵響應程序,參數(shù)是鍵值返回鍵值://78910(清0)//45611(刪除)//12312(未定義)//14(未定義)015(.)13(確定價格)voidKeyPress(ucharkeycode){switch(keycode){case0:case1:case2:case3:case4:case5:case6:case7:case8:case9:目前在設置整數(shù)位,要注意price是整型,存儲單位為分if(DotPos==0){最多只能設置到千位if(price<100000){price=price*10+keycode*100;. 專業(yè).專注 ... .. ..}}目前在設置小數(shù)位elseif(DotPos==1) //小數(shù)點后第一位{price=price+keycode*10;DotPos++;}elseif(DotPos==2){price=price+keycode;}Display_Price();break;case10: //清零鍵To_Zero();Display_Price();FlagSetPrice=0;DotPos=0;break;case11://刪除鍵,按一次刪除最右一個數(shù)字if(DotPos==2){price=price/10;price=price*10;DotPos--;}elseif(DotPos==1){price=price/100;price=price*100;DotPos--;}elseif(DotPos==0){price=price/1000;price=price*100;}Display_Price();break;case13: //確認鍵FlagSetPrice=1;break;case15: //小數(shù)點按下. 專業(yè).專注 ... .. ..if(DotPos==0){DotPos=1; //小數(shù)點后第一位}break;}}//===============mainprogram===================//voidmain(void){Rom_CS=1;initial_lcd();EA=0;Data_Init();Port_Init();Timer0_Init();初始化完成,開中斷EA=1;//背光LedA=1;clear_screen(); //clearalldotsdisplay_GB2312_string(1,1," 電子秤初始化....");To_Zero();display_GB2312_string(1,1," 電子秤初始化成功 ");display_GB2312_string(3,1," 重量: kg");display_GB2312_string(5,1," 單價: 元");display_GB2312_string(7,1," 金額: 元");Display_Price();while(1){每0.5秒稱重一次if(FlagTest==1){稱重,得到重量值weight,單位為gAdVal=ReadCount();weight=FullScale-AdVal/1000;if(weight>0x8000)weight=0;weight=10000*weight/FullScale;. 專業(yè).專注 ... .. ..weight=weight*RATIO;如果超量程,則報警if(weight>=10000){beep=0;alert=0;display_GB2312_string(3,60,"------");display_GB2312_string(7,44,"--------");}如果不超量程else{beep=1;alert=1;顯示重量值Display_Weight();如果單價設定好了,則計算價格if(FlagSetPrice==1){money=weight*price/1000; //money 單位為分顯示總金額Display_Money();}else{display_GB2312_string(7,44," ");}清測試標志FlagTest=0;}}獲取按鍵keycode=Getkeyboard();有效鍵值0-15if((keycode<16)&&(FlagKeyPress==0)){FlagKeyPress=1;KeyPress(keycode);FlagKeyPress=0;}delay(20);}}. 專業(yè).專注 ... .. ..五、下載與調(diào)試提供例程在uVision4環(huán)境下編譯,如果是其他版本 uVision,只需將所有.c和.h文件拷貝至新建項目,重新編譯即可。當編譯生成.hex文件后,就可以下載并進行調(diào)試了。1、USB轉(zhuǎn)串口驅(qū)動安裝打開USB驅(qū)動文件夾下的 PL2303_Prolific_DriverInstaller_v130.exe 安裝文件,按提示安裝USB轉(zhuǎn)串口驅(qū)動程序。安裝完成后,插入USB下載線后,在[開始]-[控制面板]-[打印機和其他硬件]-[設備管理器],在“端口”分支下有

溫馨提示

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

評論

0/150

提交評論