|
5黑幣
#include<reg51.h>
#include<intrins.h>
#include <ctype.h>
#include <stdlib.h>
#define LCD_DATA P0
sbit LCD_RS = P2^0;
sbit LCD_RW = P2^1;
sbit LCD_EN = P2^2;
unsigned char dispBuff0[16]={'S','E','T',':',' ','.',' ','V',' ',' ',' ','s',' ',' ',' ',};
unsigned char dispBuff1[16]={'T','E','M','P',':',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',};
unsigned char dispBuff2[4]={' ',' ',' ',' ',};
unsigned char dispBuff3[16]={' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',};
unsigned char dispBuff4[16]={'I','N','P','U','T',' ','4','W','E','I',' ','M','I','M','A',};
unsigned char dispBuff5[16]={' ',' ',' ','M','I','M','A',' ','E','R','R','O','R',' ',' ',};
sbit DQ=P2^3;
unsigned int temperature=0;
unsigned int fuhao=0;
sbit LED1=P1^1;
#define off 1
#define on 0
sbit speaker=P1^0;
void Delay20ms() ;
void LCD_WriteDat(unsigned char lcd_dat);
void LCD_WriteCmd(unsigned char lcd_cmd);
unsigned char LCD_ReadStatus(void);
void LCD_Goto(unsigned char x,unsigned char y);
void LCD_Display(unsigned char row,unsigned char *str);
void delay(unsigned int x)
{
unsigned char j;
while(x--)
{
for(j=0;j<125;j++);
}
}
void delay1(unsigned int x)
{
while(--x);
}
char keyscan()
{
char skey;
P3 = 0xfe;
while((P3 & 0xf0) != 0xf0)
{
delay(10);
while((P3 & 0xf0) != 0xf0)
{
switch(P3)
{
case 0xee: skey = '7'; break;
case 0xde: skey = '8'; break;
case 0xbe: skey = '9'; break;
case 0x7e: skey = '+'; break;
}
while((P3 & 0xf0) != 0xf0);
}
}
P3 = 0xfd;
while((P3 & 0xf0) != 0xf0)
{
delay(10);
while((P3 & 0xf0) != 0xf0)
{
switch(P3)
{
case 0xed: skey = '4'; break;
case 0xdd: skey = '5'; break;
case 0xbd: skey = '6'; break;
case 0x7d: skey = '-'; break;
}
while((P3 & 0xf0) != 0xf0);
}
}
P3 = 0xfb;
while((P3 & 0xf0) != 0xf0)
{
delay(10);
while((P3 & 0xf0) != 0xf0)
{
switch(P3)
{
case 0xeb: skey = '1'; break;
case 0xdb: skey = '2'; break;
case 0xbb: skey = '3'; break;
case 0x7b: skey = '.'; break;
}
while((P3 & 0xf0) != 0xf0);
}
}
P3 = 0xf7;
while((P3 & 0xf0) != 0xf0)
{
delay(10);
while((P3 & 0xf0) != 0xf0)
{
switch(P3)
{
case 0xe7: skey = '&'; break;
case 0xd7: skey = '0'; break;
case 0xb7: skey = '*'; break;
case 0x77: skey = '#'; break;
}
while((P3 & 0xf0) != 0xf0);
}
}
return skey;
}
void Delay20ms()
{
unsigned int tmp = 50000;
while(tmp--);
}
void LCD_Init(void)
{
Delay20ms();
LCD_WriteCmd(0x38);
LCD_WriteCmd(0x0c);
LCD_WriteCmd(0x01);
LCD_WriteCmd(0x06);
LCD_Goto(0,0);
}
void LCD_WriteDat(unsigned char lcd_dat)
{
unsigned char tmp;
tmp = LCD_ReadStatus();
while((tmp & 0x80))
{
tmp = LCD_ReadStatus();
}
LCD_RS = 1;
LCD_RW = 0;
LCD_DATA = lcd_dat;
_nop_();
LCD_EN = 0;
_nop_();
_nop_();
LCD_EN = 1;
}
void LCD_WriteCmd(unsigned char lcd_cmd)
{
unsigned char tmp;
tmp = LCD_ReadStatus();
while((tmp & 0x80))
{
tmp = LCD_ReadStatus();
}
LCD_RS = 0;
LCD_RW = 0;
LCD_DATA = lcd_cmd;
_nop_();
LCD_EN = 0;
_nop_();
_nop_();
LCD_EN = 1;
}
unsigned char LCD_ReadStatus(void)
{
unsigned char tmp;
#if 0
LCD_RS = 0;
LCD_RW = 1;
LCD_EN = 1;
tmp = LCD_DATA;
LCD_EN = 0;
#endif
LCD_DATA = 0xff;
LCD_RS = 0;
LCD_RW = 1;
LCD_EN = 0;
_nop_();
_nop_();
LCD_EN = 1;
tmp = LCD_DATA;
return tmp;
}
void LCD_Goto(unsigned char x,unsigned char y)
{
unsigned char tmp;
if(y)
{
tmp = 0xc0 + x;
LCD_WriteCmd(tmp);
}
else
{
tmp = 0x80 + x;
LCD_WriteCmd(tmp);
}
}
void LCD_Display(unsigned char row,unsigned char *str)
{
if(row)
{
LCD_Goto(0,1);
}
else
{
LCD_Goto(0,0);
}
while(*str != '\0')
{
LCD_WriteDat(*str++);
}
}
int Init_DS18B20()
{
unsigned char x=0;
DQ = 1;
delay1(1);
DQ = 0;
delay1(30);
DQ = 1;
delay1(5);
if(DQ==1)
{
x=0;
}
else
{
x=1;
}
delay1(30);
return x;
}
unsigned char ReadOneChar(void)
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{
DQ=1;
_nop_();
_nop_();
_nop_();
DQ = 0;
dat>>=1;
delay(1);
DQ = 1;
delay(2);
if(DQ)
dat|=0x80;
delay(5);
}
return(dat);
}
void WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 1;
_nop_();
_nop_();
_nop_();
DQ = 0;
DQ = dat&0x01;
delay(2);
dat>>=1;
}
}
void ReadTemperature(void)
{ unsigned char readdata[2]={0,0};
fuhao=0;
temperature=0;
delay(40);
if(Init_DS18B20()==1)
{
WriteOneChar(0xCC);
WriteOneChar(0x44);
}
delay1(30);
if(Init_DS18B20()==1)
{
WriteOneChar(0xCC);
WriteOneChar(0xBE);
}
delay1(30);
readdata[0]=ReadOneChar();
readdata[1]=ReadOneChar();
readdata[1]<<=8;
if (readdata[1]>127)
{
readdata[0]^=0xff;
readdata[1]^=0xff;
fuhao=1;
}
temperature =readdata[1]*256+readdata[0] ;
temperature =temperature*0.625+0.5;
}
void set()
{
int i;
char ckey;
ckey=keyscan();
if(ckey=='#')
{
delay(10);
i=1;
while(1)
{ ckey=keyscan();
if(isdigit(ckey)&&i==1)
{
dispBuff2[0]=ckey;
i=0;
dispBuff0[4]=dispBuff2[0];
LCD_Display(0,dispBuff0);
}
else if(isdigit(ckey)&&i==0)
{
dispBuff2[1]=ckey;
dispBuff0[6]=dispBuff2[1];
LCD_Display(0,dispBuff0);
break;
}
delay(800);
}
}
if(ckey=='*')
{
delay(10);
i=1;
while(1)
{ ckey=keyscan();
if(isdigit(ckey)&&i==1)
{
dispBuff2[2]=ckey;
i=0;
dispBuff0[9]=dispBuff2[2];
LCD_Display(0,dispBuff0);
}
else if(isdigit(ckey)&&i==0)
{
dispBuff2[3]=ckey;
dispBuff0[10]=dispBuff2[3];
LCD_Display(0,dispBuff0);
break;
}
delay(800);
}
}
}
int mima()
{
int i,a;
char ckey;
LCD_Display(0,dispBuff4);
ckey=keyscan();
if(ckey=='&')
{
delay(10);
i=0;
while(1)
{
ckey=keyscan();
if(isdigit(ckey)&&i==0)
{
dispBuff2[0]=ckey;
i=1;
dispBuff3[6]=dispBuff2[0];
LCD_Display(1,dispBuff3);
}
else if(isdigit(ckey)&&i==1)
{
dispBuff2[1]=ckey;
i=2;
dispBuff3[7]=dispBuff2[1];
LCD_Display(1,dispBuff3);
}
else if(isdigit(ckey)&&i==2)
{
dispBuff2[2]=ckey;
i=3;
dispBuff3[8]=dispBuff2[2];
LCD_Display(1,dispBuff3);
}
else if(isdigit(ckey)&&i==3)
{
dispBuff2[3]=ckey;
i=4;
dispBuff3[9]=dispBuff2[3];
LCD_Display(1,dispBuff3);
break;
}
delay(800);
}
}
a=(dispBuff2[0]-'0')*1000+(dispBuff2[1]-'0')*100+(dispBuff2[2]-'0')*10+(dispBuff2[3]-'0');
return a;
}
void timer0() interrupt 1
{ TH0=254;
TL0=200;
speaker=!speaker;
}
void main()
{
int a,b,d;
float c;
LCD_Init();
TMOD=0x11;
TH0=254;
TL0=200;
ET0=1;
EA=1;
speaker=1;
m:d=mima();
if(d==1234)
{ while(1)
{
delay(10);
set();
ReadTemperature();
if (fuhao)
{
dispBuff1[5]='-';
}
else
{
dispBuff1[5]='+';
}
dispBuff1[6]=(temperature/1000)%10+'0';
dispBuff1[7]=(temperature/100)%10+'0';
dispBuff1[8]=(temperature/10)%10+'0';
dispBuff1[9]='.';
dispBuff1[10]=(temperature)%10+'0';
LCD_Display(0,dispBuff0);
LCD_Display(1,dispBuff1);
a=dispBuff0[4]-'0';
b=dispBuff0[6]-'0';
c=a+b*0.1;
delay(20);
if (temperature>=c*510 && !fuhao)
{
LED1=on;
}
else
{
LED1=off;
}
if (temperature>=c*510 && !fuhao)
{
TR0=1;
}
else
{
TR0=0;
}
}
}
else
{
LCD_Display(1,dispBuff5);
goto m;
}
}
|
最佳答案
查看完整內(nèi)容
我這個(gè)例程是使用過的,沒有問題。
有程序main.c:
/*******************************************************************************
* 實(shí)驗(yàn)名 :溫度顯示實(shí)驗(yàn)
* 使用的IO :
* 實(shí)驗(yàn)效果 :1602顯示溫度
* 注意 :
*******************************************************************************/
#include
#include"temp.h"
//數(shù)碼管IO
#define DIG P0
sbit LSA=P2^2;
sbit LSB=P2^3 ...
|