长沙航空职业技术学院2012届毕业生毕业设计(论文) 附录2 元器件清单
元器件名称 单片机 石英晶振 瓷片电容 电解电容 电阻 排阻 两孔插座 电源开关 整流二极管 瓷片电容 瓷片电容 电解电容 电解电容 电阻 发光二极管 稳压模块 电阻 三极管 二极管 固态继电器 轻触开关 LED数码管 温度传感器 电阻 电阻 电阻 电阻 三极管 蜂鸣器 发光二极管
型号/大小 AT89S52 11.0592M 15pF 10uF 2W/10K 510 220V/10A 220V/10A 1N4007 22nF 100nF 2200uF/50V 47uF/25V 2W/470 红色 LM7805 2W/1K 8050 1N4148 220V/5A 四位共阴极 DS18B20 2W/4K7 2W/510 2W/5K1 2W/2K 8550 绿色 个数 1 1 2 1 4 1 3 1 4 4 3 1 1 1 1 1 1 1 1 1 3 1 1 1 1 1 1 1 1 1 基于单片机的温度控制系统设计——第 36 页 共 45 页
长沙航空职业技术学院2012届毕业生毕业设计(论文) 附录3 参考程序
//*****宏定义*****// #include
#include
#define uint unsigned int #define uchar unsigned char
//******定义端口******//
sbit DQ=P1^0;//定义DS18B20总线IO sbit beep=P1^1;//蜂鸣器 sbit LED=P1^2;//LED
sbit JDQ=P1^3;//SSR继电器
sbit w0=P2^0;//数码管位码端口定义 sbit w1=P2^1; sbit w2=P2^2; sbit w3=P2^3;
sbit SET=P3^0;//温度设置切换 sbit ADD=P3^1;//温度加 sbit DEC=P3^2;//温度减
int temp1=0; uint h,temp;
uchar high=90,low=10;
uchar r,sign,q=0,tt=0,scale;
//************段码显示*************// uchar code ditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,
0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};//小数部分段码表
uchar code table_dm[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d, 0x7d,0x07,0x7f,0x6f,0x00,0x40}; uchar table_dm1[]={0xbf,0x86,0xdb,0xcf,0xe6,
0xed,0xfd,0x87,0xff,0xef};//个位带小数点的段码表
基于单片机的温度控制系统设计——第 37 页 共 45 页
长沙航空职业技术学院2012届毕业生毕业设计(论文) uchar data temp_data[2]={0x00,0x00};//读出温度暂放
uchar data display[5]={0x00,0x00,0x00,0x00,0x00};//显示单元数据,共4个数据和1个运算暂用
//**************11us延时函数*************// void delay(uint t) {
for(;t>0;t--); }
void scan() {
int j;
for(j=0;j<4;j++) {
switch(j) {
case
0:dm=table_dm[display[0]];w0=0;delay(50);w0=1;//小数 case
1:dm=table_dm1[display[1]];w1=0;delay(50);w1=1;//个位 case
2:dm=table_dm[display[2]];w2=0;delay(50);w2=1;//十位 case
3:dm=table_dm[display[3]];w3=0;delay(50);w3=1;//百位 } } }
//************DS18B20复位函数************// ow_reset(void) {
char presence=1; while(presence) {
while(presence) {
DQ=1;_nop_();_nop_();//从高拉到低
基于单片机的温度控制系统设计——第 38 页 共 45 页
长沙航空职业技术学院2012届毕业生毕业设计(论文) DQ=0;
delay(50);//550us DQ=1;
delay(6);//66us
presence=DQ;//presence=0 复位成功,继续下一步 }
delay(45);//500us presence=~DQ; }
DQ=1;//拉高电平 }
//*************DS18B20写命令函数***********// void write_byte(uchar val) {
uchar i;
for(i=8;i>0;i--) {
DQ=1;_nop_();_nop_();//从高拉到低
DQ=0;_nop_();_nop_();_nop_();_nop_();//5us DQ=val&0x01; delay(6); val=val/2; }
DQ=1; delay(1); }
//*************DS18B20读一字节函数*************// uchar read_byte(void) {
uchar i;
uchar value=0; for(i=8;i>0;i--) {
DQ=1;_nop_();_nop_();//从高拉到低 value>>=1;
DQ=0;_nop_();_nop_();_nop_();_nop_();
基于单片机的温度控制系统设计——第 39 页 共 45 页
长沙航空职业技术学院2012届毕业生毕业设计(论文) DQ=1;_nop_();_nop_();_nop_();_nop_(); if(DQ)value|=0x80; delay(6); }
DQ=1;
return(value); }
//*************读出温度函数**************// read_temp() {
ow_reset(); //总线复位 delay(200);
write_byte(0xcc);//发命令 write_byte(0x44);//发转换命令 ow_reset(); delay(1);
write_byte(0xcc);//发命令 write_byte(0xbe);
temp_data[0]=read_byte();//读温度值低位 temp_data[1]=read_byte();//读温度值高位 temp=temp_data[1]; temp<<=8;
temp=temp|temp_data[0];//两字节合成一个整型变量 return temp; }
//*************温度数据处理函数**************// work_temp(uint tem) {
uchar n=0;
if(tem>6348)//温度值正负判断
{tem=65536-tem;n=1;}//负温度求补码,标志位置1 display[4]=tem&0x0f;//取小数部分的值
display[0]=ditab[display[4]];//存入小数部分显示值 display[4]=tem>>4;//取中间八位,即整数部分的值 display[3]=display[4]/100;//取百位数据暂存 display[1]=display[4]0;//取后两位数据暂存
基于单片机的温度控制系统设计——第 40 页 共 45 页
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库基于单片机的热水器温度控制系统设计(8)在线全文阅读。
相关推荐: