标题:
单片机铂电阻温度控制器仿真设计与源程序
[打印本页]
作者:
yinyin12
时间:
2018-1-2 22:19
标题:
单片机铂电阻温度控制器仿真设计与源程序
基于单片机的铂电阻温度控制器,内含仿真电路及源程序
0.png
(16.13 KB, 下载次数: 73)
下载附件
2018-1-3 00:54 上传
0.png
(9.98 KB, 下载次数: 67)
下载附件
2018-1-3 00:54 上传
单片机源程序如下:
#include<REG52.H> //插入52特殊功能寄存器头文件
//-----------------------------------------------------------
unsigned char code dispbitcode[]=//定义显示位控制驱动码
{0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f};
//"0位","1位","2位","3位","4位","5位","6位","7位"
//---------------------------------------------------------------------
unsigned char code ledcode[]=//定义“0--9”十个数据的共阴极LED七段显示码
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};
//"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", 黑屏
//-------------------------------------------------------------------------
unsigned char dispbuf[8]={10,10,10,10,10,10,0,0};//定义显示缓冲区初值
//-------------------------------------------------------------------------
unsigned char dispcount;//显示控制位变量
unsigned int uiresult;//采集数据变量
bit sflag;//符号标志位,为1时表示负值
sbit START=P3^0;//定义ADC0809启动控制位
sbit OE=P3^1;//定义ADC0809输出控制位
sbit EOC=P3^2;//定义ADC0809转换结束标志位
sbit P17=P1^7;//小数点控制位
//=========================================
int delay1ms()//延时1ms函数
{unsigned int j;
for(j=0;j<333;j++)
{;}
return 1;
}
//===================================================
void display()//显示处理函数
{for(dispcount=0;dispcount<5;dispcount++)//显示0-4位
{P2=0xff;//消影,关闭显示
if(dispbuf[1]==0)//显缓区1位是否为"0"
{ dispbuf[1]=dispbuf[0];//是,显缓区0位值赋给1位
dispbuf[0]=10;}//取黑屏码
P1=ledcode[dispbuf[dispcount]];//取对应位显示码
if(dispcount==3)//判断是否是小数点位
{P17=1;}//是,输出小数点
P2=dispbitcode[dispcount];//取对应位显示控制码
delay1ms();//延时1ms
P2=0xff;//消影,关闭显示
}
}
//====================================================
void adc0809()//ADC0809数据采集处理函数
{unsigned char i;
unsigned long y;
START=0;//启动ADC0809,产生高电平脉冲启动信号
START=1;
START=0;
P0=0xff;//P0口设为输入状态
EOC=1;//设EOC位为输入状态
while(EOC==0);//没有转换完等待
OE=1;//转换完,选通ADC0809转换数据输出
uiresult=P0;//读ADC0809转换结果
OE=0;//关闭选通位
y=uiresult;
if(uiresult<118||uiresult>124)//数据是否小于118或大于124
if(uiresult<129)//数据是否小于129
{uiresult=y*19.25;//数据标度变换
if(uiresult<2557.14)//数据是否小于2557.14
{uiresult=2557.14-uiresult;sflag=1;}//是的,计算绝对温度值,设置负号标志
else
{uiresult=uiresult-2557.14;sflag=0;}//否,计算绝对温度值,设置正号标志
}
else
{uiresult=y*20;//数据标度变换
if(uiresult<2680)//数据是否小于2680
{uiresult=2680-uiresult;sflag=1;}//是的,计算绝对温度值,设置负号标志
else
{uiresult=uiresult-2680;sflag=0;}//否,计算绝对温度值,设置正号标志
}
else
{uiresult=y*16.667;//数据标度变换
if(uiresult<2267.708)//数据是否小于2267.708
{uiresult=2267.708-uiresult;sflag=1;}//是的,计算绝对温度值,设置负号标志
else
{uiresult=uiresult-2267.708;sflag=0;}//否,计算绝对温度值,设置正号标志
}
i=4;
dispbuf[1]=0;//取0
dispbuf[2]=0;//取0
dispbuf[3]=0;//取0
dispbuf[4]=0;//取0
if(sflag==1)//是负温度标志吗?
{dispbuf[0]=11;}//是,取"-"显示码
else
{dispbuf[0]=10;}//否,取"黑屏"码
dispbuf[5]=10;//取"黑屏"码
dispbuf[6]=10;//取"黑屏"码
dispbuf[7]=10;//取"黑屏"码
while(uiresult/10)//(uiresult/10)大于0吗
{dispbuf[i]=uiresult%10;//取低位数据送入对应的缓冲器
uiresult=uiresult/10;//数据除10,准备取次低位数
i--;//缓冲数据指针减1
}
dispbuf[i]=uiresult;//数据的最高有效位送入对应的缓冲器
}
//========================================================
void main(void)
{START=0;//关闭ADC0809启动
OE=0;//关闭ADC0809数据输出
uiresult=100;//设温度参数初值
while(1)
{display();//显示处理函数
adc0809();//ADC0809数据采集处理函数
}
}
复制代码
所有资料51hei提供下载:
单片机课设.zip
(25.3 KB, 下载次数: 64)
2018-1-2 22:18 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1