基于51單片機(jī)的電子秤程序_第1頁
基于51單片機(jī)的電子秤程序_第2頁
基于51單片機(jī)的電子秤程序_第3頁
基于51單片機(jī)的電子秤程序_第4頁
基于51單片機(jī)的電子秤程序_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上#include <REGX51.H>#include<intrins.h>/#include "LCD1602.h"/#include "HX711.h"#define uint unsigned int #define uchar unsigned charsbit LCD1602_RS = P25;sbit LCD1602_RW = P26;sbit LCD1602_EN = P27;sbit HX711_DOUT=P20; sbit HX711_SCK=P21; unsigned long HX7

2、11_Buffer = 0;unsigned long Weight_Maopi = 0,Weight_Shiwu = 0;char Price_Count = 0;uchar KEY_NUM = 0;uchar Price_Buffer3 = 0x00,0x00,0x00;unsigned long Money = 0;bit Flag_OK = 0;uchar com;/延時(shí)函數(shù)/*void Delay_hx711_us(void)_nop_();_nop_();void LCD1602_delay_ms(unsigned int n)unsigned int i,j;for(i=0;i&

3、lt;n;i+)for(j=0;j<123;j+);void Delay_ms(unsigned int n)unsigned int i,j;for(i=0;i<n;i+)for(j=0;j<123;j+);/*/寫指令/*void LCD1602_write_com( uchar com)LCD1602_RS = 0;LCD1602_delay_ms(1);LCD1602_EN = 1; P0 = com;LCD1602_delay_ms(1);LCD1602_EN = 0;/*/寫數(shù)據(jù)/*void LCD1602_write_data( uchar dat)LCD160

4、2_RS = 1;LCD1602_delay_ms(1);P0 = dat;LCD1602_EN = 1;LCD1602_delay_ms(1);LCD1602_EN = 0;/*/連續(xù)寫字符/*void LCD1602_write_word(unsigned char *s)while(*s>0)LCD1602_write_data(*s);s+;void Init_LCD1602()LCD1602_EN = 0;LCD1602_RW = 0;/設(shè)置為寫狀態(tài)LCD1602_write_com(0x38);/顯示模式設(shè)定LCD1602_write_com(0x0c);/開關(guān)顯示、光標(biāo)有無

5、設(shè)置、光標(biāo)閃爍設(shè)置LCD1602_write_com(0x06);/寫一個(gè)字符后指針加一LCD1602_write_com(0x01);/清屏指令/*/矩陣鍵盤掃描/*unsigned char KEY_Scan()unsigned char temp = 0;unsigned char com = 0x55 , com1 = 0 , com2 = 0;P3=0xf0;if(P3!=0xf0)com1=P3;P3=0x0f;com2=P3; P3=0xf0; while(P3!=0xf0); temp=com1|com2;if(temp=0xee)com=1;/數(shù)字1if(temp=0xed)

6、com=4;/數(shù)字4if(temp=0xeb)com=7;/數(shù)字7if(temp=0xe7)com=11;/備用鍵*號鍵if(temp=0xd7)com=0;/數(shù)字0if(temp=0xb7)com=14;/備用鍵*號鍵if(temp=0xde)com=2; /數(shù)字2if(temp=0xdd)com=5; /數(shù)字5if(temp=0xdb)com=8;/數(shù)字8if(temp=0xbe)com=3;/數(shù)字3if(temp=0xbd)com=6; /數(shù)字6if(temp=0xbb)com=9;/數(shù)字9if(temp=0x7e)com=16;/數(shù)字A鍵,去皮功能 if(temp=0x7d)com=1

7、5;/數(shù)字B鍵清除鍵,二次測量if(temp=0x7b)com=12;/數(shù)字C輸入單價(jià)錯(cuò)誤時(shí)返回上一步if(temp=0x77)com=13;/數(shù)字D鍵,計(jì)算總價(jià) return(com);unsigned long HX711_Read(void)/增益128unsigned long count; unsigned char i; HX711_DOUT=1; Delay_hx711_us(); HX711_SCK=0; count=0; while(HX711_DOUT); for(i=0;i<24;i+) HX711_SCK=1; count=count<<1; HX71

8、1_SCK=0; if(HX711_DOUT)count+; HX711_SCK=1; count=count0x;/第25個(gè)脈沖下降沿來時(shí),轉(zhuǎn)換數(shù)據(jù)Delay_hx711_us();HX711_SCK=0; return(count);/*/稱重/*void Get_Weight()HX711_Buffer = HX711_Read();HX711_Buffer = HX711_Buffer/100;if(HX711_Buffer > Weight_Maopi)Weight_Shiwu = HX711_Buffer;Weight_Shiwu = Weight_Shiwu - Weigh

9、t_Maopi;/獲取實(shí)物的AD采樣數(shù)值。Weight_Shiwu = (unsigned int)(float)Weight_Shiwu/4.22+0.05); /計(jì)算實(shí)物的實(shí)際重量/因?yàn)椴煌膫鞲衅魈匦郧€不一樣,因此,每一個(gè)傳感器需要矯正這里的4.30這個(gè)除數(shù)。/當(dāng)發(fā)現(xiàn)測試出來的重量偏大時(shí),增加該數(shù)值。/如果測試出來的重量偏小時(shí),減小改數(shù)值。/該數(shù)值一般在4.0-5.0之間。因傳感器不同而定。/+0.05是為了四舍五入百分位/Buzzer = 1;/關(guān)閉警報(bào)/else if(HX711_Buffer < Weight_Maopi - 30)/Buzzer = 0;/負(fù)重量報(bào)警/el

10、se if(HX711_Buffer > Weight_Maopi + 24970)/大于5Kg的最大量程,報(bào)警/Buzzer = 0;/if(Weight_Shiwu > 5000 | HX711_Buffer < Weight_Maopi - 30)/Buzzer = 0;/else/Buzzer = 1;/*/獲取毛皮重量/*void Get_Maopi()HX711_Buffer = HX711_Read();Weight_Maopi = HX711_Buffer/100; /*/主函數(shù)/*void main()Init_LCD1602();/初始化LCD1602LC

11、D1602_write_com(0x80);/指針設(shè)置LCD1602_write_word("Welcome to use! ");/開機(jī)畫面第一行Delay_ms(2000); /延時(shí)2sloop:Price_Count = 0;Price_Buffer0 = 0;Price_Buffer1 = 0;Price_Buffer2 = 0;Flag_OK = 0;LCD1602_write_com(0x80);/指針設(shè)置LCD1602_write_word("WEI g|PRI | MON ");LCD1602_write_com(0x80+0x40);/

12、指針設(shè)置LCD1602_write_word("0.000| . | . ");Get_Maopi();/稱毛皮重量while(1)if( Flag_OK = 0)Get_Weight();/稱重/顯示當(dāng)前重量LCD1602_write_com(0x80+0x40);LCD1602_write_data(Weight_Shiwu/1000 + 0x30);LCD1602_write_data('.');LCD1602_write_data(Weight_Shiwu%1000/100 + 0x30);LCD1602_write_data(Weight_Shiw

13、u%100/10 + 0x30);LCD1602_write_data(Weight_Shiwu%10 + 0x30);KEY_NUM = KEY_Scan();if( KEY_NUM != 0x55)/當(dāng)返回的不是初值時(shí)候,確認(rèn)按鍵按下。if(KEY_NUM = 16)/數(shù)字A鍵,去皮功能Get_Maopi();/去皮if(KEY_NUM = 15)/數(shù)字B鍵清除鍵,二次測量goto loop;if(KEY_NUM = 12)/數(shù)字C輸入單價(jià)錯(cuò)誤時(shí)返回上一步Price_Count-;if( Price_Count < 0)Price_Count = 0;Price_BufferPric

14、e_Count = 0; /清除上一個(gè)輸入的數(shù)據(jù)switch(Price_Count)case 0:LCD1602_write_com(0x80+0x40+6);LCD1602_write_data(' ');break;case 1:LCD1602_write_com(0x80+0x40+7);LCD1602_write_data(' ');break;case 2:LCD1602_write_com(0x80+0x40+9);LCD1602_write_data(' ');break;default : break;if(KEY_NUM =

15、13)/數(shù)字D鍵,計(jì)算總價(jià)Money = Price_Buffer0 * 100 + Price_Buffer1 * 10 + Price_Buffer2;Money = Money * Weight_Shiwu / 1000;LCD1602_write_com(0x80+0x40+11);LCD1602_write_data(Money/1000 + 0x30);LCD1602_write_data(Money%1000/100 + 0x30);LCD1602_write_data(Money%100/10 + 0x30);LCD1602_write_data('.');LCD1602_write_data(Money%10 + 0x30);Flag_OK = 1;if(KEY_NUM >= 0 && KEY_NUM <= 9) /顯示輸入的價(jià)值Price_BufferPrice_Count = KEY_NUM;switch(Price_Count)case 0:LCD1602_write_com(0x80+0x40+6);LCD1602_write_data(Price_Buffer0 + 0x30);brea

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論