void init18b20(void)
{
uint i
DS=0
i=103
while(i>0)i--
DS=1
i=4
while(i>0)i--
}
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++
}
}
}
void tmpchange(void) //DS18B20 初始化
{
init18b20()
delay(1)
tmpwritebyte(0xcc) // 跳过读ROM *** 作
tmpwritebyte(0x44) // 启动温度转换
}
int tmp() //DS18B20温度读取
{
float tt
uint a,b
TR1=0
init18b20()
delay(1)
tmpwritebyte(0xcc)
tmpwritebyte(0xbe)
a=tmpread()
b=tmpread()
if(flag==1)
TR1=1
else
TR1=0
temp=b
temp<<=8//将高字节温度数据与低字节温度数据整合
temp=temp|a
c=b>>4
if(c==0)
tt=temp*0.0625
else
tt=(~temp+1)*0.0625
temp=tt*10+0.5//放大10倍输出并四舍五入
return temp
}
延时函数需要根据实际你调整,temp就是温度值。
#include <stdio.h>exec sql include sqlca
int main(){
exec sql begin declare section
char userpasswd[30]="openlab/123456"
struct{
int id
char name[30]
double salary
}emp
exec sql end declare section
exec sql connect:userpasswd
exec sql declare empcursor cursor for
select id,first_name,salary from
s_emp order by salary
exec sql open empcursor
exec sql whenever notfound do break
for(){
exec sql fetch empcursor into :emp
printf("%d:%s:%lf\n",emp.id,emp.name,
emp.salary)
}
exec sql close empcursor
exec sql commit work release
}
把数据存到结构体里。
这个用假设法就好了,你先假设第一个元素是最大值,然后遍历数组,比最大值大,就重新赋值即可,示例代码如下:#include<stdio.h>#define SIZE 8 int main(){int number[SIZE]={95,45,15,78,84,51,24,12} //假设法int max = number[0]for (int inx=0inx!=SIZE++inx){if (number[inx] >max) max = number[inx]else continue}printf("the max value is:%d\n", max)}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)