欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8783|回復(fù): 1
收起左側(cè)

hx711壓力傳感器的原理圖

[復(fù)制鏈接]
ID:551481 發(fā)表于 2019-5-30 22:00 | 顯示全部樓層 |閱讀模式
#include "main.h"
#include "LCD1602.h"
#include "HX711.h"
#include "EEPROM.H"

//定義變量
unsigned char KEY_NUM = 0;   //用來存放按鍵按下的鍵值
unsigned long HX711_Buffer = 0;  //用來存放HX711讀取出來的數(shù)據(jù)
unsigned long Weight_Maopi = 0; //用來存放毛皮數(shù)據(jù)
long Weight_Shiwu = 0;          //用來存放實(shí)物重量
long Max_Value = 0;             //用來存放設(shè)置最大值
char maxValueTable[4] = {1,0,0,0};
unsigned char state = 0;    //用來存放設(shè)置狀態(tài)
unsigned char Blink_Speed = 0;
#define Blink_Speed_Max 6          //該值可以改變設(shè)置指針閃爍頻率

//校準(zhǔn)參數(shù)
//因?yàn)椴煌膫鞲衅魈匦郧不是很一致,因此,每一個(gè)傳感器需要矯正這里這個(gè)參數(shù)才能使測量值很準(zhǔn)確。
//當(dāng)發(fā)現(xiàn)測試出來的重量偏大時(shí),增加該數(shù)值。
//如果測試出來的重量偏小時(shí),減小改數(shù)值。
//該值可以為小數(shù)
#define GapValue 780

//傳感器最大測量值,單位是g
#define AlarmValue 3000                       

