0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

proteus:電子秤

Harmony&嵌入式學(xué)習(xí) ? 來源:Harmony&嵌入式學(xué)習(xí) ? 作者:Harmony&嵌入式學(xué) ? 2023-06-14 11:53 ? 次閱讀
pYYBAGSJOZOAJPWTAAC-gP4w8-I143.png

一、設(shè)計說明
電子秤是利用應(yīng)變電阻,將壓力信號轉(zhuǎn)變成模擬電壓信號,再利用A/D轉(zhuǎn)換,將電信號轉(zhuǎn)換成壓力信號進(jìn)行壓力測量,測量最大值,10Kg,將測量到的數(shù)據(jù)通過MODBUS通信協(xié)議傳送到上位機(jī)。
二、設(shè)計要求
1.能測量10Kg重物的壓力,并用數(shù)碼管顯示輸入及譯碼結(jié)果。
在選擇器件時,應(yīng)考慮成本。
2.采用MODBUS串口調(diào)試助手顯示壓力測量值。
3.可選元件:(1)自帶A/D功能的單片機(jī);(2)LCD1602等。
三、實驗要求
1.根據(jù)技術(shù)指標(biāo)制定實驗方案;驗證所設(shè)計的電路。
2.進(jìn)行實驗數(shù)據(jù)處理和分析。

#include 	
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
ulong volt;//測量的電壓值
#define LCD1602_DATAPINS P0
#define TIME 5
sbit LCD1602_E=P2^2;
sbit LCD1602_RW=P2^1;
sbit LCD1602_RS=P2^0;
sbit CLK=P3^7;//定義時鐘信號口
sbit DIN=P3^5;//定義2543數(shù)據(jù)寫入口
sbit DOUT=P3^4;//定義2543數(shù)據(jù)讀取口
sbit CS=P3^6;//定義2543片選信號口
uchar datt;
uint ALL_num;
uint Result;
uint Dis_num;


void read2543(uchar addr)
{
	uint ad=0;
	uchar i;
	CLK=0;
	CS=0;//片選段,啟動2543
	addr>=1;
	volt=ad;//取走轉(zhuǎn)換結(jié)果
	volt=volt*2444;//例子的滿量程為5V,轉(zhuǎn)換分辯率為12位(2的12次方=4096) 。即最大值是255,5/4096=1221mV,即例子中的1V代表實際1221mV        
}


/*******************************************************************************
* 函 數(shù) 名         : Lcd1602_Delay1ms
* 函數(shù)功能		   : 延時函數(shù),延時1ms
* 輸    入         : c
* 輸    出         : 無
* 說    名         : 該函數(shù)是在12MHZ晶振下,12分頻單片機(jī)的延時。
*******************************************************************************/
void Lcd1602_Delay1ms(uint c)   //誤差 0us
{
    uchar a,b;
	for (; c>0; c--)
	{
		 for (b=199;b>0;b--)
		 {
		  	for(a=1;a>0;a--);
		 }      
	}
    	
}

/*******************************************************************************
* 函 數(shù) 名         : LcdWriteCom
* 函數(shù)功能		   : 向LCD寫入一個字節(jié)的命令
* 輸    入         : com
* 輸    出         : 無
*******************************************************************************/
void LcdWriteCom(uchar com)	  //寫入命令
{
	LCD1602_E = 0;     //使能
	LCD1602_RS = 0;	   //選擇發(fā)送命令
	LCD1602_RW = 0;	   //選擇寫入
	
	LCD1602_DATAPINS = com;     //放入命令
	Lcd1602_Delay1ms(1);		//等待數(shù)據(jù)穩(wěn)定

	LCD1602_E = 1;	          //寫入時序
	Lcd1602_Delay1ms(5);	  //保持時間
	LCD1602_E = 0;
}
/*******************************************************************************
* 函 數(shù) 名         : LcdWriteData
* 函數(shù)功能		   : 向LCD寫入一個字節(jié)的數(shù)據(jù)
* 輸    入         : dat
* 輸    出         : 無
*******************************************************************************/		   	   
void LcdWriteData(uchar dat)			//寫入數(shù)據(jù)
{
	LCD1602_E = 0;	//使能清零
	LCD1602_RS = 1;	//選擇輸入數(shù)據(jù)
	LCD1602_RW = 0;	//選擇寫入

	LCD1602_DATAPINS = dat; //寫入數(shù)據(jù)
	Lcd1602_Delay1ms(1);

	LCD1602_E = 1;   //寫入時序
	Lcd1602_Delay1ms(5);   //保持時間
	LCD1602_E = 0;
}


