找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

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

基于單片機(jī)的智能數(shù)字電子秤proteus仿真設(shè)計(jì)

[復(fù)制鏈接]
ID:190577 發(fā)表于 2023-8-27 17:33 | 顯示全部樓層 |閱讀模式
一、系統(tǒng)方案
1、當(dāng)電子稱(chēng)開(kāi)機(jī)時(shí),單片機(jī)會(huì)進(jìn)入一系列初始化,進(jìn)入1602顯示模式設(shè)定,如開(kāi)關(guān)顯示、光標(biāo)有無(wú)設(shè)置、光標(biāo)閃爍設(shè)置,定時(shí)器初始化,進(jìn)入定時(shí)器模式,如初始值賦值。之后液晶會(huì)顯示W(wǎng)elcome To Use Electronic Scale,這是一個(gè)歡迎使用界面:
2、此電子秤是開(kāi)機(jī)檢測(cè)托盤(pán)重量,并將托盤(pán)重量清零(即電子秤每次開(kāi)機(jī)后檢測(cè)托盤(pán)重量,并程序中自動(dòng)將托盤(pán)重量保存在一個(gè)變量中,稱(chēng)量過(guò)程中每次都將獲得的重量減去托盤(pán)重量,而得到所要稱(chēng)量物體的真正的重量),然后單片機(jī)進(jìn)入等待稱(chēng)重界面:WE代表貨物重量,PR代表貨物單價(jià),MONEY代表貨物總價(jià)。
3、在支架上放上待稱(chēng)重物體時(shí),HX711會(huì)采集稱(chēng)重傳感器的模量量,并將這個(gè)模擬量轉(zhuǎn)化數(shù)字量,發(fā)送給單片機(jī),單片機(jī)通過(guò)計(jì)算,將重量顯示在1602上面,由于仿真里面沒(méi)有真實(shí)的貨物,就用兩個(gè)按鍵模量重量,連接HX711的2個(gè)按鍵就是模擬重量加減,一個(gè)按鍵按下,貨物重量加,另外一個(gè)按鍵,貨物重量就會(huì)減。
4、在支架上放上待稱(chēng)重物體時(shí),通過(guò)矩陣鍵盤(pán)設(shè)置好單價(jià),單片機(jī)會(huì)根據(jù)重量乘以單價(jià)計(jì)算出總價(jià)。如果單價(jià)設(shè)置有錯(cuò),按清除按鍵,重新設(shè)置。如果重量有錯(cuò)誤,可以按去皮按鍵清除,校準(zhǔn)加,校準(zhǔn)減按鍵可以對(duì)貨物重量進(jìn)行微調(diào)。
5、在支架上放上待稱(chēng)重物體總量超過(guò)10KG時(shí),蜂鳴器是不停的報(bào)警,LED閃爍,1602上面顯示W(wǎng)E;-.---,直到重量少于10KG蜂鳴器停止報(bào)警,LED停止閃爍。
1.png


二、硬件設(shè)計(jì)
原理圖如下:
2.png

三、單片機(jī)軟件設(shè)計(jì)
1、首先是系統(tǒng)初始化
Init_LCD1602();                                                                        //初始化LCD1602
   EA = 0;
   Data_Init();
   Timer0_Init();
   //初中始化完成,開(kāi)斷
   EA = 1;
        
//        Get_Maopi();
        LCD1602_write_com(0x80);                                                //指針設(shè)置
   LCD1602_write_word(" Welcome To Use ");        //  
   LCD1602_write_com(0x80+0x40);                                                //指針設(shè)置
   LCD1602_write_word("Wlectronic Scale");
//   Delay_ms(2000);
   Get_Maopi();
   LCD1602_write_com(0x80);                                                //指針設(shè)置
   LCD1602_write_word("WE:0.000 PR:00.0");
   LCD1602_write_com(0x80+0x40);                                //指針設(shè)置
   LCD1602_write_word("MONEY:  0.00    ");
   Display_Price();
