找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2322|回复: 0
收起左侧

单片机精馏装置程序与Proteus仿真 有视频

[复制链接]
ID:511094 发表于 2020-5-23 17:57 | 显示全部楼层 |阅读模式
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
51hei.png `VU82A%ZAVK24CCB@S~Y%HL.png

单片机源程序如下:
#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
全部资料51hei下载地址:
精馏装置.rar (4.33 MB, 下载次数: 20)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表