/*******************************************************************************
* 函 數(shù) 名       : LcdInit()
* 函數(shù)功能		 : 初始化LCD屏
* 輸    入       : 無
* 輸    出       : 無
*******************************************************************************/		   
void LcdInit()						  //LCD初始化子程序
{
 	LcdWriteCom(0x38);  //開顯示
	LcdWriteCom(0x0c);  //開顯示不顯示光標(biāo)
	LcdWriteCom(0x06);  //寫一個指針加1
	LcdWriteCom(0x01);  //清屏
	LcdWriteCom(0x80);  //設(shè)置數(shù)據(jù)指針起點
}




//按指定位置顯示一個字符
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
{
 Y &= 0x1;
 X &= 0xF; //限制X不能大于15,Y不能大于1
 if (Y) X |= 0x40; //當(dāng)要顯示第二行時地址碼+0x40;
 X |= 0x80; // 算出指令碼
 LcdWriteCom(X); //這里不檢測忙信號,發(fā)送地址碼
 LcdWriteData(DData);
}
//按指定位置顯示一串字符
void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)
{
 unsigned char ListLength;

  ListLength = 0;
 Y &= 0x1;
 X &= 0xF; //限制X不能大于15,Y不能大于1
 while (DData[ListLength]>=0x20) //若到達(dá)字串尾則退出
  {
   if (X <= 0xF) //X坐標(biāo)應(yīng)小于0xF
    {
     DisplayOneChar(X, Y, DData[ListLength]); //顯示單個字符
     ListLength++;
     X++;
    }
  }
}
void UsartInit()
{
	 TMOD=0x20;		   //設(shè)T1為方式2(8位自動重裝載) T0為方式1(16位)
	 TH1=0xf3;         //定時器1定時12us
	 TL1=0xf3;
	 TR1=1;            //開定時器1
	 SCON=0x50;        //SCON 是一個特殊功能寄存器,用以設(shè)定串行口的工作方式、接收/發(fā)送控制以及設(shè)置狀態(tài)標(biāo)志
	 PCON=0x80;        //串口波特率加倍
	 ES=1;             //串口中斷允許位
	 EA=1;			   //開啟總中斷	
}

void Uart1Send(uchar c)
{
	SBUF=c;
	while(!TI);
	TI=0;	
}
void Uart1Sends(uchar *str)
{
	while(*str!='?')
	{
		SBUF=*str;
		while(!TI);
		TI=0;
		str++;
	}
}



void main(void)
{
	UsartInit();
	LcdInit();
	EX0=1;       //外部中斷0開()  EX1 為外部中斷1 (P3^3)
	IT0=1;        //低電平觸發(fā)   IT1為中斷1
	DisplayListChar(1,0,"Measure System");
	DisplayOneChar(2,1,'.');
	DisplayOneChar(5,1,'K');
	DisplayOneChar(6,1,'g');
	while(1)
	{
	read2543();
	DisplayOneChar(0,1,(char)(volt/10000000)+'0');
	DisplayOneChar(1,1,(char)(volt/1000000%10)+'0');
	DisplayOneChar(3,1,(char)(volt/100000%10)+'0');
	DisplayOneChar(4,1,(char)(volt/10000%10)+'0');
	Lcd1602_Delay1ms(200);
	}				
}