//****************************************************
//主函數(shù)
//****************************************************
void main()
{
        Init_LCD1602();                                                //初始化LCD1602

        LCD1602_write_com(0x80);                        //設(shè)置LCD1602指針
        LCD1602_write_word("Welcome to use!");
       
        Get_Maopi();
        Get_Maopi();
        Delay_ms(2000);                 //延時(shí)2s
        Get_Maopi();
        Get_Maopi();                                //稱毛皮重量        //多次測量有利于HX711穩(wěn)定
    LCD1602_write_com(0x01);    //清屏

    //讀取EEPROM中保存的報(bào)警值
    maxValueTable[0] = byte_read(0x2000);
    maxValueTable[1] = byte_read(0x2001);
    maxValueTable[2] = byte_read(0x2002);
    maxValueTable[3] = byte_read(0x2003);
    Max_Value = maxValueTable[0]*1000+maxValueTable[1]*100+maxValueTable[2]*10+maxValueTable[3];    //計(jì)算超限報(bào)警界限值
        while(1)
        {
        Get_Weight();               
       
                //顯示當(dāng)前重量
                LCD1602_write_com(0x80);
        LCD1602_write_word("Weight=");
                LCD1602_write_data(Weight_Shiwu%10000/1000 + 0x30);
                LCD1602_write_data('.');
                LCD1602_write_data(Weight_Shiwu%1000/100 + 0x30);
                LCD1602_write_data(Weight_Shiwu%100/10 + 0x30);
                LCD1602_write_data(Weight_Shiwu%10 + 0x30);               
                LCD1602_write_word("Kg");

                KEY_NUM = Scan_Key();
        if(KEY_NUM == 1)        //按鍵1切換設(shè)置狀態(tài)
        {
            state++;
            if(state == 5)
            {
                state = 0;
                SectorErase(0x2000);
                byte_write(0x2000,maxValueTable[0]);                                //保存EEPROM數(shù)據(jù)
                byte_write(0x2001,maxValueTable[1]);
                byte_write(0x2002,maxValueTable[2]);                                //保存EEPROM數(shù)據(jù)
                byte_write(0x2003,maxValueTable[3]);
                Max_Value = maxValueTable[0]*1000+maxValueTable[1]*100+maxValueTable[2]*10+maxValueTable[3];    //計(jì)算超限報(bào)警界限值
            }
        }
        if(KEY_NUM == 2)        //按鍵加
        {
            if(state != 0)
            {
                maxValueTable[state-1]++;
                if(maxValueTable[state-1] >= 10)
                {
                    maxValueTable[state-1] = 0;
                }
            }

        }
        if(KEY_NUM == 3)        //按鍵減
        {
            if(state != 0)
            {
                maxValueTable[state-1]--;
                if(maxValueTable[state-1] <= -1)
                {
                    maxValueTable[state-1] = 9;
                }
            }
        }
                if(KEY_NUM == 4)
                {
                        Get_Maopi();                        //去皮       
                }


        if(state != 0)
        {
            Blink_Speed ++;
            if(Blink_Speed == Blink_Speed_Max)
            {
                Blink_Speed = 0;
            }
        }
        switch(state)
        {
            case 0:
                LCD1602_write_com(0x80+0x40);
                LCD1602_write_word("MAX=");
                LCD1602_write_data(maxValueTable[0]+0x30);
                LCD1602_write_data('.');
                LCD1602_write_data(maxValueTable[1]+0x30);
                LCD1602_write_data(maxValueTable[2]+0x30);
                LCD1602_write_data(maxValueTable[3]+0x30);
                LCD1602_write_word("Kg");
                break;
            case 1:
                LCD1602_write_com(0x80+0x40);
                LCD1602_write_word("MAX=");
                if(Blink_Speed < Blink_Speed_Max/2)
                {
                    LCD1602_write_data(maxValueTable[0]+0x30);
                }
                else
                {
                    LCD1602_write_data(' ');
                }
                LCD1602_write_data('.');
                LCD1602_write_data(maxValueTable[1]+0x30);
                LCD1602_write_data(maxValueTable[2]+0x30);
                LCD1602_write_data(maxValueTable[3]+0x30);
                LCD1602_write_word("Kg");
                break;
            case 2:
                LCD1602_write_com(0x80+0x40);
                LCD1602_write_word("MAX=");
                LCD1602_write_data(maxValueTable[0]+0x30);
                LCD1602_write_data('.');
                if(Blink_Speed < Blink_Speed_Max/2)
                {
                    LCD1602_write_data(maxValueTable[1]+0x30);
                }
                else
                {
                    LCD1602_write_data(' ');
                }
                LCD1602_write_data(maxValueTable[2]+0x30);
                LCD1602_write_data(maxValueTable[3]+0x30);
                LCD1602_write_word("Kg");
                break;
            case 3:
                LCD1602_write_com(0x80+0x40);
                LCD1602_write_word("MAX=");
                LCD1602_write_data(maxValueTable[0]+0x30);
                LCD1602_write_data('.');
                LCD1602_write_data(maxValueTable[1]+0x30);
                if(Blink_Speed < Blink_Speed_Max/2)
                {
                    LCD1602_write_data(maxValueTable[2]+0x30);
                }
                else
                {
                    LCD1602_write_data(' ');
                }               
                LCD1602_write_data(maxValueTable[3]+0x30);
                LCD1602_write_word("Kg");
                break;
            case 4:
                LCD1602_write_com(0x80+0x40);
                LCD1602_write_word("MAX=");
                LCD1602_write_data(maxValueTable[0]+0x30);
                LCD1602_write_data('.');
                LCD1602_write_data(maxValueTable[1]+0x30);
                LCD1602_write_data(maxValueTable[2]+0x30);
                if(Blink_Speed < Blink_Speed_Max/2)
                {
                    LCD1602_write_data(maxValueTable[3]+0x30);
                }
                else
                {
                    LCD1602_write_data(' ');
                }                 
                LCD1602_write_word("Kg");
                break;
            default:
                break;

        }

        //超限報(bào)警
        if(Weight_Shiwu >= Max_Value || Weight_Shiwu >= AlarmValue)                //超過設(shè)置最大值或者傳感器本身量程最大值報(bào)警       
                {
                        Buzzer = 0;       
                }
                else
                {
                        Buzzer = 1;
                }
        }
}

//****************************************************
//稱重
//****************************************************
void Get_Weight()
{
        Weight_Shiwu = HX711_Read();
        Weight_Shiwu = Weight_Shiwu - Weight_Maopi;                //獲取凈重
        if(Weight_Shiwu >= 0)                       
        {       
                Weight_Shiwu = (unsigned long)((float)Weight_Shiwu/GapValue);         //計(jì)算實(shí)物的實(shí)際重量
        }
        else
        {
                Weight_Shiwu = 0;
        }
       
}

