附录一 C语言源程序
#include #include
uchar tflag,flagdat,t;//温度正负标志 sbit KEY_1 = P2^7;
sbit KEY_2 = P2^6; sbit KEY_3 = P2^5; sbit KEY_4 = P2^4;
sbit LED1 = P1^0; //电源指示灯 sbit LED2 = P1^1; //温度超上限 sbit LED3 = P1^2; //温度超下限 sbit RS = P1^5; sbit RW = P1^6;
sbit E = P1^7; #define Lcd_Bus P0
sbit clock_clk = P2 ^ 1;//ds1302_clk(时钟线) sbit clock_dat = P2 ^ 2;//ds1302_dat(数据线) sbit clock_Rst = P2 ^ 3;//ds1302_Rst(复位线) sbit a0 = ACC ^ 0; sbit a1 = ACC ^ 1; sbit a2 = ACC ^ 2; sbit a3 = ACC ^ 3; sbit a4 = ACC ^ 4; sbit a5 = ACC ^ 5; sbit a6 = ACC ^ 6; sbit a7 = ACC ^ 7;
23
unsigned char hh,mm,ss,n,n1,n2,e=0; bit w = 0;
static unsigned char menu = 0; static unsigned char keys = 0; static unsigned char timecount = 0; void DelayM(unsigned int a){ unsigned char i; while( --a != 0){
for(i = 0; i < 125; i++);
}
}
void Delay(int num){ while(num--) ; }
void chk_busy(){ RS=0; RW=1; E=1;
Lcd_Bus=0xff;
while((Lcd_Bus&0x80)==0x80); E=0; }
void write_com(unsigned char cmdcode){ chk_busy(); RS=0; RW=0; E=1;
Lcd_Bus=cmdcode; E=0; }
void write_data(unsigned char Dispdata){ chk_busy(); RS=1; RW=0; E=1;
Lcd_Bus=Dispdata;
24
E=0; }
void lcm_init(){
write_com(0x30); write_com(0x0c); write_com(0x01); }
void lcm_w_word(unsigned char *s){ while(*s>0){ write_data(*s); s++; } }
void write_data1(unsigned char Dispdata){
chk_busy(); RS=1; RW=0; E=1;
Lcd_Bus=Dispdata; DelayM(10); E=0; }
void lcm_w_word1(unsigned char *s){ while(*s>0){ write_data1(*s); s++; } }
void lcm_w_test(bit i,unsigned char word){ if(i == 0){
write_com(word);
}else{ write_data(word);
} }
void lcm_clr(void){
25
lcm_w_test(0,0x01); }
void delay_18B20(unsigned int i) {
while(i--); }
void ds1820rst()//ds1820 { unsigned char x=0; DQ = 1; delay_18B20(4); DQ = 0; delay_18B20(100); DQ = 1; delay_18B20(40); }
unsigned char ds1820rd() { unsigned char i=0; unsigned char dat = 0; for (i=8;i>0;i--) { DQ = 0; dat>>=1; DQ = 1; if(DQ) dat|=0x80; delay_18B20(10); }
return(dat); }
void ds1820wr(uchar wdata) {unsigned char i=0; for (i=8; i>0; i--) { DQ = 0;
DQ = wdata&0x01; delay_18B20(10); DQ = 1;
26
wdata>>=1; } }
read_temp() {uchar a,b; ds1820rst(); ds1820wr(0xcc); ds1820wr(0x44); ds1820rst(); ds1820wr(0xcc); ds1820wr(0xbe); a=ds1820rd(); b=ds1820rd(); tvalue=b; tvalue<<=8; tvalue=tvalue|a; if(tvalue<0x0fff) tflag=0; else
{tvalue=~tvalue+1; tflag=1; }
tvalue=tvalue*(0.625); return(tvalue); }
void lcm_w_ss(void);void lcm_w_mm(void); void lcm_w_hh(void);void lcm_w_dd(void); void lcm_w_mo(void);void lcm_w_yy(void); void lcm_w_xq(void); unsigned char clock_in(void); void clock_out(unsigned char dd); void Init_1302(void);
unsigned char read_clock(unsigned char ord); void read_clockS(void); void Set_time(unsigned char sel);
void write_clock(unsigned char ord, unsigned char dd);
27