• 方案介紹
    • 1.? 簡介
    • 2.? 主要功能
    • 3.? 源程序(Keil5)
    • 4.? 仿真proteus8.6
    • 5.? 設(shè)計(jì)報(bào)告
    • 6.? 資料清單
    • 7.? 資料獲取鏈接
  • 附件下載
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

基于51單片機(jī)的電子秤設(shè)計(jì)(三)

04/21 09:01
434
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

單片機(jī)仿真設(shè)計(jì)合集資料獲取.pdf

共1個(gè)文件

資料清單:C程序+仿真+設(shè)計(jì)報(bào)告+使用說明+元件清單+操作視頻

仿真版本:Proteus8.6及以上版本

程序編譯:Keil5 C51

編程語言:C語言

設(shè)計(jì)編號(hào):【P03】

1.? 簡介

? 本文提出了一種基于51單片機(jī)的電子秤設(shè)計(jì)。該設(shè)計(jì)在硬件方面主要采用AT89C51單片機(jī)作為主控核心,采用壓力傳感器對(duì)數(shù)據(jù)進(jìn)行采集,電子秤專用24位AD轉(zhuǎn)換芯片HX711對(duì)傳感器采集到的模擬量進(jìn)行AD轉(zhuǎn)換,轉(zhuǎn)換后的數(shù)據(jù)送到單片機(jī)進(jìn)行處理顯示,數(shù)據(jù)顯示由4位數(shù)碼管液晶實(shí)現(xiàn)。

2.? 主要功能

a.系統(tǒng)可實(shí)現(xiàn)電子稱基本的稱重功能(稱重范圍為0~5Kg,重量誤差0.001Kg);

b.系統(tǒng)應(yīng)具備去皮、校準(zhǔn)加減的功能;

c.系統(tǒng)超出最大測量范圍5Kg時(shí)應(yīng)有報(bào)警指示功能(蜂鳴器報(bào)警提示);

3.? 源程序(Keil5)

本設(shè)計(jì)采用keil5 C51軟件(內(nèi)附安裝包)實(shí)現(xiàn)程序設(shè)計(jì)。如需用keil4打開程序,可自行通過.c和.h文件新建工程即可。

#include <reg52.h>
#include <intrins.h>
#include <string.h>
#include "main.h"
#include "HX711.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;
long Weight_Shiwu = 0;
unsigned int qupi=0;
unsigned char p=0;
//鍵盤處理變量
unsigned char keycode;
unsigned char key_press_num=0;

uint GapValue,GapValue1;
bit flag_cz=0;

uchar code  LEDData[]={0x5F,0x44,0x9D,0xD5,0xC6,0xD3,0xDB,0x47,0xDF,0xD7,0xCF,0xDA,0x9B,0xDC,0x9B,0x8B}; //數(shù)碼管顯示碼表
//定義標(biāo)識(shí)
volatile bit FlagTest = 0;		//定時(shí)測試標(biāo)志,每0.5秒置位,測完清0
volatile bit FlagKeyPress = 0;  //有鍵按下標(biāo)志,處理完畢清0
//校準(zhǔn)參數(shù)
//因?yàn)椴煌膫鞲衅魈匦郧€不是很一致,因此,每一個(gè)傳感器需要矯正這里這個(gè)參數(shù)才能使測量值更準(zhǔn)確。
//當(dāng)發(fā)現(xiàn)測試出來的重量偏大時(shí),增加該數(shù)值。
//如果測試出來的重量偏小時(shí),減小改數(shù)值。
//該值可以為小數(shù)
sbit LED=P1^1;
sbit ROW1=P3^0;
sbit ROW2=P3^1;
sbit ROW3=P3^2;
sbit DIAN = P0^5;        		//小數(shù)點(diǎn)

volatile bit ClearWeighFlag = 0; //傳感器調(diào)零標(biāo)志位,清除0漂

/******************把數(shù)據(jù)保存到單片機(jī)內(nèi)部eeprom中******************/
void write_eeprom()
{
	SectorErase(0x2000);
	GapValue1=GapValue&0x00ff;
	byte_write(0x2000, GapValue1);
	GapValue1=(GapValue&0xff00)>>8;
	byte_write(0x2001, GapValue1);
	byte_write(0x2060, a_a);	
}

/******************把數(shù)據(jù)從單片機(jī)內(nèi)部eeprom中讀出來*****************/
void read_eeprom()
{
	GapValue   = byte_read(0x2001);
	GapValue   = (GapValue<<8)|byte_read(0x2000);
	a_a      = byte_read(0x2060);
}

/**************開機(jī)自檢eeprom初始化*****************/
void init_eeprom() 
{
	read_eeprom();		//先讀
	if(a_a != 1)		//新的單片機(jī)初始單片機(jī)內(nèi)問eeprom
	{
		GapValue  = 3500;
		a_a = 1;
		write_eeprom();	   //保存數(shù)據(jù)
	}	
}
/*****顯示開機(jī)初始化等待畫面*****/
void Disp_init(void)    
{
	P0 = ~0x80;      //顯示----
	P2 = 0xBF;		 //依次打開各位
	Delay_ms(1);		 //延時(shí)
	P2 = 0xEF;
	Delay_ms(1);   
	P2 = 0xFB;
	Delay_ms(1);
	P2 = 0xFE;
	Delay_ms(1);
	P2 = 0xFF;         //關(guān)閉顯示
}

//顯示重量,單位kg,兩位整數(shù),三位小數(shù)
void Display_Weight()
{
    P0 = ~LEDData[Weight_Shiwu%10];      //
	P2 = 0xBF;		 //打開位
	Delay_ms(1);		 //延時(shí)
	P2 = 0xff;         //關(guān)閉顯示
	P0=~LEDData[Weight_Shiwu%100/10];    //顯示個(gè)位
	P2 = 0xEF;
	Delay_ms(1);
	P2 = 0xff;         //關(guān)閉顯示
	P0 =~LEDData[Weight_Shiwu%1000/100];    //顯示十位
	P2 = 0xFB;
	Delay_ms(1);
	P2 = 0xff;         //關(guān)閉顯示
	P0 =~LEDData[Weight_Shiwu%10000/1000];    //顯示百位
	DIAN = 0;         //顯示小數(shù)點(diǎn)
	P2 = 0xFE;
	Delay_ms(1);
	P2 = 0xff;         //關(guān)閉顯示
}

//定時(shí)器0初始化
void Timer0_Init()
{
	ET0 = 1;        //允許定時(shí)器0中斷
	TMOD = 1;       //定時(shí)器工作方式選擇
	TL0 = 0xb0;     
	TH0 = 0x3c;     //定時(shí)器賦予初值
	TR0 = 1;        //啟動(dòng)定時(shí)器
}

//定時(shí)器0中斷
void Timer0_ISR (void) interrupt 1 using 0
{
uchar Counter;
	TL0 = 0xb0;
	TH0 = 0x3c;     //定時(shí)器賦予初值

	//每0.5秒鐘刷新重量
    Counter ++;
    if (Counter >= 10)
    {
       FlagTest = 1;
	   Counter = 0;
    }
}

4.? 仿真proteus8.6

? 本設(shè)計(jì)采用proteus8.6軟件(內(nèi)附安裝包)實(shí)現(xiàn)仿真設(shè)計(jì),如下圖所示。proteus軟件一般存在高低版本兼容問題,該仿真是通過proteus8.6導(dǎo)出的,所以請(qǐng)盡量使用proteus8.6打開文件,低于proteus8.6的版本不能夠正常使用,高于proteus8.6的版本除了proteus8.8/8.9理論上可以正常使用。

稱重:

超重報(bào)警:

5.? 設(shè)計(jì)報(bào)告

設(shè)計(jì)報(bào)告主要包括硬件電路、軟件設(shè)計(jì)、仿真調(diào)試等等,僅供參考。

6.? 資料清單

設(shè)計(jì)資料主要包括C程序+仿真+設(shè)計(jì)報(bào)告+使用說明+元件清單+操作視頻等。

7.? 資料獲取鏈接

百度網(wǎng)盤下載鏈接:【P03】百度網(wǎng)盤下載鏈接

更多單片機(jī)仿真設(shè)計(jì)合集:單片機(jī)仿真設(shè)計(jì)合集

  • 單片機(jī)仿真設(shè)計(jì)合集資料獲取.pdf
    下載

相關(guān)推薦