基于单片机msp430和温度传感器ds18b20的水温度控制系统的c语言源程序(不是测量,要有加热跟制冷)

基于单片机msp430和温度传感器ds18b20的水温度控制系统的c语言源程序(不是测量,要有加热跟制冷),第1张

我这是用STC做的,应该很容易移植到MPS430上的给你参考一下。

#include<reg52.h>

#include<intrins.h>

#define uchar unsigned char

#define uint unsigned int

sbit scl=P1^3

sbit sda=P1^4

sbit key1=P1^6

sbit key2=P1^7

sbit key3=P2^0

sbit key4=P2^1

sbit lcrs=P3^7//数据/命令

sbit lcwr=P3^5//读/写

sbit lcden=P3^4//使能

sbit DS=P2^2

/*sbit lcrs=P3^4//数据/命令

sbit lcwr=P3^7//读/写

sbit lcden=P3^5//使能

*/

sbit jrk=P2^2

sbit cyk=P2^3

sbit xhk=P2^4

bit flag=0,rsg=0,not=0,he=0,in=0

int acon=0,bcon=0,dcon=0,econ=0,

temp=0,y=0,j=0,l=0,cfj=0,ec=0,dc=0,at

uchar code table[]={48,49,50,51,52,53,54,55,56,57}

uchar code ta1[]={"Temperature UP"}

uchar code ta2[]={"Temperature DN"}

uchar code ta3[]={"Inflator Cycle"}

uchar code ta4[]={"Inflator Time "}

uchar code ta5[]={" Heating UP "}

uchar code ta6[]={"Inflator"}

uchar code table7[]={"Temperature"}

uchar table1[]={0,0,0,'.',0}

uchar table3[]={"AptitudeAquarium"}

uchar table4[]={0,0,0,0,0}

uchar n,c=0

void delay(uchar)

void wen_kong()

void xh()

void rso()

void weno()

void Init_Com(void)

{

TMOD = 0x11

PCON = 0x00

TH1=0x61

TL1=0x99

EA=1

ET1=1

TR1=1

}

void delay(uchar count) //delay

{

uint i

while(count)

{

i=200

while(i>0)

i--

count--

}

}

////初始化18B20/////////

bit init18b20(void)

{

uint i

bit no

DS=0

i=103

while(i>0)i--

DS=1

i=4

while(i>0)i--

no=DS

if(no==0)

{

DS=1

i=100

while(i>0)i--

no=DS

if(no==1)

not=0

else

not=1

}

else

not=1

return (not)

}

bit tmpreadbit(void) //读一位

{

uint i

bit dat

DS=0

i++

DS=1

i++i++

dat=DS

i=8while(i>0)i--

return (dat)

}

uchar tmpread(void) //读一个字节

{

uchar i,j,dat

dat=0

for(i=1i<=8i++)

{

j=tmpreadbit()

dat=(j<<7)|(dat>>1)//读出的数据最低位在最前面,这样刚好一个字节在DAT里

}

return(dat)

}

void tmpwritebyte(uchar dat) //写一个字节到 ds18b20

{

uint i

uchar j

bit testb

for(j=1j<=8j++)

{

testb=dat&0x01

dat=dat>>1

if(testb) //write 1

{

DS=0

i++i++

DS=1

i=8while(i>0)i--

}

else

{

DS=0 //write 0

i=8

while(i>0)i--

DS=1

i++i++

}

}

}

int tmp() //DS18B20温度读取

{

float tt

int a,b

if(init18b20()==0)

{

WDT_CONTR=0x36 /////喂狗

EA=0

delay(1)

tmpwritebyte(0xcc) // 跳过读ROM *** 作

tmpwritebyte(0x44) // 启动温度转换

delay(10)

init18b20()

delay(1)

tmpwritebyte(0xcc)

tmpwritebyte(0xbe)

a=tmpread()

b=tmpread()

temp=b

temp<<=8 //将高字节温度数据与低字节温度数据整合

temp=temp|a

c=b>>4

tt=temp*0.0625

temp=tt*10+0.5//放大10倍输出并四舍五入

EA=1

return temp

}

else

not=1

}

//////1062/////////

void ydelay(uint x)

{

uint a,b

for(a=xa>0a--)

for(b=10b>0b--)

}

void write_com(uchar com)

