仿真版本:Proteus8.6及以上版本
程序編譯:Keil5 C51
編程語言:C語言
設計編號:【P02】
1.? 簡介
? 本文提出了一種基于51單片機的電子秤設計。該設計在硬件方面主要采用AT89C51單片機作為主控核心,采用壓力傳感器對數(shù)據(jù)進行采集,電子秤專用24位AD轉換芯片HX711對傳感器采集到的模擬量進行AD轉換,轉換后的數(shù)據(jù)送到單片機進行處理顯示,數(shù)據(jù)顯示由LCD1602液晶實現(xiàn)。
2.? 主要功能
a.系統(tǒng)可實現(xiàn)電子稱基本的稱重功能(稱重范圍為0~5Kg,重量誤差0.001Kg)。
b.系統(tǒng)應具備輸入單價、去皮、刪除、計算總價、校準加減的功能。
c.系統(tǒng)超出最大測量范圍5Kg時應有報警指示功能(蜂鳴器報警提示)。
3.? 源程序(Keil5)
本設計采用keil5 C51軟件(內附安裝包)實現(xiàn)程序設計。如需用keil4打開程序,可自行通過.c和.h文件新建工程即可。
#include <reg52.h>
#include <intrins.h>
#include <string.h>
bit bdata flag_key;
#include "main.h"
#include "LCD1602.h"
#include "HX711.h"
#include "keyboard.h"
#include "eeprom52.h"
#define uchar unsigned char
#define uint unsigned int
unsigned long HX711_Buffer = 0;
unsigned long Weight_Maopi = 0;
unsigned long Weight_Maopi_0 = 0;
unsigned int qupi=0;
long Weight_Shiwu = 0;
//鍵盤處理變量
unsigned char keycode;
unsigned char DotPos; //小數(shù)點標志及位置
uint GapValue,GapValue1;
unsigned long idata price; //單價,長整型值,單位為分
unsigned long idata danjia[8]={11,22,33,44,100,200,300,400};
unsigned char count_danjia;
unsigned long idata money,total_money; //總價,長整型值,單位為分
//定義標識
volatile bit FlagTest = 0; //定時測試標志,每0.5秒置位,測完清0
volatile bit FlagKeyPress = 0; //有鍵按下標志,處理完畢清0
//校準參數(shù)
//因為不同的傳感器特性曲線不是很一致,因此,每一個傳感器需要矯正這里這個參數(shù)才能使測量值很準確。
//當發(fā)現(xiàn)測試出來的重量偏大時,增加該數(shù)值。
//如果測試出來的重量偏小時,減小改數(shù)值。
//該值可以為小數(shù)
//#define GapValue 349
sbit LED=P1^1;
volatile bit ClearWeighFlag = 0; //傳感器調零標志位,清除0漂
/******************把數(shù)據(jù)保存到單片機內部eeprom中******************/
void write_eeprom()
{
SectorErase(0x1000);
GapValue1=GapValue&0x00ff;
byte_write(0x2000, GapValue1);
GapValue1=(GapValue&0xff00)>>8;
byte_write(0x2001, GapValue1);
byte_write(0x2060, a_a);
}
/******************把數(shù)據(jù)從單片機內部eeprom中讀出來*****************/
void read_eeprom()
{
GapValue = byte_read(0x2001);
GapValue = (GapValue<<8)|byte_read(0x2000);
a_a = byte_read(0x2060);
}
/**************開機自檢eeprom初始化*****************/
void init_eeprom()
{
read_eeprom(); //先讀
if(a_a != 1) //新的單片機初始單片機內問eeprom
{
GapValue = 3500;
a_a = 1;
write_eeprom(); //保存數(shù)據(jù)
}
}
//顯示單價,單位為元,四位整數(shù),兩位小數(shù)
void Display_Price()
{
LCD1602_write_com(0x8c);
LCD1602_write_data(price/100 + 0x30);
LCD1602_write_data(price%100/10 + 0x30);
LCD1602_write_data('.');
LCD1602_write_data(price%10 + 0x30);
}
//顯示重量,單位kg,兩位整數(shù),三位小數(shù)
void Display_Weight()
{
LCD1602_write_com(0x83);
LCD1602_write_data(Weight_Shiwu/1000 + 0x30);
LCD1602_write_data('.');
LCD1602_write_data(Weight_Shiwu%1000/100 + 0x30);
LCD1602_write_data(Weight_Shiwu%100/10 + 0x30);
LCD1602_write_data(Weight_Shiwu%10 + 0x30);
}
4.? 仿真proteus8.6
? 本設計采用proteus8.6軟件(內附安裝包)實現(xiàn)仿真設計,如下圖所示。proteus軟件一般存在高低版本兼容問題,該仿真是通過proteus8.6導出的,所以請盡量使用proteus8.6打開文件,低于proteus8.6的版本不能夠正常使用,高于proteus8.6的版本除了proteus8.8/8.9理論上可以正常使用。
初始界面:
稱重計價:
超重報警:
5.? 設計報告
設計報告主要包括硬件電路、軟件設計、仿真調試等等,僅供參考。
6.? 資料清單
設計資料主要包括C程序+仿真+設計報告+使用說明+元件清單+操作視頻等。
7.? 資料獲取鏈接
百度網盤下載鏈接:【P02】百度網盤下載鏈接
更多單片機仿真設計合集:單片機仿真設計合集