//****************************************************
//獲取毛皮重量
//****************************************************
void Get_Maopi()
{
        Weight_Maopi = HX711_Read();       
}


//****************************************************
//MS延時(shí)函數(shù)(12M晶振下測試)
//****************************************************
void Delay_ms(unsigned int n)
{
        unsigned int  i,j;
        for(i=0;i<n;i++)
                for(j=0;j<123;j++);
}

//****************************************************
//蜂鳴器程序
//****************************************************
void Buzzer_Di()
{
        Buzzer = 0;
        Delay_ms(10);
        Buzzer = 1;
        Delay_ms(10);
}

//****************************************************
//按鍵掃描程序
//****************************************************
unsigned char Scan_Key()
{       
    if( KEY1 == 0 )                                                //按鍵掃描
        {
                Delay_ms(10);                                        //延時(shí)去抖
                if( KEY1 == 0 )
                {
                        Buzzer_Di();
                        while(KEY1 == 0);                        //等待松手
                        return 1;
                }
        }
    if( KEY2 == 0 )                                                //按鍵掃描
        {
                Delay_ms(10);                                        //延時(shí)去抖
                if( KEY2 == 0 )
                {
                        Buzzer_Di();
                        while(KEY2 == 0);                        //等待松手
                        return 2;
                }
        }
    if( KEY3 == 0 )                                                //按鍵掃描
        {
                Delay_ms(10);                                        //延時(shí)去抖
                if( KEY3 == 0 )
                {
                        Buzzer_Di();
                        while(KEY3 == 0);                        //等待松手
                        return 3;
                }
        }
        if( KEY4 == 0 )                                                //按鍵掃描
        {
                Delay_ms(10);                                        //延時(shí)去抖
                if( KEY4 == 0 )
                {
                        Buzzer_Di();
                        while(KEY4 == 0);                        //等待松手
                        return 4;
                }
        }
    return 0;
}
#include "LCD1602.h"

//****************************************************
//MS延時(shí)函數(shù)(12M晶振下測試)
//****************************************************
void LCD1602_delay_ms(unsigned int n)
{
        unsigned int  i,j;
        for(i=0;i<n;i++)
                for(j=0;j<123;j++);
}

//****************************************************
//寫指令
//****************************************************
void LCD1602_write_com(unsigned char com)
{
        LCD1602_RS = 0;
        LCD1602_delay_ms(1);
        LCD1602_EN = 1;
        LCD1602_PORT = com;
        LCD1602_delay_ms(1);
        LCD1602_EN = 0;
}

//****************************************************
//寫數(shù)據(jù)
//****************************************************
void LCD1602_write_data(unsigned char dat)
{
        LCD1602_RS = 1;
        LCD1602_delay_ms(1);       
        LCD1602_PORT = dat;
        LCD1602_EN = 1;
        LCD1602_delay_ms(1);
        LCD1602_EN = 0;
}

//****************************************************
//連續(xù)寫字符
//****************************************************
void LCD1602_write_word(unsigned char *s)
{
        while(*s>0)
        {
                LCD1602_write_data(*s);
                s++;
        }
}

void Init_LCD1602()
{
        LCD1602_EN = 0;
        LCD1602_RW = 0;                                                //設(shè)置為寫狀態(tài)
        LCD1602_write_com(0x38);                        //顯示模式設(shè)定
        LCD1602_write_com(0x0c);                        //開關(guān)顯示、光標(biāo)有無設(shè)置、光標(biāo)閃爍設(shè)置
        LCD1602_write_com(0x06);                        //寫一個(gè)字符后指針加一
        LCD1602_write_com(0x01);                        //清屏指令
}

#include "HX711.h"


//****************************************************
//延時(shí)函數(shù)
//****************************************************
void Delay__hx711_us(void)
{
        _nop_();
        _nop_();
}

