?? ds18b20+ds1320+lcd12864.c
字號(hào):
write_datal(0x00);
write_datar(0x00);
}
}
}
/****************************************************************************
寫入ASCII字符
****************************************************************************/
void write_ascii(unsigned char x,unsigned char y,unsigned char time,bit fanhei)
{
unsigned char i,j;
unsigned char k=0;
unsigned char fanheizi=0;
unsigned char Page,Row;
Page=x|0xb8;
if((y>=0)&&(y<8))
{
Row=(y*8)|0x40;
write_cmdl(Page);
write_cmdl(Row);
for(j=0;j<2;j++)
{
for(i=0;i<8;i++)
{
if(fanhei==1)
{
fanheizi=255-nAsciiDot[time*16+k];
}
else
{
fanheizi=nAsciiDot[time*16+k];
}
write_datal(fanheizi);
k++;
}
write_cmdl(Row);
write_cmdl(Page+1);
}
}
if((y>=8)&&(y<16))
{
y=y-8;
Row=(y*8)|0x40;
write_cmdr(Page);
write_cmdr(Row);
for(j=0;j<2;j++)
{
for(i=0;i<8;i++)
{
if(fanhei==1)
{
fanheizi=255-nAsciiDot[time*16+k];
}
else
{
fanheizi=nAsciiDot[time*16+k];
}
write_datar(fanheizi);
k++;
}
write_cmdr(Row);
write_cmdr(Page+1);
}
}
}
/****************************************************************************
寫入星期
****************************************************************************/
void write_week(unsigned char x,unsigned char y,unsigned char weektime,bit fanhei)
{
unsigned char i,j;
unsigned char k=0;
unsigned char fanheizi=0;
unsigned char Page,Row;
Page=x|0xb8;
if((y>=0)&&(y<8))
{
Row=(y*8)|0x40;
write_cmdl(Page);
write_cmdl(Row);
for(j=0;j<2;j++)
{
for(i=0;i<16;i++)
{
if(fanhei==1)
{
fanheizi=255-characterweek[(weektime-1)*32+k];
}
else
{
fanheizi=characterweek[(weektime-1)*32+k];
}
write_datal(fanheizi);
k++;
}
write_cmdl(Row);
write_cmdl(Page+1);
}
}
if((y>=8)&&(y<16))
{
y=y-8;
Row=(y*8)|0x40;
write_cmdr(Page);
write_cmdr(Row);
for(j=0;j<2;j++)
{
for(i=0;i<16;i++)
{
if(fanhei==1)
{
fanheizi=255-characterweek[(weektime-1)*32+k];
}
else
{
fanheizi=characterweek[(weektime-1)*32+k];
}
write_datar(fanheizi);
k++;
}
write_cmdr(Row);
write_cmdr(Page+1);
}
}
}
/****************************************************************************
寫入漢字
****************************************************************************/
void write_character(unsigned char x,unsigned char y,unsigned char *ptr,bit fanhei)
{
unsigned char i,j;
unsigned char number,k=0;
unsigned char cl,ch;
unsigned char fanheizi=0;
unsigned char Page,Row;
cl=ptr[0];
ch=ptr[1];
for(number=0;;number++)
{
if((cl==GB_16[number].Index[0])&&(ch==GB_16[number].Index[1]))
{
Page=x|0xb8;
if((y>=0)&&(y<8))
{
Row=(y*8)|0x40;
write_cmdl(Page);
write_cmdl(Row);
for(j=0;j<2;j++)
{
for(i=0;i<16;i++)
{
if(fanhei==1)
{
fanheizi=255-GB_16[number].Msk[k];
}
else
{
fanheizi=GB_16[number].Msk[k];
}
write_datal(fanheizi);
k++;
}
write_cmdl(Row);
write_cmdl(Page+1);
}
}
if((y>=8)&&(y<16))
{
y=y-8;
Row=(y*8)|0x40;
write_cmdr(Page);
write_cmdr(Row);
for(j=0;j<2;j++)
{
for(i=0;i<16;i++)
{
if(fanhei==1)
{
fanheizi=255-GB_16[number].Msk[k];
}
else
{
fanheizi=GB_16[number].Msk[k];
}
write_datar(fanheizi);
k++;
}
write_cmdr(Row);
write_cmdr(Page+1);
}
}
break;
}
}
}
/****************************************************************************
寫入天干地支
****************************************************************************/
void write_yearlunar(unsigned char x,unsigned char y,unsigned char lunar,bit tiandi)
{
unsigned char i,j;
unsigned char k=0;
unsigned char yearlunar;
unsigned char Page,Row;
Page=x|0xb8;
if((y>=0)&&(y<8))
{
Row=(y*8)|0x40;
write_cmdl(Page);
write_cmdl(Row);
for(j=0;j<2;j++)
{
for(i=0;i<16;i++)
{
if(tiandi==1)
{
yearlunar=tiangan[lunar*32+k];
}
else
{
yearlunar=dizhi[lunar*32+k];
}
write_datal(yearlunar);
k++;
}
write_cmdl(Row);
write_cmdl(Page+1);
}
}
if((y>=8)&&(y<16))
{
y=y-8;
Row=(y*8)|0x40;
write_cmdr(Page);
write_cmdr(Row);
for(j=0;j<2;j++)
{
for(i=0;i<16;i++)
{
if(tiandi==1)
{
yearlunar=255-tiangan[lunar*32+k];
}
else
{
yearlunar=dizhi[lunar*32+k];
}
write_datar(yearlunar);
k++;
}
write_cmdr(Row);
write_cmdr(Page+1);
}
}
}
/****************************************************************************
DS18B20初始化
****************************************************************************/
bit reset_ds18b20(void)
{
bit presence;
DQ=0;
delayus(70);
DQ=1;
delayus(3);
presence=DQ;
delayus(25);
return presence;
}
/****************************************************************************
讀一字節(jié)溫度值
****************************************************************************/
unsigned char read_ds18b20(void)
{
unsigned char i;
unsigned char value = 0;
for(i=8;i>0;i--)
{
value=value>>1;
DQ=0;
DQ=1;
delayus(1);
if(DQ)
{
value=value|0x80;
}
delayus(6);
}
return(value);
}
/****************************************************************************
寫一字節(jié)命令
****************************************************************************/
void write_ds18b20(unsigned char value)
{
unsigned char i;
for(i=8;i>0;i--)
{
DQ=0;
DQ=value&0x01;
delayus(5);
DQ=1;
value=value>>1;
}
delayus(5);
}
/****************************************************************************
讀出溫度值
****************************************************************************/
unsigned char read_temp(void)
{
unsigned char i,count;
unsigned int temp_v;
unsigned int x;
unsigned char temp[2];
reset_ds18b20();
write_ds18b20(0xcc);
write_ds18b20(0x44);
reset_ds18b20();
write_ds18b20(0xcc);
write_ds18b20(0xbe);
temp[1]=read_ds18b20();
temp[0]=read_ds18b20();
tempflag=0;
if((temp[0]&0xf8)!=0x00)
{
tempflag=1;
temp[1]=~temp[1];
temp[0]=~temp[0];
temp_v=temp[1]+1;
temp[1]=temp_v;
if(temp_v>255)
{
temp[0]++;
}
}
x=((temp[0]&0x07)*256+temp[1])>>4;
temp[1]=temp[1]&0x0f;
temp[1]=divdisplay[temp[1]];
for(i=0;i<8;i++)
{
bcddis[i]=0;
}
i=0;
bcddis[0]=temp[1];
i++;
bcddis[1]=10;
i++;
while(x/10)
{
bcddis[i]=x%10;
x=x/10;
i++;
}
bcddis[i]=x;
i++;
count=i;
if(tempflag==1)
{
bcddis[i]=13;//-
}
else
{
bcddis[i]=12;//+
}
return count;
}
/****************************************************************************
顯示三路溫度值
****************************************************************************/
void tempdisplay(void)
{
unsigned char i;
unsigned char count;
clear();
write_character(0,2,"溫",0);
write_character(0,4,"度",0);
write_character(2,2,"熱",0);
write_character(2,4,"水",0);
write_character(2,6,"箱",0);
write_character(4,2,"水",0);
write_character(4,4,"管",0);
write_character(6,2,"集",0);
write_character(6,4,"熱",0);
write_character(6,6,"器",0);
write_character(0,10,"℃",0);
write_character(2,11,"℃",0);
write_character(4,11,"℃",0);
write_character(6,11,"℃",0);
write_ascii(0,8,TN>>4,0);
write_ascii(0,9,TN&0x0f,0);
count=read_temp();//寫入溫度
for(i=0;i<count+1;i++)
{
write_ascii(2,10-i,bcddis[i],0);
}
count=read_temp();//寫入溫度
for(i=0;i<count+1;i++)
{
write_ascii(4,10-i,bcddis[i],0);
}
count=read_temp();//寫入溫度
for(i=0;i<count+1;i++)
{
write_ascii(6,10-i,bcddis[i],0);
}
}
/****************************************************************************
顯示鬧鐘狀態(tài)
****************************************************************************/
void ringdisplay(void)
{
unsigned char onoff1=read_ds1302(0x0c1);
unsigned char ring1h=read_ds1302(0x0c3);
unsigned char ring1l=read_ds1302(0x0c5);
unsigned char onoff2=read_ds1302(0x0c7);
unsigned char ring2h=read_ds1302(0x0c9);
unsigned char ring2l=read_ds1302(0x0cb);
clear();
solartolunar();
displaylunar();
write_character(2,5,"鬧",0);
write_character(2,9,"鐘",0);
write_week(4,2,1,0);
write_character(4,4,"路",0);
write_week(6,2,2,0);
write_character(6,4,"路",0);
write_ascii(4,9,ring1h>>4,0);
write_ascii(4,10,ring1h&0x0f,0);
write_ascii(4,11,11,0);
write_ascii(4,12,ring1l>>4,0);
write_ascii(4,13,ring1l&0x0f,0);
write_ascii(6,9,ring2h>>4,0);
write_ascii(6,10,ring2h&0x0f,0);
write_ascii(6,11,11,0);
write_ascii(6,12,ring2l>>4,0);
write_ascii(6,13,ring2l&0x0f,0);
if(onoff1==0)
{
write_character(4,6,"關(guān)",0);
}
else
{
write_character(4,6,"開",0);
}
if(onoff2==0)
{
write_character(6,6,"關(guān)",0);
}
else
{
write_character(6,6,"開",0);
}
}
/****************************************************************************
溫度設(shè)置
****************************************************************************/
void tempreset(void)
{
bit BACK2=1;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -