#include<reg51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
//#define LCD_DATA P0;
sbit DI = P3^4;//¶¨òåADC¸÷¿úêy¾Y
sbit D0 =P3^4;
sbit CLK = P3^5;
sbit CS = P3^6;
sbit LCD_RS= P1^0;//¶¨òåLCDòy½Å
sbit LCD_RW= P1^1;
sbit LCD_E= P2^5;
uchar code DIS[]={"voltage:"};//ADC832;
uchar code dsptab[]={'0','1','2','3','4','5','6','7','8','9'};//×Ö·û′úÂë±í;
/*--------------------Ñóê±×ó3ìDò------------------------*/
void delay(uint a)
{
uint b;
for(b=0;b<a;b++);
}
void delay400ms(void)////400msÑóê±
{
uchar a = 5;
uint b;
while(a--)
{
b=7269;
while(b--);
}
} /*---------------------------¶á×′ì¬-----------------------*/
//¶á×′ì¬×ó3ìDò£»óD·μ»ØÖμ£»·μ»ØÖμààDíÎaCHARDí;
//¶á»ØμÄ×′ì¬í¨1yRETURN·μ»Ø;
uchar read_estate(void) //¶¨òåóD·μ»ØÖμμÄoˉêy;
{
P0=0Xff; //°ÑLCD¶Ë¿úè«ÖÃ1·½±ã¶áè¡DÅoÅ;
LCD_RS=0; //RSÖÃ0;
LCD_RW=1; //RWÖÃ1;
LCD_E=0; //E¶ËÖÃ0;
delay(10); //¶ìÑóê±;
LCD_E=1; //E¶ËÖÃ1;òÔËø′æêy¾Y;
while(P0&0x80); //¼ì2aÃ|,Ôòò»Ö±Ñ-»·;
return(P0); //·μ»Ø¶áè¡μÄDÅoÅ;
}
/*----------------------------D′êy¾Y---------------------------*/
//D′êy¾Y×ó3ìDò;ÎT·μ»ØÖμ;êäèë±äá¿I;
//IÎaòaD′èëLCDÖDμÄêy¾Y;
//êy¾YààDíCHARDí;
void write_data(uchar i) //¶¨òåêäèë±äá¿ÖμI;
{
read_estate(); //¼ì2aÃ|DÅoÅ;
P0=i; //°ÑIÖDêy¾YËíμ½LCDêy¾Y¶Ë;
LCD_RS=1; //RSÖÃ1;
LCD_RW=0; //RWÖÃ0;
LCD_E=0; //EÖÃ0;
delay(10); //¶ìÑóê±;
LCD_E=1; //E¶ËÖÃ1;òÔËø′æêy¾Y;
}
/*------------------------------D′Ö¸áî--------------------------*/
//D′Ö¸áî×ó3ìDò;ÎT·μ»ØÖμ;êäèëὸö±äá¿IoíJ.
//IòaD′èëLCDμÄÖ¸áî;JÎaÅD¶Ïòa2»òa¼ì2aÃ|.
//èç1ûJÎa0Ôò2»ÅD¶Ï¼ì2aÃ|;
//èç1ûJÎa1ÔòÅD¶Ï¼ì2aÃ|;
void write_dictate(uchar i,j) //¶¨òåὸö±äá¿;
{
if(j)read_estate(); //¸ù¾YDèòa¼ì2aÃ|;
P0=i; //°ÑòaD′èëμÄêy¾YËíμ½LCDêy¾Y¶Ë;
LCD_RS=0; //RSÖÃ0;
LCD_RW=0; //RWÖÃ0;
LCD_E =1; //E¶ËÖÃ0;
delay(10); //Ñóê±;
LCD_E =0; //E¶ËÖÃ1;òÔËø′æêy¾Y;
}
/*------------------------------¶áêy¾Y---------------------*/
//¶áêy¾Y×ó3ìDò;óD·μ»ØÖμ,·μ»ØÖμààDíÎaCHARDí;
/*uchar read_data(void) //¶¨òåóD·μ»ØÖμμÄ×óoˉêy;
{
LCD_DATA=0Xff; //LCDêy¾Y¶Ë¿úÖÃ1;
LCD_RS=1; //RSÖÃ1;
LCD_RW=1; //RWÖÃ1;
LCD_E=0; //EÖÃ0;
delay(10); //¶ìÑóê±;
LCD_E=1; //EÖÃ1;òÔËø′æêy¾Y;
return(LCD_DATA); //·μ»Ø¶áè¡μÄÖμ;
}
/*----------------------------3õê¼»ˉ-----------------------*/
//LCD3õê¼»ˉ3ìDò;Ö÷òa×÷óÃ3õê¼»ˉLCD,¶ÔLCD½øDD¸′λòÔ¼°éèÖÃ;
void initialization(void) //¶¨òåoˉêy;
{
delay(50); //Ñóê±5MS;
write_dictate(0x38,0); //D′Ö¸áî38H;2»¼ì2aÃ|;
delay(50); //Ñóê±5MS;
write_dictate(0x38,0); //D′Ö¸áî38H;2»¼ì2aÃ|;
delay(50); //Ñóê±5MS;
write_dictate(0x38,0); //D′Ö¸áî38H;2»¼ì2aÃ|;
delay(50);
write_dictate(0x38,1); //ÏÔê¾Ä£ê½éèÖÃ;¼ì2aÃ|;
write_dictate(0x08,1); //1رÕÏÔê¾;¼ì2aÃ|;
write_dictate(0x01,1); //ÏÔê¾ÇåÆá;¼ì2aÃ|;
write_dictate(0x06,1); //ÏÔê¾1a±êòƶˉéèÖÃ;¼ì2aÃ|;
write_dictate(0x0C,1); //ÏÔ꾿a1ؼ°1a±êéèÖÃ;¼ì2aÃ|;
}
/*---------------------------ÔúÖ¸¶¨Î»ÖÃÏÔê¾ò»¸ö×Ö·û----------------------*/
void displayonechar(uchar x, y,ddata)
{
y &= 0x01;
x &= 0x0f; //ÏTÖÆX2»Äü′óóú15,Y2»Äü′óóú1
if (y) x+= 0x40; //μ±òaÏÔê¾μú¶tDDê±μØÖ·Âë+0x40;
x+= 0x80; //Ëã3öÖ¸áîÂë
write_dictate(x,0); //Õaàï2»¼ì2aÃ|DÅoÅ,·¢ËíμØÖ·Âë
write_data(ddata);
}
/*-------------------------ÔúÖ¸¶¨Î»ÖÃÏÔê¾ò»′®×Ö·û--------------*/
void displaylistchar(uchar x,y,uchar code *ddata)
{
uchar a=0;
y&=0x01;
x&=0xf;
while(ddata[a]>0x20)
{
if(x<=0xff)
{
displayonechar(x, y,ddata[a]);
a++;
x++;
}
}
}
/*-------------------------------¶áADC0832μÄêy¾Y----------------------------*/
unsigned char readadc(void)
{
unsigned char dat,i;
CLK=0; //D¾Æ¬¸′λ
CS=1;
_nop_();
CS=0;
_nop_();
DI=1; //Æô¶ˉλ
CLK=1;
_nop_();
CLK=0;
DI=1; //ÅäÖÃλ1
CLK=1;
_nop_();
CLK=0;
DI=0; //ÅäÖÃλ2
CLK=1;
_nop_();
CLK=0; //¿ÕÏDλ
_nop_();
CLK=1;
DI=1;
for(i=0;i<=8;i++){ //¶á3ö8×Ö½úêy¾Y
dat=dat<<1;
_nop_();
CLK=1;//ÕaàïòaÏè1oó0...èç1ûÏè0oó1Ôòêä3ö½á1û′íÎó...
if(DI){
dat|=0x01;
}
_nop_();
CLK=0;
}
CS=1;//1رÕD¾Æ¬
return(dat);//·μ»Øêy¾Y
}
void main()
{ uint dat;
delay400ms();//Ñóê±400MS
initialization();//LCD¸′λ;
displaylistchar(0,0,DIS);//ÏÔê¾ADC832 2aêÔ;
displayonechar(0,1,'O'); //ÔúLCDêÇÏÔê¾OUT:_.___V
displayonechar(1,1,'U');
displayonechar(2,1,'T');
displayonechar(3,1,':');
displayonechar(5,1,'.');
displayonechar(8,1,'V');
while(1)//ÎTÏTÑ-»·...ò»Ö±¶á3öμçÑ1ÖμÏÔê¾ÔúLCDéÏ;
{ displayonechar(13,1,dsptab[readadc()/100]);
displayonechar(14,1,dsptab[(readadc()%100)/10]);
displayonechar(15,1,dsptab[readadc()%10]);//ÔúLCD×îóò±ßÏÔê¾255ÖDμÄÄ3ò»¸öêy¾Y;
dat=readadc()/0.542;//0.542êÇ2553yòÔ»ù×¼μçÑ1ò2¾íêÇADC0832μÄVCC...μÿ′3öà′...Õa¸öÖμ¿éÄüÿ¸öèË2»í¬.
displayonechar(4,1,dsptab[dat/100]);//ÏÂÃæèyDDÏÔê¾μçÑ1...
displayonechar(6,1,dsptab[(dat%100)/10]);
displayonechar(7,1,dsptab[dat%10]);
delay400ms();//Ñóê±400MS
}
}
|