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

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

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

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

共1個(gè)文件

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

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

程序編譯:Keil5 C51

編程語言:C語言

設(shè)計(jì)編號:【P01】

1.? 簡介

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

2.? 主要功能

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

b.系統(tǒng)應(yīng)具備輸入單價(jià)、去皮、退格、計(jì)算總價(jià)的功能;

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>	         //調(diào)用單片機(jī)頭文件
#define uchar unsigned char  //無符號字符型 宏定義	變量范圍0~255
#define uint  unsigned int	 //無符號整型 宏定義	變量范圍0~65535
#define ulong unsigned long

#include<intrins.h>
  
sbit rs=P2^5;	 //寄存器選擇信號 H:數(shù)據(jù)寄存器  	L:指令寄存器
sbit rw=P2^6;	 //寄存器選擇信號 H:數(shù)據(jù)寄存器  	L:指令寄存器
sbit e =P2^7;	 //片選信號   下降沿觸發(fā)

sbit hx711_dout = P2^1; 
sbit hx711_sck  = P2^0; 

sbit beep = P1^3;     //蜂鳴器

long weight;

unsigned long HX711_Buffer = 0;
unsigned long Weight_Maopi = 0;

uchar flag_200ms ;
  
float GapValue = 400;



ulong price,z_price;   //單價(jià) 總價(jià)
uchar flag_p;
 
/******1ms延時(shí)函數(shù)***12M晶振**************/
void delay_1ms(uint q)
{
	uint i,j;
	for(i=0;i<q;i++)
		for(j=0;j<120;j++);
}

/********************************************************************
* 名稱 : delay_uint()
* 功能 : 小延時(shí)。
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void delay_uint(uint q)
{
	while(q--);
}

/********************************************************************
* 名稱 : write_com(uchar com)
* 功能 : 1602命令函數(shù)
* 輸入 : 輸入的命令值
* 輸出 : 無
***********************************************************************/
void write_com(uchar com)
{
	e=0;
	rs=0;
	rw=0;
	P0=com;
	delay_uint(3);
	e=1;
	delay_uint(25);
	e=0;
}

/********************************************************************
* 名稱 : write_data(uchar dat)
* 功能 : 1602寫數(shù)據(jù)函數(shù)
* 輸入 : 需要寫入1602的數(shù)據(jù)
* 輸出 : 無
***********************************************************************/
void write_data(uchar dat)
{
	e=0;
	rs=1;
	rw=0;
	P0=dat;
	delay_uint(3);
	e=1;
	delay_uint(25);
	e=0;	
}


/***********************lcd1602上顯示這字符函數(shù)************************/
void write_string(uchar hang,uchar add,uchar *p)
{
	if(hang==1)   
		write_com(0x80+add);
	else
		write_com(0x80+0x40+add);
	while(1)														 
	{
		if(*p == '