void Key_INT( )  interrupt 0  // 這里0對應(yīng)下表
{
	uchar buff[8],datt1;
	Uart1Sends("NOW WIGHT:"); 
	buff[0] = (char)(volt/10000000)+'0';
	buff[1] = (char)(volt/1000000%10)+'0';
	buff[2] = '.';
	buff[3] = (char)(volt/100000%10)+'0';
	buff[4] = (char)(volt/10000%10)+'0';
	buff[5] = 'K';
	buff[6] = 'g';
	for(datt1=0;datt1
審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Proteus
    +關(guān)注

    關(guān)注

    79

    文章

    1692

    瀏覽量

    106575
  • 串口
    +關(guān)注

    關(guān)注

    14

    文章

    1554

    瀏覽量

    76510
  • 電子秤
    +關(guān)注

    關(guān)注

    23

    文章

    214

    瀏覽量

    44321
收藏 人收藏

    評論

    相關(guān)推薦

    電子秤proteus仿真+程序資料

    本帖最后由 eehome 于 2013-1-5 09:51 編輯 電子秤proteus仿真+程序資料
    發(fā)表于 08-20 11:16

    電子秤proteus仿真+程序資料

    0150、電子秤proteus仿真+程序資料
    發(fā)表于 09-09 18:22

    求個電子秤proteus仿真

    求個電子秤proteus仿真
    發(fā)表于 05-05 15:48

    電子秤

    電子秤 電子秤
    發(fā)表于 09-23 15:12 ?2552次閱讀
    <b class='flag-5'>電子秤</b>

    電子秤proteus仿真+程序資料

    應(yīng)變式電子秤系統(tǒng)設(shè)計,proteus仿真和仿真的程序資料
    發(fā)表于 11-10 10:03 ?55次下載

    1602電子秤proteus仿真+源程序

    1602電子秤proteus仿真+源程序
    發(fā)表于 12-21 17:53 ?36次下載

    電子秤proteus仿真程序資料

    電子秤proteus仿真程序資料,很好的設(shè)計資料,快來下載學(xué)習(xí)吧。
    發(fā)表于 05-10 10:35 ?73次下載

    基于proteus仿真的電子秤

    這是基于proteus仿真電子秤哦!作者本人最近做了個電子秤的有關(guān)項目,所以呢,和大家分享一下。仿真文件就在壓縮包里面哦,自己去下載,也不要吝嗇那一點積分吶。
    發(fā)表于 01-24 16:00 ?106次下載

    單片機(jī)設(shè)計的電子秤proteus仿真和程序資料

    本文檔的主要內(nèi)容詳細(xì)介紹的是單片機(jī)設(shè)計的電子秤proteus仿真和程序資料。
    發(fā)表于 10-22 08:00 ?104次下載
    單片機(jī)設(shè)計的<b class='flag-5'>電子秤</b><b class='flag-5'>proteus</b>仿真和程序資料

    電子秤Proteus仿真程序資料合集免費下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是電子秤Proteus仿真程序資料合集免費下載。
    發(fā)表于 02-14 08:00 ?82次下載
    <b class='flag-5'>電子秤</b><b class='flag-5'>Proteus</b>仿真程序資料合集免費下載

    數(shù)字電子秤proteus仿真和程序資料免費下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是數(shù)字電子秤proteus仿真和程序資料免費下載。
    發(fā)表于 07-01 08:00 ?58次下載
    數(shù)字<b class='flag-5'>電子秤</b>的<b class='flag-5'>proteus</b>仿真和程序資料免費下載

    如何選購電子秤

    吊鉤人們在去超市購買蔬菜水果的時候都會看到工作人員使用電子秤來給商品稱重,所以在一般人的印象中,電子秤就是臺秤,而不同類型的電子秤之間的最大差別就是設(shè)備的大小不同。其實現(xiàn)在
    發(fā)表于 03-27 11:18 ?2627次閱讀

    電子秤proteus仿真+程序資料分享

    電子秤proteus仿真+程序資料分享下載。
    發(fā)表于 05-07 09:19 ?22次下載

    Proteus中arduino的電子秤仿真設(shè)計資料

    Proteus中arduino的電子秤仿真設(shè)計資料
    發(fā)表于 11-30 10:46 ?27次下載

    基于單片機(jī)電子秤proteus仿真設(shè)計包含仿真及源程序

    基于單片機(jī)電子秤proteus仿真設(shè)計包含仿真及源程序
    發(fā)表于 04-20 15:08 ?8次下載