{

P0=com

lcwr=0

lcrs=0

lcden=0

ydelay(10)

lcden=1

ydelay(10)

lcden=0

lcwr=1

}

void write_date(uchar date)//写数据

{

P0=date

lcwr=0

lcrs=1

lcden=0

ydelay(10)

lcden=1

ydelay(10)

lcden=0

lcwr=1

}

void init1602()//初始化

{

write_com(0x38)//设置显示模式

ydelay(20)

write_com(0x0c)//开显示

ydelay(20)

write_com(0x06)//指针和光标自动加一

ydelay(20)

write_com(0x01)//清屏指令

ydelay(20)

}

///////显示程序//////

void display(int num)

{

uint i,A1,A2

WDT_CONTR=0x35 /////喂狗

if(c!=0)

num=~num+1

A1=num/1000

A2=num%1000/100

if(not==0)

{

if(c!=0)

{

c=0

table1[0]='-'

}

else if(A1==0)

table1[0]=' '

else

table1[0]=table[A1]

if(A1==0)

if(A2==0)

table1[1]=' '

else

table1[1]=table[A2]

table1[2]=table[num%1000%100/10]

table1[4]=table[num%1000%100%10]

}

else

{

table1[0]='?'

table1[1]='?'

table1[2]='?'

table1[4]='?'

}

write_com(0x80)

for(i=0i<11i++)

{write_date(table7[i])

delay(2)}

write_com(0x8b)

for(i=0i<5i++)

{write_date(table1[i])

delay(2)}

write_com(0xc0)

for(i=0i<16i++)

{

if(he==1)

write_date(ta5[i])

else if(in==1)

write_date(ta6[i])

else

write_date(table3[i])

}

c=0

WDT_CONTR=0x35 /////喂狗

}

////显示2////////////////////

display2(uchar bh,int dat)

{

uchar a,A,B

WDT_CONTR=0x35 /////喂狗

//write_com(0x01)//清屏指令

y=dat

y=y&0x8000

if(y!=0)

dat=~dat+1

A=dat/1000

B=dat%1000/100

if((bh!=4)&&(bh!=5))

{

if(A!=0)

table4[0]=table[dat/1000]

else if((c!=0)||(y!=0))

{

c=0y=0

table4[0]='-'

}

else

table4[0]=' '

if(B!=0)

table4[1]=table[B]

else

table4[1]=' '

table4[2]=table[dat%1000%100/10]

table4[3]='.'

table4[4]=table[dat%1000%100%10]

}

else

{

table4[0]=' '

if((c!=0)||(y!=0))

{

c=0y=0

table4[1]='-'

}

else

table4[1]=' '

table4[2]=' '

table4[3]=table[dat%1000%100/10]

table4[4]=table[dat%1000%100%10]

}

write_com(0xc4)

delay(2)

for(a=0a<5a++)

write_date(table4[a])

delay(2)

write_com(0x80)

switch(bh)

{

case 1:for(a=0a<14a++)write_date(ta1[a])break

case 2:for(a=0a<14a++)write_date(ta2[a])break

case 3:for(a=0a<14a++)write_date(ta3[a])break

case 4:for(a=0a<14a++)write_date(ta4[a])break

default:break

}

}

///////////x24c02//////////////////

void delay24()

{ }

void init24c02() //初始化

{

sda=1

delay24()

scl=1

delay24()

}

void start() //开始信号

{

sda=1

delay24()

scl=1

delay24()

sda=0

delay24()

}

void stop() //停止

{

sda=0

delay24()

scl=1

delay24()

sda=1

delay24()

}

void respons() //应答

{

uchar i

scl=1

delay24()

while((sda==1)&&(i<250))i++

scl=0

delay24()

}

void write_byte(uchar date) // 写数据子函数

{

uchar i,temp

temp=date

for(i=0i<8i++)

{

temp=temp<<1

scl=0

delay24()

sda=CY

delay24()

scl=1

delay24()

}

scl=0

delay24()

sda=1

delay24()

}

uchar read_byte() // 读数据子函数

{

uchar i,k

scl=0

delay24()

sda=1

delay24()

for(i=0i<8i++)

{

scl=1

delay24()

k=(k<<1)|sda

scl=0

delay24()

}

return k

}

///////写数据函数///////////////////

void write_add(uchar address,uint date)

{

start()

write_byte(0xa0)

respons()

write_byte(address)

respons()

write_byte(date/256)

respons()

write_byte(date%256)

respons()

stop()

}

