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

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

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

單片機仿真設計合集資料獲取.pdf

共1個文件

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

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

程序編譯:Keil5 C51

編程語言:C語言

設計編號:【P01】

1.? 簡介

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

2.? 主要功能

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

b.系統應具備輸入單價、去皮、退格、計算總價的功能;

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

3.? 源程序(Keil5)

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

#include <reg52.h>	         //調用單片機頭文件
#define uchar unsigned char  //無符號字符型 宏定義	變量范圍0~255
#define uint  unsigned int	 //無符號整型 宏定義	變量范圍0~65535
#define ulong unsigned long

#include<intrins.h>
  
sbit rs=P2^5;	 //寄存器選擇信號 H:數據寄存器  	L:指令寄存器
sbit rw=P2^6;	 //寄存器選擇信號 H:數據寄存器  	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延時函數***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命令函數
* 輸入 : 輸入的命令值
* 輸出 : 無
***********************************************************************/
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寫數據函數
* 輸入 : 需要寫入1602的數據
* 輸出 : 無
***********************************************************************/
void write_data(uchar dat)
{
	e=0;
	rs=1;
	rw=0;
	P0=dat;
	delay_uint(3);
	e=1;
	delay_uint(25);
	e=0;	
}


/***********************lcd1602上顯示這字符函數************************/
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 == '