仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.png (59.98 KB, 下載次數: 48)
下載附件
2020-5-24 00:45 上傳
`VU82A%ZAVK24CCB@S~Y%HL.png (60.6 KB, 下載次數: 36)
下載附件
2020-5-23 17:57 上傳
單片機源程序如下:
#include "reg52.h" //stc頭文件
#include "Delay.h" //延時頭文件
#include "LCD1602.h" //LCD1602顯示頭文件
#include "DS18B20.h" //DS18B20溫度傳感器頭文件
sbit CLK=P3^3;//定義時鐘信號口
sbit DIN=P3^4;//定義2543數據寫入口
sbit DOUT=P3^5;//定義2543數據讀取口
sbit CS=P3^2;//定義2543片選信號口
unsigned long volt;//測量的電壓值
char num = 0;
void read2543(uchar addr)
{
uint ad=0;
uchar i;
CLK=0;
CS=0;//片選段,啟動2543
addr<<=4;//對地址位預處理
for(i=0;i<12;i++) //12個時鐘走完,完成一次讀取測量
{
if(DOUT==1)
ad=ad|0x01;//單片機讀取ad數據
DIN=addr&0x80;//2543讀取測量地址位
CLK=1;
;;;//很短的延時
CLK=0;//產生下降沿,產生時鐘信號
;;;
addr<<=1;
ad<<=1;//將數據移位準備下一位的讀寫
}
CS=1;//關2543
ad>>=1;
volt=ad;//取走轉換結果
volt=volt*255/4096;//例子的滿量程為5V,轉換分辯率為12位(2的12次方=4096) 。即最大值是255,5/4096=1221mV,即例子中的1V代表實際1221mV
}
/*------------------------------------------------
串口初始化
------------------------------------------------*/
void InitUART(void)
{
SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收
TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重裝
TH1 = 0xFD; // TH1: 重裝值 9600 波特率 晶振 11.0592MHz
TR1 = 1; // TR1: timer 1 打開
EA = 1; //打開總中斷
ES = 1; //打開串口中斷
}
/*------------------------------------------------
串口中斷程序
------------------------------------------------*/
void UART_SER (void) interrupt 4 //串行中斷服務程序
{
if(RI) //判斷是接收中斷產生
{
RI=0; //標志位清零
num=SBUF; //讀入緩沖區的值
}
if(TI) //如果是發送標志位,清零
TI=0;
}
/*=========================================
//主函數
=========================================*/
void main( void )
{
LCD1602_Init(); //1602液晶初始化
InitUART();
while(1) //while循環
{
ReadTemperature(); //讀取DS18B20溫度,進行顯示
read2543(0);//調用2543驅動程序測量地址為
LCD1602_WriteCom( 0x80 );
LCD1602_WriteData( 'L' );
LCD1602_WriteData( ':' );
LCD1602_WriteData( volt/100+0x30 );
LCD1602_WriteData( volt%100/10+0x30 );
LCD1602_WriteData( '.' );
LCD1602_WriteData( volt%10+0x30 );
LCD1602_WriteData( 'm' );
LCD1602_WriteData( ' ' );
LCD1602_WriteData( ' ' );
read2543(1);//調用2543驅動程序測量地址為
LCD1602_WriteData( 'S' );
LCD1602_WriteData( ':' );
LCD1602_WriteData( volt/100+0x30 );
LCD1602_WriteData( volt%100/10+0x30 );
LCD1602_WriteData( '.' );
LCD1602_WriteData( volt%10+0x30 );
LCD1602_WriteData( 'Q' );
times++;
if( times >= 100 )
{
ReadTemperature(); //讀取DS18B20溫度,進行顯示
SBUF = ( 0x30 + table_t[0] );
Delay_ms(10);
SBUF = ( 0x30 + table_t[1] );
Delay_ms(10);
SBUF = ( '.' );
Delay_ms(10);
SBUF = ( 0x30 + table_t[2] );
Delay_ms(10);
SBUF = ( 'C' );
Delay_ms(10);
SBUF = ( ' ' );
Delay_ms(10);
SBUF = ( ' ' );
Delay_ms(10);
read2543(0);//調用2543驅動程序測量地址為
SBUF = ( volt/100+0x30 );
Delay_ms(10);
SBUF = ( volt%100/10+0x30 );
Delay_ms(10);
SBUF = ( '.' );
Delay_ms(10);
SBUF = ( volt%10+0x30 );
Delay_ms(10);
SBUF = ( 'm' );
Delay_ms(10);
SBUF = ( ' ' );
Delay_ms(10);
SBUF = ( ' ' );
Delay_ms(10);
read2543(1);//調用2543驅動程序測量地址為
SBUF = ( volt/100+0x30 );
Delay_ms(10);
SBUF = ( volt%100/10+0x30 );
Delay_ms(10);
SBUF = ( '.' );
Delay_ms(10);
SBUF = ( volt%10+0x30 );
Delay_ms(10);
SBUF = ( 'Q' );
Delay_ms(10);
SBUF = ( ' ' );
Delay_ms(10);
SBUF = ( ' ' );
Delay_ms(10);
times = 0;
}
}
}
/*=======================================================================
//No more
=======================================================================*/
51hei.png (9.58 KB, 下載次數: 56)
下載附件
2020-5-24 00:45 上傳
全部資料51hei下載地址:
精餾裝置.rar
(4.33 MB, 下載次數: 20)
2020-5-23 17:56 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|