uchar read_add(uchar address) //读数据函数

{

uchar date

start()

write_byte(0xa0)

respons()

write_byte(address)

respons()

start()

write_byte(0xa1)

respons()

date=read_byte()

stop()

return date

}

void delay1ms(uchar ms)

{

uchar i

while(ms--)

{

for(i = 0i<250i++)

{

_nop_()

_nop_()

_nop_()

_nop_()

}

}

}

int keyf(int *num,int up,int dn)

{

uint i

uchar z

for(i=0i<600i++)

{

display2(n,*num)

if(key1==0)

{

delay1ms(30)

if(key1==0)

{

i=0

n++

if(n>=9)

n=0

while(!key1)

display2(n,*num)

break

}

}

if(key2==0)

{

delay1ms(10)

if(key2==0)

{

i=0

if(*num>=up)

*num=up

else if(n!=4)

*num=*num+1

else if(*num<100)

*num=*num+5

else

*num=*num+10

for(z=0z<65z++)

{

display2(n,*num)

if(key2!=0)

break

}

while(!key2)

{

for(z=0z<2z++)

display2(n,*num)

if(*num>=up)

*num=up

else if(n!=4)

*num=*num+1

else if(*num<100)

*num=*num+5

else

*num=*num+10

}

}

}

if(key3==0)

{

delay1ms(10)

if(key3==0)

{

i=0

if(*num<=dn)

*num=dn

else if(n!=4)

*num=*num-1

else if(*num<100)

*num=*num-5

else

*num=*num-10

for(z=0z<65z++)

{

display2(n,*num)

if(key3!=0)

break

}

while(!key3)

{

for(z=0z<2z++)

display2(n,*num)

if(*num<=dn)

*num=dn

else if(n!=4)

*num=*num-1

else if(*num<100)

*num=*num-5

else

*num=*num-10

}

}

}

}

return(*num)

}

void keyjc()

{

uchar i=0

if(key1==0)

{

delay1ms(10)

if(key1==0)

{

EA=0

for(i=0i<20i++)

{

display(tmp())

}

if(key1==0)

{

write_com(0x01)//清屏指令

n++

if(n>=5)

n=0

while(!key1)

{

switch(n)

{

case 1:display2(n,acon)break

case 0:break

}

}

if(n==1)

{

keyf(&acon,1250,-530)

if((acon-bcon)<3)

bcon=acon-3

}

if(n==2)

{

keyf(&bcon,1240,-550)

if((acon-bcon)<3)

acon=bcon+3

}

write_add(1,acon)//A

delay1ms(15)

write_add(3,bcon)//B

n=0

write_com(0x01)//清屏指令

}

EA=1

}

}

}

key()

{

uint i

if(key4==0)

delay1ms(50)

if(key4==0)

{

write_com(0x01)//清屏指令

for(i=0i<500i++)

{

if(key4==0)

{

delay1ms(15)

if(key4==0)

{

i=0

n++

if(n>=5)

n=0

while(!key4)

{

switch(n)

{

case 1: display2(1,acon)break

case 2: display2(2,bcon)break

default: break

}

}

}

}

switch(n)

{

case 1: display2(1,acon)break

case 2: display2(2,bcon)break

default: break

}

}

n=0

}

}

///////滤波////////

int filter()

{

int tm,buf[6]

uchar i,j

EA=0

for(i=0i<6i++)

{

buf[i]=tmp()

delay1ms(20)

WDT_CONTR=0x35 /////喂狗

}

for(j=0j<5j++)

for(i=0i<5-ji++)

if(buf[i]>buf[i+1])

{

tm=buf[i]

buf[i]=buf[i+1]

buf[i+1]=tm

}

tm=((buf[2]+buf[3])/2)

EA=1

return (tm)

}

void main()

{

uchar b,c

Init_Com()

init1602()

init24c02()

b=read_add(1)

delay1ms(15)

c=read_add(2)

delay1ms(15)

acon=b*256+c

b=read_add(3)

delay1ms(15)

c=read_add(4)

delay1ms(15)

bcon=b*256+c

AUXR=0x01// 禁止ALE输出

WDT_CONTR=0x35//启动看门狗

write_com(0x01)//清屏指令

while(1)

{

at=filter()

display(at)

keyjc()

key()

wen_kong()

weno()

}

}

//////温度控制//////////////

void wen_kong()

{

if((flag==0)&&(not==0))

{

at=filter()

if(at<=bcon)

{

flag=1

jrk=0

xhk=0

he=1

}

}

}

void weno()

{

if(flag)

{

at=filter()

if(at>=acon)

{

flag=0

jrk=1

if(rsg)

xhk=0

else

xhk=1

he=0

}

}

if(not==1)

{

flag=0

jrk=1

if(rsg)

xhk=0

else

xhk=1

he=0

}

}

唧(jī)唧复唧唧,木兰当户织。不闻机杼(zhù)声,惟闻女叹息。 问女何所思,问女何所忆。女亦无所思,女亦无所忆。昨夜见军帖(tiě),可汗(kè hán)大点兵。军书十二卷,卷卷有爷名。阿爷无大儿,木兰无长兄。愿为(wèi)市鞍(ān)马,从此替爷征。东市买骏马,西市买鞍鞯(jiān),南市买辔(pèi)头,北市买长鞭。旦辞爷娘去,暮宿黄河边。不闻爷娘唤女声,但闻黄河流水鸣溅溅(jiān jiān)。旦辞黄河去,暮至黑山头。不闻爷娘唤女声,但闻燕山胡骑(jì)鸣啾啾(jiū jiū)。万里赴戎(róng)机,关山度若飞。朔(shuò)气传金柝(tuò),寒光照铁衣。将军百战死,壮士十年归。

归来见天子,天子坐明堂。策勋十二转,赏赐百千强(qiáng)。可汗问所欲,木兰不用尚书郎,愿驰千里足,送儿还故乡。

爷娘闻女来,出郭相扶将(jiāng);阿姊(zǐ)闻妹来,当户理红妆;小弟闻姊来,磨刀霍霍(huò huò)向猪羊。开我东阁门,坐我西阁床。脱我战时袍,著(zhuó)我旧时裳(cháng)。当窗理云鬓(bìn),对镜帖(tiē)花黄。出门看火伴,火伴皆惊惶。同行十二年,不知木兰是女郎。

雄兔脚扑朔,雌兔眼迷离;双兔傍(bàng)地走,安能辨我是雄雌?

《木兰诗》诗意画 译文

叹息声一声接着一声传出,木兰对着房门织布。听不见织布机织布的声音,只听见木兰在叹息。问木兰在想什么?问木兰在惦记什么?(木兰答道)我也没有在想什么,也没有在惦记什么。昨天晚上看见征兵文书,知道君主在大规模征兵,那么多卷征兵文册,每一卷上都有父亲的名字。父亲没有大儿子,木兰(我)没有兄长,木兰愿意为此到集市上去买马鞍和马匹,就开始替代父亲去征战。

在集市各处购买马具。第二天早晨离开父母,晚上宿营在黄河边,听不见父母呼唤女儿的声音,只能听到黄河水流水声。第二天早晨离开黄河上路,晚上到达黑山头,听不见父母呼唤女儿的声音,只能听到燕山胡兵战马的啾啾的鸣叫声。

不远万里奔赴战场,翻越重重山峰就像飞起来那样迅速。北方的寒气中传来打更声,月光映照着战士们的铠甲。将士们身经百战,有的为国捐躯,有的转战多年胜利归来。胜利归来朝见天子,天子坐在殿堂(论功行赏)。给木兰记很大的功勋,得到的赏赐有千百金还有余。天子问木兰有什么要求,木兰说不愿做尚书郎,希望骑上千里马,回到故乡。父母听说女儿回来了,互相搀扶着到城外迎接她;姐姐听说妹妹回来了,对着门户梳妆打扮起来;弟弟听说姐姐回来了,忙着霍霍地磨刀杀猪宰羊。每间房都打开了门进去看看,脱去打仗时穿的战袍,穿上以前女孩子的衣裳,当着窗子、对着镜子整理漂亮的头发,对着镜子在面部贴上装饰物。走出去看一起打仗的伙伴,伙伴们很吃惊,(都说我们)同行数年之久,竟然不知木兰是女孩。

(提着兔子耳朵悬在半空中时)雄兔两只前脚时时动d、雌兔两只眼睛时常眯着,所以容易分辨。雄雌两兔一起并排跑,怎能分辨哪个是雄兔哪个是雌兔呢?


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8086678.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存