#include <reg52.h>
#include <intrins.h>
#include <string.h>
#define INT8U unsigned char
#define INT16U unsigned int
sbit CS = P1^0;
sbit CLK = P1^1;
sbit DIO = P1^2;
sbit RS = P2^0;
sbit RW = P2^1;
sbit E=P2^2;
sbit LED1=P3^0;
sbit LED2=P3^1;
sbit LED3=P3^2;
sbit BEEP=P3^3;
#define LCD_PORT P0
INT8U Disp_Buff1[]=" 00.0L";
INT8U Disp_Buff2[16];
#define delay4us(){_nop_();_nop_();_nop_();_nop_();}
void delay_ms(INT16U x)
{
INT8U t;
while(x--)
for(t=0;t<120;t++);
}
bit Read_LCD_Busy_Flag()
{
INT8U result;
LCD_PORT=0xFF;
RS=0;RW=1;
E=1;delay4us();result=P0;E=0;
return (result & 0x80)? 1 : 0;
}
void Write_LCD_Command(INT8U cmd)
{
while(Read_LCD_Busy_Flag());
RS=0;RW=0;
E=0;_nop_();_nop_();LCD_PORT=cmd;
delay4us();E=1;delay4us();E=0;
}
void Write_LCD_Data(INT8U dat)
{
while(Read_LCD_Busy_Flag());
RS=1;RW=0;
E=0;LCD_PORT=dat;delay4us();
E=1;delay4us();E=0;
}
void LCD_Show_String(INT8U r,INT8U c,char *s)
{
INT8U i=0;
INT8U code DDRAM[]={0x80,0xC0};
Write_LCD_Command(DDRAM[r] | c);
while(s[i] &&i<16) Write_LCD_Data(s[i++]);
}
void LCD_Initialise()
{
Write_LCD_Command(0x38);delay_ms(1);
Write_LCD_Command(0x08);delay_ms(1);
Write_LCD_Command(0x0C);delay_ms(1);
Write_LCD_Command(0x06);delay_ms(1);
Write_LCD_Command(0x01);delay_ms(1);
}
INT8U Get_AD_Result()
{
INT8U i,dat1=0,dat2=0;
CS=0;CLK=0;
DIO=1;_nop_();_nop_();
CLK=1;_nop_();_nop_();
CLK=0;DIO=1;_nop_();_nop_();
CLK=1;_nop_();_nop_();
CLK=0;DIO=0;_nop_();_nop_();
CLK=1;_nop_();_nop_();
CLK=0;DIO=1;_nop_();_nop_();
for(i=0;i<8;i++)
{
CLK=1;_nop_();_nop_();
CLK=0;_nop_();_nop_();
dat1=(dat1<<1) | DIO;
}
for(i=0;i<8;i++)
{
dat2=dat2 | ((INT8U)DIO << i);
CLK=1;_nop_();_nop_();
CLK=0;_nop_();_nop_();
}
CS=1;
return (dat1 == dat2) ? dat1 : 0x00;
}
void main()
{
INT8U i,AD;INT16U d;
LCD_Initialise();
while(1)
{
AD=Get_AD_Result();
d=AD*5000.0/255.0;
Disp_Buff1[11]=d/1000%10+'0';
Disp_Buff1[12]=d/100%10+'0';
Disp_Buff1[14]=d/10%10+'0';
LCD_Show_String(0,0,Disp_Buff1);
i=(INT16U)AD*16/255;
memset(Disp_Buff2,'\xFF',i);
memset(Disp_Buff2+i,'\xDB',16-i);
LCD_Show_String(1,0,Disp_Buff2);
if(d>=45){LED1=0;LED2=1;LED3=1;}
else if(10<d<45){LED1=1;LED2=1;LED3=1;}
else if(5<d<10){LED1=1;LED2=0;LED3=1;}
else (d<5){LED1=1;LED2=1;LED3=0;SOUNDER=~SOUNDER}
}
}
|