该程序的功能是通过AD读出数据,并且通过LCD显示出来
#include <reg52.h>
#include "./delay/delay.h"
#include "./delay/delay.h"
#define ERROR 1
#define SUCCESS 0
#define SUCCESS 0
sbit SCL = P2^0;
sbit SDA = P2^1;
sbit SDA = P2^1;
bit ack = 0;
sbit RS = P2^4;
sbit RW = P2^5;
sbit E = P2^6;
sbit RW = P2^5;
sbit E = P2^6;
#define LCDPORT P0
#define LCD_WRITE_DATA 1
#define LCD_WRITE_COM 0
#define LCD_WRITE_DATA 1
#define LCD_WRITE_COM 0
void lcd_write(unsigned char byte, unsigned char flag)
{
if(flag)
{
RS = LCD_WRITE_DATA;
}
else
{
RS = LCD_WRITE_COM;
}
RW = 0;
E = 1;
LCDPORT = byte;
delay_us(7);
E = 0;
}
{
if(flag)
{
RS = LCD_WRITE_DATA;
}
else
{
RS = LCD_WRITE_COM;
}
RW = 0;
E = 1;
LCDPORT = byte;
delay_us(7);
E = 0;
}
void lcd_init()
{
delay_ms(5);
lcd_write(0x38,LCD_WRITE_COM);
delay_ms(5);
lcd_write(0x38,LCD_WRITE_COM);
delay_ms(5);
lcd_write(0x38,LCD_WRITE_COM);
delay_ms(5);
lcd_write(0x08,LCD_WRITE_COM);
delay_ms(5);
lcd_write(0x01,LCD_WRITE_COM);
delay_ms(5);
lcd_write(0x06,LCD_WRITE_COM);
delay_ms(5);
lcd_write(0x0C,LCD_WRITE_COM);
}
{
delay_ms(5);
lcd_write(0x38,LCD_WRITE_COM);
delay_ms(5);
lcd_write(0x38,LCD_WRITE_COM);
delay_ms(5);
lcd_write(0x38,LCD_WRITE_COM);
delay_ms(5);
lcd_write(0x08,LCD_WRITE_COM);
delay_ms(5);
lcd_write(0x01,LCD_WRITE_COM);
delay_ms(5);
lcd_write(0x06,LCD_WRITE_COM);
delay_ms(5);
lcd_write(0x0C,LCD_WRITE_COM);
}
void lcd_display(unsigned char x,unsigned char y,unsigned byte)
{
if(y == 0)
{
lcd_write(0x80 + (unsigned int)x*0x01,LCD_WRITE_COM);
lcd_write(byte,LCD_WRITE_DATA);
}
else
{
lcd_write(0x80 + 0x40 + (unsigned int)x*0x01,LCD_WRITE_COM);
lcd_write(byte,LCD_WRITE_DATA);
}
}
{
if(y == 0)
{
lcd_write(0x80 + (unsigned int)x*0x01,LCD_WRITE_COM);
lcd_write(byte,LCD_WRITE_DATA);
}
else
{
lcd_write(0x80 + 0x40 + (unsigned int)x*0x01,LCD_WRITE_COM);
lcd_write(byte,LCD_WRITE_DATA);
}
}
void lcd_write_str(unsigned char x,unsigned char y,unsigned char *s)
{
while(*s != '\0')
{
lcd_write(0x80 + x + y,LCD_WRITE_COM);
lcd_write(*s ,LCD_WRITE_DATA);
s++;
}
}
{
while(*s != '\0')
{
lcd_write(0x80 + x + y,LCD_WRITE_COM);
lcd_write(*s ,LCD_WRITE_DATA);
s++;
}
}
void lcd_str_display(unsigned char x,unsigned char y,unsigned char *s)
{
while(*s != '\0')
{
lcd_display(x++,y,*s);
s++;
}
}
{
while(*s != '\0')
{
lcd_display(x++,y,*s);
s++;
}
}
void iic_start()
{
SDA = 1;
SCL = 1;
delay_us(1);
SDA = 0;
delay_us(1);
SCL = 0;
}
{
SDA = 1;
SCL = 1;
delay_us(1);
SDA = 0;
delay_us(1);
SCL = 0;
}
void iic_stop()
{
SDA = 0;
SCL = 1;
delay_us(1);
SDA = 1;
delay_us(1);
SCL = 0;
}
{
SDA = 0;
SCL = 1;
delay_us(1);
SDA = 1;
delay_us(1);
SCL = 0;
}
bit iic_send_byte(unsigned char byte)
{
unsigned char i;
for(i = 0; i < 8; i++)
{
SDA = byte & 0x80;
SCL = 1;
delay_us(1);
SCL = 0;
byte <<= 1;
}
SCL = 1;
SDA = 1;
delay_us(1);
if(0 == SDA)
{
ack = 1;
}
else
{
ack = 0;
}
SCL = 0;
return ack;
}
{
unsigned char i;
for(i = 0; i < 8; i++)
{
SDA = byte & 0x80;
SCL = 1;
delay_us(1);
SCL = 0;
byte <<= 1;
}
SCL = 1;
SDA = 1;
delay_us(1);
if(0 == SDA)
{
ack = 1;
}
else
{
ack = 0;
}
SCL = 0;
return ack;
}
unsigned char iic_recv_byte()
{
unsigned char temp = 0;
unsigned char i;
unsigned char a;
SDA = 1;
for(i = 0; i < 8; i++)
{
SCL = 0;
delay_us(1);
SCL = 1;
if(SDA)
{
a = 0x01;
}
else
{
a = 0;
}
temp |= (a << (7 - i));
delay_us(1);
}
SCL = 0;
return temp;
}
{
unsigned char temp = 0;
unsigned char i;
unsigned char a;
SDA = 1;
for(i = 0; i < 8; i++)
{
SCL = 0;
delay_us(1);
SCL = 1;
if(SDA)
{
a = 0x01;
}
else
{
a = 0;
}
temp |= (a << (7 - i));
delay_us(1);
}
SCL = 0;
return temp;
}
void iic_ack()
{
SDA = 0;
SCL = 1;
delay_us(1);
SCL = 0;
}
{
SDA = 0;
SCL = 1;
delay_us(1);
SCL = 0;
}
void iic_noack()
{
SDA = 1;
SCL = 1;
delay_us(1);
SCL = 0;
}
{
SDA = 1;
SCL = 1;
delay_us(1);
SCL = 0;
}
unsigned char AD_Read()
{
unsigned char temp;
iic_start();
iic_send_byte(0x90);
if(0 == ack)
{
return ERROR;
}
iic_send_byte(0x40);
if(0 == ack)
{
return ERROR;
}
iic_start();
iic_send_byte(0x90 + 1);
if(0 == ack)
{
return ERROR;
}
temp = iic_recv_byte();
iic_noack();
iic_stop();
return temp;
}
{
unsigned char temp;
iic_start();
iic_send_byte(0x90);
if(0 == ack)
{
return ERROR;
}
iic_send_byte(0x40);
if(0 == ack)
{
return ERROR;
}
iic_start();
iic_send_byte(0x90 + 1);
if(0 == ack)
{
return ERROR;
}
temp = iic_recv_byte();
iic_noack();
iic_stop();
return temp;
}
void lcd_char_sel(unsigned char num)
{
lcd_write(0x40, LCD_WRITE_COM);
lcd_write(0x0,LCD_WRITE_DATA);
lcd_write(0x0,LCD_WRITE_DATA);
lcd_write(0x0a,LCD_WRITE_DATA);
lcd_write(0x0,LCD_WRITE_DATA);
lcd_write(0x0,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x0e,LCD_WRITE_DATA);
lcd_write(0x0,LCD_WRITE_DATA);
lcd_write(0x80 + 0x40, LCD_WRITE_COM);
lcd_write(0x0,LCD_WRITE_DATA);
lcd_write(0x40 + 8, LCD_WRITE_COM);
lcd_write(0x04,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x80 + 0x40 + 1, LCD_WRITE_COM);
lcd_write(0x40 + 16, LCD_WRITE_COM);
lcd_write(0x04,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x80 + 0x40 + 1, LCD_WRITE_COM);
lcd_write(0x40 + 24, LCD_WRITE_COM);
lcd_write(0x04,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x80 + 0x40 + 1, LCD_WRITE_COM);
lcd_write(0x40 + 32, LCD_WRITE_COM);
lcd_write(0x04,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x80 + 0x40 + 1, LCD_WRITE_COM);
lcd_write(0x40 + 40, LCD_WRITE_COM);
lcd_write(0x04,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x80 + 0x40 + 1, LCD_WRITE_COM);
lcd_write(0x40 + 48 , LCD_WRITE_COM);
lcd_write(0x04,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x80 + 0x40 + 1, LCD_WRITE_COM);
if(num == 0)
{
lcd_write(0x1,LCD_WRITE_DATA);
}
if(num == 1)
{
lcd_write(0x2,LCD_WRITE_DATA);
}
if(num == 2)
{
lcd_write(0x3,LCD_WRITE_DATA);
}
if(num == 3)
{
lcd_write(0x4,LCD_WRITE_DATA);
}
if(num == 4)
{
lcd_write(0x5,LCD_WRITE_DATA);
}
if(num == 5)
{
lcd_write(0x6,LCD_WRITE_DATA);
}
}
{
lcd_write(0x40, LCD_WRITE_COM);
lcd_write(0x0,LCD_WRITE_DATA);
lcd_write(0x0,LCD_WRITE_DATA);
lcd_write(0x0a,LCD_WRITE_DATA);
lcd_write(0x0,LCD_WRITE_DATA);
lcd_write(0x0,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x0e,LCD_WRITE_DATA);
lcd_write(0x0,LCD_WRITE_DATA);
lcd_write(0x80 + 0x40, LCD_WRITE_COM);
lcd_write(0x0,LCD_WRITE_DATA);
lcd_write(0x40 + 8, LCD_WRITE_COM);
lcd_write(0x04,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x80 + 0x40 + 1, LCD_WRITE_COM);
lcd_write(0x40 + 16, LCD_WRITE_COM);
lcd_write(0x04,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x80 + 0x40 + 1, LCD_WRITE_COM);
lcd_write(0x40 + 24, LCD_WRITE_COM);
lcd_write(0x04,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x80 + 0x40 + 1, LCD_WRITE_COM);
lcd_write(0x40 + 32, LCD_WRITE_COM);
lcd_write(0x04,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x80 + 0x40 + 1, LCD_WRITE_COM);
lcd_write(0x40 + 40, LCD_WRITE_COM);
lcd_write(0x04,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x11,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x80 + 0x40 + 1, LCD_WRITE_COM);
lcd_write(0x40 + 48 , LCD_WRITE_COM);
lcd_write(0x04,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x1f,LCD_WRITE_DATA);
lcd_write(0x80 + 0x40 + 1, LCD_WRITE_COM);
if(num == 0)
{
lcd_write(0x1,LCD_WRITE_DATA);
}
if(num == 1)
{
lcd_write(0x2,LCD_WRITE_DATA);
}
if(num == 2)
{
lcd_write(0x3,LCD_WRITE_DATA);
}
if(num == 3)
{
lcd_write(0x4,LCD_WRITE_DATA);
}
if(num == 4)
{
lcd_write(0x5,LCD_WRITE_DATA);
}
if(num == 5)
{
lcd_write(0x6,LCD_WRITE_DATA);
}
}
void main()
{
unsigned int temp;
unsigned char num;
lcd_init();
while(1)
{
temp = AD_Read();
num = ((temp * 100) / 51) / 100;
delay_ms(20);
lcd_display(0,0,(temp / 100) + 0x30);
lcd_display(1,0,((temp % 100)/10) + 0x30);
lcd_display(2,0,(temp % 10) + 0x30);
lcd_display(4,0,(((temp * 100) / 51) / 100) + 0x30);
lcd_display(5,0,'.');
lcd_display(6,0,((((temp * 100) / 51) % 100)/10) + 0x30);
lcd_display(7,0,(((temp * 100) / 51) % 10) + 0x30);
lcd_display(8,0,'V');
if(temp < 255)
{
lcd_display(6,1,' ');
lcd_display(3,1,((temp*100/255)%100)/10 + 0x30);
lcd_display(4,1,(temp*100/255)%10 + 0x30);
lcd_display(5,1,'%');
}
if(temp == 255)
{
lcd_display(3,1,(temp*100/255)/100 + 0x30);
lcd_display(4,1,((temp*100/255)%100)/10 + 0x30);
lcd_display(5,1,(temp*100/255)%10 + 0x30);
lcd_display(6,1,'%');
}
lcd_char_sel(num);
}
}
{
unsigned int temp;
unsigned char num;
lcd_init();
while(1)
{
temp = AD_Read();
num = ((temp * 100) / 51) / 100;
delay_ms(20);
lcd_display(0,0,(temp / 100) + 0x30);
lcd_display(1,0,((temp % 100)/10) + 0x30);
lcd_display(2,0,(temp % 10) + 0x30);
lcd_display(4,0,(((temp * 100) / 51) / 100) + 0x30);
lcd_display(5,0,'.');
lcd_display(6,0,((((temp * 100) / 51) % 100)/10) + 0x30);
lcd_display(7,0,(((temp * 100) / 51) % 10) + 0x30);
lcd_display(8,0,'V');
if(temp < 255)
{
lcd_display(6,1,' ');
lcd_display(3,1,((temp*100/255)%100)/10 + 0x30);
lcd_display(4,1,(temp*100/255)%10 + 0x30);
lcd_display(5,1,'%');
}
if(temp == 255)
{
lcd_display(3,1,(temp*100/255)/100 + 0x30);
lcd_display(4,1,((temp*100/255)%100)/10 + 0x30);
lcd_display(5,1,(temp*100/255)%10 + 0x30);
lcd_display(6,1,'%');
}
lcd_char_sel(num);
}
}