資料清單: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 == '