//        Get_Maopi();                                //稱(chēng)毛皮重量
2、液晶顯示程序
//****************************************************
//MS延時(shí)函數(shù)(12M晶振下測(cè)試)
//****************************************************
void LCD1602_delay_ms(unsigned int n)
{
        unsigned int  i,j;
        for(i=0;i<n;i++)
                for(j=0;j<123;j++);
}
//****************************************************
//寫(xiě)指令
//****************************************************
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;
}
//****************************************************
//寫(xiě)數(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;
}
3、按鍵程序
  unsigned char Getkeyboard(void)
{
    unsigned char number = 0;
    unsigned char i;
        
        //行輸入低電平
    ROW1=ROW2=ROW3=ROW4=0;
        //如果列輸出不全為高,則說(shuō)明有鍵按下
        if ((COL1!=1)||(COL2!=1)||(COL3!=1)||(COL4!=1))
        {
           //輸入0111
           ROW1=0;
           ROW2=ROW3=ROW4=1;
           for (i=0;i<20;i++);
           if (COL1==0) return 1;           // 7
           else if (COL2==0) return 2;        //         8
           else if (COL3==0) return 3;         //        9
           else if (COL4==0) return 10;         //         10
           //輸入1011
           ROW2=0;
           ROW1=ROW3=ROW4=1;
           for (i=0;i<20;i++);
           if (COL1==0) return 4;          //4
           else if (COL2==0) return 5; //  5
           else if (COL3==0) return 6;        // 6
           else if (COL4==0) return 11;         //        11
           //輸入1101
           ROW3=0;
           ROW1=ROW2=ROW4=1;
           for (i=0;i<20;i++);
           if (COL1==0) return 7;  //1
           else if (COL2==0) return 8;          // 2
           else if (COL3==0) return 9;          //   3
           else if (COL4==0) return 12;          //   12
           //輸入0111
           ROW4=0;
           ROW1=ROW2=ROW3=1;
           for (i=0;i<20;i++);
           if (COL1==0) return 14;
           else if (COL2==0) return 0;
           else if (COL3==0) return 15;
           else if (COL4==0) return 13;
           //沒(méi)有檢測(cè)到列低電平
           return 99;
        }
        return 99;
}
4、核心算法程序
  //****************************************************
//讀取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è)脈沖下降沿來(lái)時(shí),轉(zhuǎn)換數(shù)據(jù)
        Delay__hx711_us();
        HX711_SCK=0;  
        return(count);
}
四、proteus仿真設(shè)計(jì)
Proteus軟件是一款應(yīng)用比較廣泛的工具,它可以在沒(méi)有硬件平臺(tái)的基礎(chǔ)上通過(guò)自身的軟件仿真出硬件平臺(tái)的運(yùn)行情況,這樣就可以通過(guò)軟件仿真來(lái)驗(yàn)證我們?cè)O(shè)計(jì)的方案有沒(méi)有問(wèn)題,如果有問(wèn)題,可以重新選擇器件,連接器件,直到達(dá)到我們?cè)O(shè)定的目的,避免我們搭建實(shí)物的時(shí)候,如果當(dāng)初選擇的方案有問(wèn)題,我們器件都已經(jīng)焊接好了,再去卸載下去,再去焊接新的方案的器件,測(cè)試,這樣會(huì)浪費(fèi)人力和物力,也給開(kāi)發(fā)者帶來(lái)一定困惑,Proteus仿真軟件就很好的解決這個(gè)問(wèn)題,我們?cè)谠O(shè)計(jì)之初,就使用該軟件進(jìn)行模擬仿真,測(cè)試,選擇滿(mǎn)足我們?cè)O(shè)計(jì)的最優(yōu)方案。最后根據(jù)測(cè)試沒(méi)問(wèn)題的仿真圖紙,焊接實(shí)物,調(diào)試,最終完成本設(shè)計(jì)的作品。
2.png

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:1115214 發(fā)表于 2024-4-2 21:28 來(lái)自手機(jī) | 顯示全部樓層
有錯(cuò)誤
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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