久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3583|回復: 0
打印 上一主題 下一主題
收起左側

HX711壓力傳感器+51單片機程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:872202 發表于 2021-1-2 15:38 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
數模轉換元件為HX711
程序:
#include <reg51.h>
#include <intrins.h>
sbit HX711_DOUT=P2^1;
sbit HX711_SCK=P2^0;
unsigned long HX711_Buffer = 0;
unsigned long Weight_Maopi = 0;
long Weight_Shiwu = 0;
unsigned char flag = 0;
bit Flag_ERROR = 0;
void Delay_ms(unsigned int);
#define GapValue 400
sbit KEY1=P3^2;
sbit LCD1602_RS=P2^6;
sbit LCD1602_RW=P2^5;
sbit LCD1602_EN=P2^7;

unsigned char Num = 0;
bit Flag_Receive_OK = 0;

void Uart_Init(void);
void Send_Word(unsigned char *p);
void Get_Weight();
void Scan_Key();
void Get_Maopi();
void Send_ASCII(unsigned char c);
void LCD1602_delay_ms(unsigned int n);
void LCD1602_write_com(unsigned char com);
void LCD1602_write_data(unsigned char dat);
void LCD1602_write_word(unsigned char *s);
void Init_LCD1602();
void Delay__hx711_us(void);
unsigned long HX711_Read(void);


void main()
{
     Uart_Init();
    Send_Word("Welcome to use!\n");
        
        Init_LCD1602();
        LCD1602_write_com(0x80);
        LCD1602_write_word("  2021-1-4   ");
        Delay_ms(1000);                 //延時,等待傳感器穩定

        Get_Maopi();                                //稱毛皮重量
        
        while(1)
        {
                EA = 0;
                Get_Weight();                        
                EA = 1;

                Scan_Key();

                if( Flag_ERROR == 1)
                {
            Send_Word("ERROR\n");
                        
                        LCD1602_write_com(0x80+0x40);
                        LCD1602_write_word("ERROR ");
               
                }               
                else
                {      
                                   
            Send_ASCII(Weight_Shiwu/1000 + 0X30);
            Send_ASCII(Weight_Shiwu%1000/100 + 0X30);
            Send_ASCII(Weight_Shiwu%100/10 + 0X30);
            Send_ASCII(Weight_Shiwu%10 + 0X30);
            Send_Word(" MPa\n");
                                
                        LCD1602_write_com(0x80+0x40);
                        LCD1602_write_data(Weight_Shiwu/1000 + 0X30);
            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(" MPa");
                }
               
        }
}

//掃描按鍵
void Scan_Key()
{
        if(KEY1 == 0)
        {
                Delay_ms(5);
                if(KEY1 == 0)
                {
                        while(KEY1 == 0);
                        Get_Maopi();                        
                }        
        }
}

void Get_Weight()
{
        Weight_Shiwu = HX711_Read();
                Weight_Shiwu = Weight_Shiwu - Weight_Maopi;        
        if(Weight_Shiwu > 0)                        
        {        
                Weight_Shiwu = (unsigned int)((float)Weight_Shiwu/GapValue);         
                                                                                                                                                
                                                                                                                                                
                if(Weight_Shiwu > 5000)               
                {
                        Flag_ERROR = 1;        
                }
                else
                {
                        Flag_ERROR = 0;
                }
        }
        else
        {
                Weight_Shiwu = 0;
        }
        
}

void Get_Maopi()
{
        Weight_Maopi = HX711_Read();        
}

void Delay_ms(unsigned int n)
{
        unsigned int  i,j;
        for(i=0;i<n;i++)
                for(j=0;j<123;j++);
}


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;
P0 = com;
        LCD1602_delay_ms(1);
        LCD1602_EN = 0;
}

//寫數據

void LCD1602_write_data(unsigned char dat)
{
        LCD1602_RS = 1;
        LCD1602_delay_ms(1);        
        P0 = dat;
        LCD1602_EN = 1;
        LCD1602_delay_ms(1);
        LCD1602_EN = 0;
}

//連續寫字符

void LCD1602_write_word(unsigned char *s)
{
        while(*s>0)
        {
                LCD1602_write_data(*s);
                s++;
        }
}

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



void Uart_Init(void)                                                                     
{
        SCON = 0X50;  //UART方式1;8位UART
        REN  = 0;     //不允許串行口接收數據
        PCON = 0x00;  //SMOD=0;波特率不加倍
        TMOD = 0x21;  //T1方式2,用于產生波特率
        TH1  = 0xFD;  //裝初值
        TL1  = 0xFD;
        TR1  = 1;     //啟動定時器1
        EA   = 1;     //打開全局中斷控制
        ES   = 0;     //串行口中斷        
}

void Send_Word(unsigned char *p)                                //發送字符串
{        
         while(*p)
         {
                 SBUF=*(p++);
                while(TI==0)
                {
                        ;
                        ;
                        ;
                };
                TI=0;
        }   
}

void Send_ASCII(unsigned char c)                                //發送一個字符
{
    TI=0;   
    SBUF=c;   
    while(TI==0);   
    TI=0;   
}

void Delay__hx711_us(void)
{
        _nop_();
        _nop_();
}

//讀取HX711
unsigned long HX711_Read()
{
        unsigned long count;
        unsigned char i;
          HX711_DOUT=1;
        Delay__hx711_us();
          HX711_SCK=0;
          count=0;
        EA = 1;
          while(HX711_DOUT);
        EA = 0;
          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;
        Delay__hx711_us();
        HX711_SCK=0;  
        return(count);
}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久精品亚洲欧美日韩精品中文字幕 | 1000部精品久久久久久久久 | 免费日本视频 | 国产精品一区二区三区免费观看 | 国产精品欧美一区二区 | 国产精品久久久 | 亚洲成人网在线播放 | 亚洲国产成人精品女人久久久 | 欧美精品在线一区 | 免费在线性爱视频 | 视频一区 国产精品 | 国产一区二区三区四区三区四 | 日韩在线中文字幕 | 久久精品国产久精国产 | 伊人精品国产 | 成人在线视频免费播放 | 精品一区二区三区四区在线 | 综合二区| 国产无人区一区二区三区 | 欧美激情一区二区三区 | 精品欧美一区二区在线观看视频 | 欧美日韩综合一区 | 国产a视频 | 性色av网站| 一本一道久久a久久精品综合 | 九色在线观看 | 亚洲高清中文字幕 | 日韩亚洲一区二区 | 亚洲性视频 | 视频在线一区二区 | 亚洲欧美视频 | 国产一级免费在线观看 | 成人免费福利视频 | 国产成人在线一区 | 俺去俺来也www色官网cms | 久久久av一区 | 亚洲一区二区三区免费在线观看 | 日本高清视频在线播放 | 国产福利在线看 | 9191成人精品久久 | 成年无码av片在线 |