{
uint i; ds=0; i=65;
while(i>0)i--; ds=1; i=7; while(i>0)i--; if(ds) flag=1; }
else
flag=0; ds=1; i=50;
while(i>0)i--;
/****************AT24C02读1位数据*****************************/ bit tempreadbit(void) {
uint i; bit dat;
ds=0;i++; //i++ 起延时作用 ds=1;i++; dat=ds;
i=8;while(i>0)i--; //8 return (dat); }
/****************AT24C02读1个字节*****************************/ uchar tempread(void) {
uchar i,j,dat; dat=0; for(i=1;i<=8;i++) {
j=tempreadbit();
dat=(j<<7)|(dat>>1); //读出的数据最低位在最前面,这样刚好一个字节在DAT里 }
return(dat); }
/****************AT24C02向18B20写一个字节*****************************/ void tempwritebyte(uchar dat) {
uint i; uchar j;
bit testb;
for(j=1;j<=8;j++) {
testb=dat&0x01; dat=dat>>1; if(testb) //写 1 { ds=0; i++;i++; ds=1;
i=8;while(i>0)i--; //i=8 } else {
ds=0; //写 0 i=9;while(i>0)i--; //9 ds=1; i++;
//i++
} } }
/**************** DS18B20 开始获取温度*****************************/ void tempchange(void) {
dsreset();
delay_nms(1);
tempwritebyte(0xcc); // 写跳过读ROM指令
tempwritebyte(0x44); // 写温度转换指令 }
/****************把读回来的温度转换成整数 如果为27.5°,275*****************/ uint get_temp() {
uchar a=0,b=0; dsreset(); delay_nms(1); tempwritebyte(0xcc);
tempwritebyte(0xbe);
a=tempread(); //读低8位 b=tempread(); //读高8位 temp=b;
temp<<=8; //两个字节组合为1个字 temp=temp|a;
f_temp=temp*0.0625; //温度在寄存器中为12位 分辨率位0.0625°
则变成 temp=f_temp*10+0.5; //乘以10表示小数点后面只取1位,加0.5是四舍五入 f_temp=f_temp+0.05; //这是依靠DS18B20的管子特性来定的 return temp; //temp是整型 }
/****************用数码管把DS18B20检测到的温度显示出来*****************/ void display_temp(uint value) { }
int i,j=1;
for(i=0;i<2;i++) { delay_nms(j); clean();//消影
P0=num[value/100]; //不带小数点的 第一位数码管显示 位选 bit_select4=0;//段选 delay_nms(j); clean();
P0=drop_num[value0/10]; //带小数点的 bit_select2=0; delay_nms(j); clean();
P0=num[value]; //不带小数点的 第三位数码管显示 bit_select3=0; delay_nms(j);
clean();
P0=0xc6;//显示C 第四位数码管显示 bit_select1=0; delay_nms(j); }
第二位数码管上显示
/*************主函数*************************************/ /*************按下SaveKey将保存EEPROM*************************************/ /*************按下DisKey将从EEPROM*************************************/ /*************按下SaveNumPlus************************************/ void main()
{ buzz=1;//蜂鸣器不叫(等于一是不叫的) key_value=0;
AT24C_Init();//AT24C02初始化 while(1)
将
对
write_dat
write_dat到
调出刚刚保存的数据
进
行
自
加
{ get_temp(); //把读回来的温度转换成整数 如果为27.5°,则变成275 tempchange();//温度转换
display_temp(temp);//显示温度
/*************控制蜂鸣器响***********************************/ if(temp>300) buzz=0;
if(temp<300)
buzz=1;
/*************控制AT24C02********************************** key_value=KeyScan();
if(key_value==SaveKey) {
buzz=0;
AT24C_WriteByte(10,write_dat); delay_nms(10); buzz=1;
}
else if(key_value==DisKey) {
buzz=0;
temp=AT24C_ReadRandom(10);
LedDis(0Xef,atemp); delay_nms(10); buzz=1; }
else if(key_value==SaveNumPlusKey) {
write_dat++; if(write_dat>9) {
write_dat=0; }
} */
} }
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库基于GSM模块的房间报警程序设计(2)在线全文阅读。
相关推荐: