請參卓:
#include <reg52.h>
#define lcd_bus P2
#define adc_bus P1
sbit lcd_rs =P2^0;
sbit lcd_rw =P2^1;
sbit lcd_en =P2^2;
sbit adc_rd =P3^6;
sbit adc_wr =P3^7;
sbit adc_intr =P3^2;
sbit cool = P2^5;
sbit heat = P2^6;
sbit alarm = P2^7;
char tab_TEMP[]={"TEMP:"};// 6
char tab_cool[]={" Cooling ..."};//12
char tab_heat[]={" Heating .."};//12
char tab_Over[]={"..Over Temp...."};//16
char tab_Temp_OK[] ={".. Temp OK ....."};//
void delay_us(int del)
{
int i;
i=del;
while(i--);
}
void lcd_wi(char com)
{
lcd_bus =com;
lcd_rs =0;
lcd_rw =0;
lcd_en =0;
delay_us(1);
lcd_en =1;
delay_us(200);
}
void lcd_wd(char com)
{
lcd_bus =com;
lcd_rs =1;
lcd_rw =0;
lcd_en =0;
delay_us(1);
lcd_en =1;
delay_us(200);
}
void init_lcd()
{
delay_us(10000);
lcd_wi(0x38);
lcd_wi(0x38);
lcd_wi(0x01);
lcd_wi(0x08);
lcd_wi(0x0e);
lcd_wi(0x06);
lcd_wi(0x01);
}
char RD_adc()
{
unsigned char dat;
adc_bus=0xff;
adc_wr =0;
adc_wr =1;
while(adc_intr);
adc_rd =0;
dat=adc_bus;
adc_rd =1;
return dat;
}
void lcd_show_str(char *P,char no)
{
char i=no;
while(i)
{
lcd_wd(*P++);
i--;
}
}
void lcd_show_ver(unsigned int dat)
{
lcd_wd(dat /1000 %10 +0x30);
lcd_wd(dat /100 %10 +0x30);
lcd_wd(dat /10 %10 +0x30);
lcd_wd('.');
lcd_wd(dat /1 %10 +0x30);
lcd_wd(0xdf);
lcd_wd('C');
}
main()
{
unsigned char adc_data;
init_lcd();
lcd_show_str(tab_TEMP,6);
while(1)
{
adc_data= RD_adc();
lcd_wi(0x86);
lcd_show_ver(adc_data *5 );
lcd_wi(0xc0);
if(adc_data >200)
{
lcd_show_str(tab_Over,16);
cool = 1;
heat = 0;
alarm = 1;
}
else
{
if(adc_data >140)
{
lcd_show_str(tab_cool,12);
cool = 1;
heat = 0;
alarm = 0;
}
else
{
if(adc_data <80)
{
lcd_show_str(tab_heat,12);
cool = 0;
heat = 1;
alarm = 0;
}
else
{
lcd_show_str(tab_Temp_OK,16);
cool =0;
heat = 0;
alarm =0;
}
}
}
}
}
|