<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統 > 設計應用 > 基于AT89C51單片機的電子計價秤的設計與實現

          基于AT89C51單片機的電子計價秤的設計與實現

          作者: 時間:2012-02-28 來源:網絡 收藏

          3.4、鍵盤專用芯片74C922及12個按鍵矩陣組設置。

          秤中,帶有12個按鍵矩陣組設置,其中0—9數字鍵用于輸入單價,DEL用于單價清空,累計鍵用于費用累計,鑒于此,我們采用專用鍵盤管理芯片74C922。74C922為CMOS工藝技術制造,工作電壓為3—15V,“二鍵鎖定”功能,編碼輸出為三芯輸出,可直接與微處理器數據線相連,內部振蕩器完成4×4矩形鍵盤掃描,有 按鍵時,DA變高,通過非門接到的INT0口,并且設INT0為邊沿觸發(fā)方式,當DA變高時,經過非門變?yōu)榈碗娖教儺a生INT0外部中斷,通知從數據總線讀鍵值,判斷鍵值從而完成相應的散轉程序功能。根據接線圖及74C922芯片真值表,我們知道,鍵0­—9對應ABCD 輸出(0000—1001),鍵DEL對應ABCD輸出(1010),鍵累計對應ABCD輸出(1011),接線圖見圖3.4另外在秤的面盤上有電源開關POWER和手動復位按鍵RESET,此外不多述。

          3.5 越限(超出6kg)報警電路和看門狗自動復位電路。

          當承重越限(超出6kg)時,全橋放大電路輸出電壓大于6V,報警電路由電壓比較電路和三級管驅動蜂鳴器電路組成,此處不多贅述。看門狗自動復位電路由可重觸發(fā)單穩(wěn)觸發(fā)器4538而成,4538內部有兩個單穩(wěn)觸發(fā)器功能部件,采用軟件置位的P1.7管腳定時喂狗,如軟件跑飛,則軟件不能及時喂狗,第一個單穩(wěn)觸發(fā)器不能及時觸發(fā),延時τ=RC秒后,其達穩(wěn)態(tài),利用此下降沿觸發(fā)另外一個單穩(wěn)觸發(fā)器(其輸出接AT89C51的RESET 端),只要有10秒的暫穩(wěn)態(tài)高電平,即可復位。可見,本次秤除設手動復位鍵外,還配備看門狗自動復位電路, 防止軟件跑飛,雙重保險,抗干擾性能強.

          4、電子計價秤的軟件

          電子計價秤軟件設計均采用模塊化設計,整個程序包括主程序、定時中斷程序、INT0中斷程序按鍵散轉程序、數據處理子程序(雙字節(jié)乘法、二—十進制轉換程序及逆轉換程序)、LCD十六位液晶靜態(tài)顯示子程序等模塊。所有程序均采用匯編語言編寫。電子計價秤的軟件設計思路說明如下:主程序的作用為程序初始化,計算單價*單重(單價和單重分別在定時中斷程序和INT0外部中斷程序中獲得),并時時顯示十進制的單重,單價,總價。設定T0為計數工作方式,T1為定時工作方式。其中R0為標志位寄存器當為00H時為正常顯示方式,當為01H時為累計顯示方式,在T1定時中斷程序中,一秒鐘采樣物料重量(已轉成脈沖頻率),并賦值重量計算RAM區(qū)和顯示 RAM區(qū)。在INT0外部中斷程序中,采樣單價并賦值單價計算RAM區(qū)和顯示RAM區(qū)。其中設R1為標志位寄存器,表示單價最大為99.9元,最多只能送三位,若再按鍵,則無效。設R2為標志位寄存器,表示累計金額時為最多50次,超過50次最后的顯示為第50次累計金額。內部30H-5FHRAM分配為單價,單重,總價,累計總價的計算和顯示RAM區(qū),此處不多贅述。由于篇幅所限,此處只給出主程序流程圖如圖4.1所示:



          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();