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

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

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

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

共1個文件

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

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

程序編譯:Keil5 C51

編程語言:C語言

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

1.? 簡介

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

2.? 主要功能

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

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

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

3.? 源程序(Keil5)

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

#include <reg52.h>	         //調(diào)用單片機頭文件
#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;   //單價 總價
uchar flag_p;
 
/******1ms延時函數(shù)***12M晶振**************/
void delay_1ms(uint q)
{
	uint i,j;
	for(i=0;i<q;i++)
		for(j=0;j<120;j++);
}

/********************************************************************
* 名稱 : delay_uint()
* 功能 : 小延時。
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
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 == '