//****************************************************
//讀取HX711
//****************************************************
unsigned long HX711_Read(void)        //增益128
{
        unsigned long count;
        unsigned char i;
          HX711_DOUT=1;
        Delay__hx711_us();
          HX711_SCK=0;
          count=0;
          while(HX711_DOUT);
          for(i=0;i<24;i++)
        {
                  HX711_SCK=1;
                  count=count<<1;
                HX711_SCK=0;
                  if(HX711_DOUT)
                        count++;
        }
        HX711_SCK=1;
    count=count^0x800000;//第25個(gè)脈沖下降沿來時(shí),轉(zhuǎn)換數(shù)據(jù)
        Delay__hx711_us();
        HX711_SCK=0;  
        return(count);
}
#include "EEPROM.H"

/* ================ 打開 ISP,IAP 功能 ================= */
void ISP_IAP_enable(void)
{
EA = 0;       /* 關(guān)中斷   */
ISP_CONTR = ISP_CONTR & 0x18;       /* 0001,1000 */
ISP_CONTR = ISP_CONTR | WaitTime; /* 寫入硬件延時(shí) */
ISP_CONTR = ISP_CONTR | 0x80;       /* ISPEN=1  */
}
/* =============== 關(guān)閉 ISP,IAP 功能 ================== */
void ISP_IAP_disable(void)
{
ISP_CONTR = ISP_CONTR & 0x7f; /* ISPEN = 0 */
ISP_TRIG = 0x00;
EA   =   1;   /* 開中斷 */
}
/* ================ 公用的觸發(fā)代碼 ==================== */
void ISPgoon(void)
{
ISP_IAP_enable();   /* 打開 ISP,IAP 功能 */
ISP_TRIG = 0x46;  /* 觸發(fā)ISP_IAP命令字節(jié)1 */
ISP_TRIG = 0xb9;  /* 觸發(fā)ISP_IAP命令字節(jié)2 */
_nop_();
}
/* ==================== 字節(jié)讀 ======================== */
unsigned char byte_read(unsigned int byte_addr)
{
ISP_ADDRH = (unsigned char)(byte_addr >> 8);/* 地址賦值 */
ISP_ADDRL = (unsigned char)(byte_addr & 0x00ff);
ISP_CMD   = ISP_CMD & 0xf8;   /* 清除低3位  */
ISP_CMD   = ISP_CMD | RdCommand; /* 寫入讀命令 */
ISPgoon();       /* 觸發(fā)執(zhí)行  */
ISP_IAP_disable();    /* 關(guān)閉ISP,IAP功能 */
return (ISP_DATA);    /* 返回讀到的數(shù)據(jù) */
}
/* ================== 扇區(qū)擦除 ======================== */
void SectorErase(unsigned int sector_addr)
{
unsigned int iSectorAddr;
iSectorAddr = (sector_addr & 0xfe00); /* 取扇區(qū)地址 */
ISP_ADDRH = (unsigned char)(iSectorAddr >> 8);
ISP_ADDRL = 0x00;
ISP_CMD = ISP_CMD & 0xf8;   /* 清空低3位  */
ISP_CMD = ISP_CMD | EraseCommand; /* 擦除命令3  */
ISPgoon();       /* 觸發(fā)執(zhí)行  */
ISP_IAP_disable();    /* 關(guān)閉ISP,IAP功能 */
}
/* ==================== 字節(jié)寫 ======================== */
void byte_write(unsigned int byte_addr, unsigned char original_data)
{
ISP_ADDRH = (unsigned char)(byte_addr >> 8);  /* 取地址  */
ISP_ADDRL = (unsigned char)(byte_addr & 0x00ff);
ISP_CMD  = ISP_CMD & 0xf8;    /* 清低3位 */
ISP_CMD  = ISP_CMD | PrgCommand;  /* 寫命令2 */
ISP_DATA = original_data;   /* 寫入數(shù)據(jù)準(zhǔn)備 */
ISPgoon();       /* 觸發(fā)執(zhí)行  */
ISP_IAP_disable();     /* 關(guān)閉IAP功能 */
}








51單片機(jī)電子秤原理圖.pdf

284.59 KB, 下載次數(shù): 43, 下載積分: 黑幣 -5

回復(fù)

使用道具 舉報(bào)

ID:1 發(fā)表于 2019-6-1 03:09 | 顯示全部樓層
本帖需要重新編輯補(bǔ)全電路原理圖,源碼,詳細(xì)說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表