E=1;
_nop_(); _nop_(); _nop_(); E=0;
delay1ms(1); }
*初始化*
void Lcd_Int(void) {
Write_com(0x38); delay1ms(1); Write_com(0x38); delay1ms(1); Write_com(0x06); delay1ms(1); Write_com(0x0c); delay1ms(1);
Write_com(0x01); }
void displaymainpart(void)显示液晶主要部分(不变化部分) {
Write_Address(0x01); delay1ms(1); Write_Date('D'); Write_Date('A'); Write_Date('T'); Write_Date('E'); Write_Date(':'); delay1ms(1);
Write_Address(0x0A); delay1ms(1); Write_Date('-');
Write_Address(0x0D); Write_Date('-');
Write_Address(0x42); Write_Date('T'); Write_Date('I'); Write_Date('M'); Write_Date('E'); Write_Date(':');
Write_Address(0x4A); Write_Date('-');
Write_Address(0x4D); Write_Date('-');
Write_Address(0x06); Write_Date('2'); Write_Date('0'); }
void display_Second(unsigned char second) 在液晶上显示秒 {
unsigned char i,j; i=second10; j=second;
Write_Address(0x4E); Write_Date(digit[i]); Write_Date(digit[j]); delay1ms(1); }
void display_Minute(unsigned char minute) 在液晶上显示分 {
unsigned char i,j; i=minute10; j=minute;
Write_Address(0x4B); Write_Date(digit[i]); Write_Date(digit[j]); delay1ms(1); }
void display_Hour(unsigned char []={%unsigned char code displayerror[]={%unsigned char code displayerror1[]={%unsigned char code displaypart1[]={%unsigned char code displaypart2[]={%unsigned char flag;
**********************操作DS18B20模块*************************** sbit DQ=P3^3;
unsigned char time;
**********************DS18B20初始化**************************** bit IntDS18B20(void) {
bit temp; DQ=1;
for(time=0;time<2;time++); DQ=0;
for(time=0;time<200;time++); DQ=1;
for(time=0;time<10;time++); temp=DQ;
for(time=0;time<200;time++);
return temp; }
**************************读DS18B20********************** unsigned char ReadDS18B20(void) {
unsigned char i; unsigned char dat; for(i=0;i<8;i++) {
DQ=1; _nop_(); DQ=0; _nop_(); DQ=1;
for(time=0;time<2;time++); dat>>=1; if(DQ==1)
dat=dat|0x80; else
dat=dat|0x00;
for(time=0;time<10;time++); }
return dat; }
*********************向DS18B20写数据************************** void WriteDS18B20(unsigned char date) {
unsigned char i; for(i=0;i<8;i++) {
DQ=1; _nop_(); DQ=0;
DQ=date&0x01;
for(time=0;time<10;time++); DQ=1;
for(time=0;time<1;time++); date>>=1; }
for(time=0;time<4;time++); }
*******************为读取温度做好准备************************ void ReadyreadDS18B20(void) {
IntDS18B20();
WriteDS18B20(0XCC); WriteDS18B20(0X44); delay1ms(200); IntDS18B20();
WriteDS18B20(0XCC); WriteDS18B20(0XBE); }
*************在1602液晶上显示相关信息模块********************** ****************当未检测到DS18B20时显示信息模块**************** void Display_Error(void) {
unsigned char i=0; Write_Address(0x00);
while(displayerror[i]!='\\0') {
Write_Date(displayerror[i]); i++;
delay1ms(100); }
delay1ms(5); i=0;
Write_Address(0x40);
while(displayerror1[i]!='\\0') {
Write_Date(displayerror1[i]); i++;
delay1ms(100); }
delay1ms(3000) ; }
*************温度显示模块**************** void Display_Explain(void) {
unsigned char i=0; Write_Address(0x00); delay1ms(5);
while(displayexplain[i]!='\\0') {
Write_Date(displayexplain[i]); i++;
delay1ms(5); } i=0;
Write_Address(0x40);
while(displaypart1[i]!='\\0') {
Write_Date(displaypart1[i]); i++;
delay1ms(5); } i=0;
Write_Address(0x4C);
while(displaypart2[i]!='\\0') {
Write_Date(displaypart2[i]); i++;
delay1ms(5); }
Write_Address(0x49); Write_Date('.'); delay1ms(5); }
*********************显示温度整数部分************************* void Display_Integer(unsigned char x) {
unsigned char i,j,k; i=x100; j=x010; k=x; if(i!=0) {
Write_Address(0x46);
{ if(flag==1) Write_Date('-'); else Write_Date(' '); }
Write_Date(digit[i]); Write_Date(digit[j]); Write_Date(digit[k]); delay1ms(50) ; }
if(i==0&&j!=0) {
Write_Address(0x46); Write_Date(' ');
{ if(flag==1) Write_Date('-'); else Write_Date(' '); }
Write_Date(digit[j]);