东北大学2012届毕业设计说明书
unsigned int temperature(unsigned char Q) { unsigned char temp1,temp2; unsigned int temp; rst18B20(Q); write18B20(Q,0xcc); write18B20(Q,0x44);
rst18B20(Q); write18B20(Q,0xcc); write18B20(Q,0xbe);
temp1=read18B20(Q);//低8位 temp2=read18B20(Q);//高8位 temp=temp2; temp<<=8; temp+=temp1; temp=(unsigned int)(temp*0.625); //保留一位小数 return temp; }
void seg7(unsigned char v,unsigned char t);
//function2: 10key value void keyValue() interrupt 0{
unsigned char temp;
第32页 共37页
东北大学2012届毕业设计说明书
EX0=0; EA=0; temp=P3&0xf8; switch(temp){ case 0x38:keyV= 1;//0011 1000 break;
case 0xf0:keyV= 2;//1111 0000 break;
case 0xe8:keyV= 3;//1110 1000 break;
case 0xe0:keyV= 4;//1110 0000 break;
case 0xd8:keyV= 5;//1101 1000 break;
case 0xd0:keyV= 6;//1101 0000 break;
case 0xc8:keyV= 7;//1100 1000 break;
case 0xc0:keyV= 8;//1100 0000 break;
case 0xb8:keyV= 9;//1011 1000 break;
case 0x78:keyV= 10;//0111 1000 break; }
if(keyV>=1&&keyV<=8){ checkNum=keyV;
alter=1; //check the only one
第33页 共37页
东北大学2012届毕业设计说明书
// seg7(checkNum,1);//display the only number to check
}else if(keyV==9){
cancel++;
}else if(keyV==10){ alter++;
//calculate the total number the check alternately
if(alter>8) alter=1;
} EA=1; EX0=1;
}
//function3: 7seg
void seg7(unsigned char value,unsigned char lock){ if(value%2==1) AA=1; else AA=0; value/=2;
if(value%2==1) BB=1; else BB=0; value/=2;
if(value%2==1) CC=1; else CC=0; value/=2;
if(value%2==1) DD=1; else DD=0; if(lock==1){
//total number
lock1=1; delaynms(20); lock1=0; delaynms(20);
lock2=0;
第34页 共37页
东北大学2012届毕业设计说明书
}else if(lock==2){
//fire number
lock2=1; delaynms(20); lock2=0; delaynms(20); lock1=0;
}
}
unsigned char getQ(unsigned char i){ unsigned char temp=0x01; temp<<=(i-1); return temp; }
void checkFun(unsigned char i){ unsigned char temp=0x01; temp<<=(i-1); dense=0xff; delaynms(1);
tmpT=temperature(getQ(i)); if((dense&temp)==0){
//check dense
while(((cancel%2)==0)&&((dense&temp)==0)){ led=0; buzz=0; seg7(i,2);
}
}else if(tmpT>stdT){
//check temperature
while(((cancel%2)==0)&&(tmpT>stdT)){
tmpT=temperature(getQ(i));
led=0;
第35页 共37页
东北大学2012届毕业设计说明书
}
void main(){
unsigned char i=0; //circle parameter; unsigned char temp=0x01; unsigned char n=0x04; init_ext0(); cancel=0; while(1){
seg7(alter,1);
if(alter==1) checkFun(checkNum); else { }
//显示指定位置的温度
for(i=1;i<=alter;i++){ }
checkFun(i);
}
}
buzz=0; seg7(i,2);
led=1; buzz=1; seg7(0,2);
/* tmpT=temperature(getQ(checkNum));
seg7(tmpT/100,2); delaynms(500);
seg7(tmpT0/10,2); delaynms(500); seg7(tmpT,2); delaynms(500); */
第36页 共37页