锅炉自动给水系统烧录程序课程设计祥解文档格式.docx

上传人:b****2 文档编号:4583512 上传时间:2023-05-03 格式:DOCX 页数:25 大小:18.33KB
下载 相关 举报
锅炉自动给水系统烧录程序课程设计祥解文档格式.docx_第1页
第1页 / 共25页
锅炉自动给水系统烧录程序课程设计祥解文档格式.docx_第2页
第2页 / 共25页
锅炉自动给水系统烧录程序课程设计祥解文档格式.docx_第3页
第3页 / 共25页
锅炉自动给水系统烧录程序课程设计祥解文档格式.docx_第4页
第4页 / 共25页
锅炉自动给水系统烧录程序课程设计祥解文档格式.docx_第5页
第5页 / 共25页
锅炉自动给水系统烧录程序课程设计祥解文档格式.docx_第6页
第6页 / 共25页
锅炉自动给水系统烧录程序课程设计祥解文档格式.docx_第7页
第7页 / 共25页
锅炉自动给水系统烧录程序课程设计祥解文档格式.docx_第8页
第8页 / 共25页
锅炉自动给水系统烧录程序课程设计祥解文档格式.docx_第9页
第9页 / 共25页
锅炉自动给水系统烧录程序课程设计祥解文档格式.docx_第10页
第10页 / 共25页
锅炉自动给水系统烧录程序课程设计祥解文档格式.docx_第11页
第11页 / 共25页
锅炉自动给水系统烧录程序课程设计祥解文档格式.docx_第12页
第12页 / 共25页
锅炉自动给水系统烧录程序课程设计祥解文档格式.docx_第13页
第13页 / 共25页
锅炉自动给水系统烧录程序课程设计祥解文档格式.docx_第14页
第14页 / 共25页
锅炉自动给水系统烧录程序课程设计祥解文档格式.docx_第15页
第15页 / 共25页
锅炉自动给水系统烧录程序课程设计祥解文档格式.docx_第16页
第16页 / 共25页
锅炉自动给水系统烧录程序课程设计祥解文档格式.docx_第17页
第17页 / 共25页
锅炉自动给水系统烧录程序课程设计祥解文档格式.docx_第18页
第18页 / 共25页
锅炉自动给水系统烧录程序课程设计祥解文档格式.docx_第19页
第19页 / 共25页
锅炉自动给水系统烧录程序课程设计祥解文档格式.docx_第20页
第20页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

锅炉自动给水系统烧录程序课程设计祥解文档格式.docx

《锅炉自动给水系统烧录程序课程设计祥解文档格式.docx》由会员分享,可在线阅读,更多相关《锅炉自动给水系统烧录程序课程设计祥解文档格式.docx(25页珍藏版)》请在冰点文库上搜索。

锅炉自动给水系统烧录程序课程设计祥解文档格式.docx

uinttemp;

ucharge1;

ucharshi1;

ucharbai1;

ucharqian1;

uinttemp1;

/*******************四位数码管位选*******************

sbitwei1=P2^3;

sbitwei2=P2^2;

sbitwei3=P2^1;

sbitwei4=P2^0;

/*******************LEDDEFINE*****************/

sbitled1=P1^3;

sbitled2=P1^2;

sbitled3=P1^1;

sbitled4=P1^0;

/*******************18B20数据口和按键定义******/

sbitDS1=P0^5;

sbitkey1=P3^2;

//温度设定按键1

sbitkey2=P3^3;

//温度设定按键2

sbitkey3=P3^4;

//加水按键

sbitkey4=P3^5;

//放水按键

/*******************LCD接口定义****************/

sbitrs=P2^0;

sbitwr=P2^1;

sbitlcden=P2^2;

/*******************限位开关定义***************/

sbitupkey=P3^6;

//上限位开关

sbitdownkey=P3^7;

//下限位开关

/*******************继电器定义*****************/

sbitKIN=P2^5;

sbitKOUT=P2^6;

sbitKHOT=P2^7;

/*******************延时1ms函数******************/

voiddelayxms(intz)

{inti,j;

for(i=z;

i>

0;

i--)

for(j=110;

j>

j--);

}

/*********************************函数声明*****************************************************/

/*********************************************18B20相关函数****************************************/

voiddsreset(void)//复位

{

uinti;

DS1=0;

i=103;

while(i>

0)i--;

DS1=1;

i=4;

voidchuli(uintm)//将数值转换成四位有效数字,取出个十百千

qian=m/1000;

bai=m/100%10;

shi=m%100/10;

ge=m%10;

 

voidchuli1(uintm)//将数值转换成四位有效数字,取出个十百千

qian1=m/1000;

bai1=m/100%10;

shi1=m%100/10;

ge1=m%10;

bittempreadbit(void)//读取一位数据

bitdat;

i++;

dat=DS1;

i=8;

while(i>

return(dat);

uchartempreadbyte(void)//读取一个字节

uchari,j,dat;

dat=0;

for(i=1;

i<

=8;

i++)

{

j=tempreadbit();

dat=(j<

<

7)|(dat>

>

1);

//读出的数据最低位在最前面,这样刚好一个字节在DAT里

}

return(dat);

voidtempwritebyte(uchardat)//写一个字节数据给DS18B20

ucharj;

bittestb;

for(j=1;

j<

j++)

testb=dat&

0x01;

dat=dat>

1;

if(testb)//写0

i++;

else

{//写1

voidtempchange(void)//DS18B20开始转换函数

dsreset();

delayxms

(1);

tempwritebyte(0xcc);

tempwritebyte(0x44);

uintgettemp()//获得温度数值

floattt;

uchara,b;

tempwritebyte(0xbe);

a=tempreadbyte();

b=tempreadbyte();

temp=b;

temp<

temp=temp|a;

tt=temp*0.0625;

temp=tt*10+0.5;

returntemp;

/***************************************************1602相关函数*****************************************

voidwrite_com(ucharcom)//写指令函数

P1=com;

rs=0;

lcden=0;

delayxms

(2);

lcden=1;

voidwrite_date(uchardate)//写数据函数

P1=date;

rs=1;

voidinit()//初始化函数

wr=0;

write_com(0x38);

write_com(0x0f);

write_com(0x06);

write_com(0x01);

voidlcd02()//LCD1602函数

chara;

init();

write_com(0x80+17);

for(a=0;

a<

9;

a++)

write_date(table1[a]);

16;

write_com(0x18);

}

}

/****************************12864函数***************************************/

bitlcd_busy()

{

bitresult;

rs=0;

wr=1;

delayNOP();

result=(bit)(P1&

0x80);

return(result);

voidlcd_wcmd(ucharcmd)

{

while(lcd_busy());

wr=0;

lcden=0;

_nop_();

P1=cmd;

lcden=1;

voidlcd_wdat(uchardat)

rs=1;

P1=dat;

voidlcd_init()

//LCD_PSB=1;

//并口方式

lcd_wcmd(0x34);

//扩充指令操作

lcd_wcmd(0x30);

//基本指令操作

lcd_wcmd(0x0C);

//显示开,关光标

lcd_wcmd(0x01);

//清除LCD的显示内容

voidlcd_pos(ucharX,ucharY)

ucharpos;

if(X==0)

{X=0x80;

elseif(X==1)

{X=0x90;

elseif(X==2)

{X=0x88;

elseif(X==3)

{X=0x98;

pos=X+Y;

lcd_wcmd(pos);

//显示地址

voidlcd64()

uchari;

//delayxms(5);

//延时

//lcd_init();

//初始化LCD

/*lcd_pos(0,2);

//设置显示位置为第一行的第3个字符开始

i=0;

while(dis1[i]!

='

\0'

{//显示字符

lcd_wdat(dis1[i]);

//dis1(测控一班)

lcd_pos(1,0);

while(dis2[i]!

)//“当前值”

lcd_wdat(dis2[i]);

lcd_pos(1,7);

while(dis3[i]!

)//"

lcd_wdat(dis3[i]);

}*/

dis4[4]=ge+'

0'

//实际温度给数组dis4[]

dis4[3]='

.'

dis4[2]=shi+'

dis4[1]=bai+'

dis4[0]=qian+'

lcd_pos(1,3);

i=0;

while(dis4[i]!

)//显示实际温度

lcd_wdat(dis4[i]);

chuli1(sheding*10);

//设定温度给数组dis8[]

dis8[4]=ge1+'

dis8[3]='

dis8[2]=shi1+'

dis8[1]=bai1+'

dis8[0]=qian1+'

/*lcd_pos(2,0);

while(dis5[i]!

)//“设定值”

lcd_wdat(dis5[i]);

lcd_pos(2,7);

}*/

/*dis4[4]=ge+'

*/

lcd_pos(2,3);

while(dis8[i]!

)//温度设定值

lcd_wdat(dis8[i]);

/*lcd_pos(3,0);

while(dis6[i]!

)//显示指导教师

lcd_wdat(dis6[i]);

}*/

voiddisplayjing()

delayxms(5);

lcd_init();

lcd_pos(0,2);

}

lcd_pos(3,0);

lcd_pos(2,0);

}

/**********************************************************数码管显示函数*****************************************************************

voiddisplay()//数码管显示函数

{

wei1=0;

//开位选,送段选数据,延时,关位选。

P1=table[ge];

wei1=1;

wei2=0;

P1=tablepoint[shi];

wei2=1;

wei3=0;

P1=table[bai];

wei3=1;

wei4=0;

P1=table[qian];

wei4=1;

/*********************************************************温度显示函数(获取温度值并由数码管显示)*********************************************/

voidwendu()//温度子程序

tempchange();

chuli(gettemp());

//display();

/***********************************************************LED流水子程序********************************************************

voidled()//LED子程序

intk;

intdata1=0x01;

for(k=0;

k<

4;

k++)

P1=~data1;

delayxms(500);

data1=data1<

/***********************************************************按键子程序************************************************************/

voidkeyscan()//按键子程序

if(key1==0)//KEY1按下,则十位加一

delayxms

(2);

if(key1==0)

{

shedingshi=sheding/10+1;

}

if(key2==0)//KEY2按下,则个位加一

if(key2==0)

shedingge=sheding%10+1;

sheding=shedingshi*10+shedingge;

if(key3==0)//K3加水(此时应该要进入手动状态)

if(key3==0)

while(key3==0&

&

upkey==0)

{KIN=1;

KOUT=0;

wendu();

//读取温度数值

if(temp<

sheding*10)//如果实际值小于设定值,则加热

KHOT=1;

//KHOT=0;

elseKHOT=0;

lcd64();

if(key1==0)//KEY1按下,则十位加一

if(key2==0)//KEY2按下,则个位加一

}}

if(key4==0)

if(key4==0)//K4放水

{while(key4==0&

downkey==0)

{KIN=0;

KOUT=1;

if(temp<

lcd64();

}

/**************************************************************限位检测************************************************************/

voidxianwei()

if(downkey==!

0)//检查是否空锅炉,若是则加水,一直到超过水位下限

//KIN=0;

KIN=1;

KOUT=0;

while(downkey==1);

elseif(upkey==0)//检查水是否满状态,如不满,则加水

elseKIN=0;

wendu();

/**************************************************************主函数**************************************************************/

voidmain()

displayjing();

KIN=0;

KOUT=0;

KHOT=0;

delayxms(2000);

while

(1)

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2