?? realmain.c
字號:
lcd_set_cursor(1,2);
putslcd(tempdisplay1);
lcd_set_cursor(2,1);
putslcd(tempdisplay2);
writedatalcd(58); //:
lcd_set_cursor(2,8);
writedatalcd(0xA1); //溫度標識
writedatalcd(0xE6);
lcd_set_cursor(3,1);
putslcd(tempdisplay3);
lcd_set_cursor(3,8);
writedatalcd(0XC3); //秒標識
writedatalcd(0XEB);
lcd_set_cursor(4,1);
if(read_i2c_date( at2416, uprestrctflag)) writedatalcd(45); //-
else writedatalcd(43); //+
display_float3bit(stof(at2416,at2416temup));
lcd_set_cursor(4,5);
if(read_i2c_date( at2416, downrestrctflag)) writedatalcd(45); //-
else writedatalcd(43); //+
display_float3bit(stof(at2416,at2416temdown));
PORTAbits.RA2=1;
PORTAbits.RA3=0;
PORTAbits.RA5=0;
PORTAbits.RA1=1;
while(1)
{
extern char tempflag;
float temperature;
i++;
tempflag=0;
temperature=get_ds18b20_temp(); //讀取溫度
pwm_set(temperature); //溫度控制PWM波
lcd_set_cursor(2,3);
writedatalcd(58);
if(tempflag) writedatalcd(45); //-
else writedatalcd(43); //+
lcd_set_cursor(2,4);
display_float(temperature);
lcd_set_cursor(3,4);
read_time(); //讀取時間
h_to_number(hour);
if(y==48) writedatalcd(32);
else writedatalcd(y); writedatalcd(z);writedatalcd(58); //:
h_to_number(minute);
if(y==48) writedatalcd(32);
else writedatalcd(y); writedatalcd(z); writedatalcd(58); //:
h_to_number(second);
if(y==48) writedatalcd(32);
else writedatalcd(y); writedatalcd(z);
while(1) //判斷是否超越溫度控制
{
if(tempflag==0&&read_i2c_date( at2416, uprestrctflag)==0)
{
if(temperature>stof(at2416,at2416temup))
{
uplight();
sound();
break;
}
}
if(tempflag==0&&read_i2c_date( at2416, uprestrctflag)==1)
{
uplight();
sound();
break;
}
if(tempflag==1&&read_i2c_date( at2416, uprestrctflag)==1)
{
if(temperature<stof(at2416,at2416temup))
{
uplight();
sound();
break;
}
}
if(tempflag==1&&read_i2c_date( at2416, downrestrctflag)==0)
{
dowmlight();
sound();
break;
}
if(tempflag==1&&read_i2c_date( at2416, downrestrctflag)==1)
{
if(temperature>stof(at2416,at2416temdown))
{
dowmlight();
sound();
break;
}
}
if(tempflag==0&&read_i2c_date( at2416, downrestrctflag)==0)
{
if(temperature<stof(at2416,at2416temdown))
{
dowmlight();
sound();
break;
}
}
TRISAbits.TRISA2=1;
TRISAbits.TRISA3=1;
TRISAbits.TRISA1=1;
TRISAbits.TRISA5=1;
break;
}
if(i>=38) //每隔5秒進行一次存儲
{
union {
char c[4];
float f;
}temp;
char j;
char writeeepromdate[12];
temp.f=temperature;
writeeepromdate[0]=year;
writeeepromdate[1]=month;
writeeepromdate[2]=date;
writeeepromdate[3]=day;
writeeepromdate[4]=hour;
writeeepromdate[5]=minute;
writeeepromdate[6]=second;
writeeepromdate[7]=tempflag;
for(j=0;j<4;j++) { writeeepromdate[j+8]=temp.c[j]; }
write_i2c_pagedate(at2416, 12*k+20,12,writeeepromdate); //存儲當前信息
k++;
if(k==20) k=0;
i=0;
}
if(keyflag)
{
readkey();
if(key==escape) break;
}
}
TRISAbits.TRISA2=1;
TRISAbits.TRISA3=1;
TRISAbits.TRISA1=1;
TRISAbits.TRISA5=1;
pwm_set(0.00); //關閉PWM波
}
/*****************************************************************************
******函 數 名 稱 : timeset()
******函 數 功 能 : 進入時間設定界面
******輸 入 :
******輸 出 :
******************************************************************************/
void timesset()
{
char settime1[]="系統時間設定";
char settime2[]="時";
char settime3[]="分";
char settime4[]="秒";
char settime5[]="當前時刻:";
char settime6[]="年";
char settime7[]="月";
char settime8[]="日";
writecmdlcd(0x0f); // 光標開
clearlcd(); //清屏
read_time(); //讀取時間
lcd_set_cursor(1,2);
putslcd(settime1);
lcd_set_cursor(2,1);
putslcd(settime5);
lcd_set_cursor(3,2);
h_to_number(hour);
if(y==48) writedatalcd(32);
else writedatalcd(y); writedatalcd(z); putslcd(settime2); //X時
h_to_number(minute);
if(y==48) writedatalcd(32);
else writedatalcd(y); writedatalcd(z); putslcd(settime3); //X分
h_to_number(second);
if(y==48) writedatalcd(32);
else writedatalcd(y); writedatalcd(z); putslcd(settime4); //x秒
lcd_set_cursor(4,2);
writedatalcd(50); writedatalcd(48); //20
h_to_number(year);
writedatalcd(y); writedatalcd(z); putslcd(settime6); //X年
h_to_number(month);
if(y==0) writedatalcd(32);
else writedatalcd(y); writedatalcd(z); putslcd(settime7); //X月
h_to_number(date);
if(y==0) writedatalcd(32);
else writedatalcd(y); writedatalcd(z); putslcd(settime8); //X日
lcd_set_cursor(3,2);
timesettemp();
writecmdlcd(0x0c); // 光標關
}
/*****************************************************************************
******函 數 名 稱 : timesettemp()
******函 數 功 能 : 時間設定
******輸 入 :
******輸 出 :
******************************************************************************/
void timesettemp()
{
char settime9[]="輸入成功";
char settime10[]="您取消了輸入";
char number[3];
char pos=0;
char i=0;
char temptime[6];
number[2]=0;
temptime[2]=second; temptime[1]=minute; temptime[0]=hour; //在設置欄中顯示原始值
temptime[5]=date; temptime[4]=month; temptime[3]=year;
while(1)
{
readkey();
if(key>=key0&&key<=key9) //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
{
if(pos<2)
{
number[pos++]=key; //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
writedatalcd(number[pos-1]+48);
}
}
if(key==right)
{
temptime[i]=number[0]*10+number[1];
if(i<=1) lcd_set_cursor(3,i*2+4);
if(i>=2)
{
if(i==5) {
i=0;
lcd_set_cursor(3,2);continue;
}
else lcd_set_cursor(4,2*i-1);
}
i++;
pos=0;
}
if(key==lift)
{
temptime[i]=number[0]*10+number[1];
if(i>=4) lcd_set_cursor(4,2*i-5);
if(i<=3)
{
if(i==0) {
i=5;
lcd_set_cursor(4,7);continue;
}
else lcd_set_cursor(3,2*i);
}
i--;
pos=0;
}
if(key==enter)
{
temptime[i]=number[0]*10+number[1];
clearlcd();
clearlcd();
writecmdlcd(0x0c); // 光標關
writecmdlcd(0x0c); // 光標關
lcd_set_cursor(2,3);
lcd_set_cursor(2,3);
putslcd(settime9);
delays(10000,500); //延遲2.5秒
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -