#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define delay4us() {_nop_();_nop_();_nop_();_nop_();}
//ADC0832Òý½Å¶¨Òå
sbit CS=P1^0;
sbit CLK=P1^1;
sbit DIO=P1^2;
//LCD1602 ¶Ë¿Ú¶¨Òå
sbit RS=P2^0;
sbit RW=P2^1;
sbit E=P2^2;
//ÒÔΪÕûÊý£¬Á½Î»Ð¡ÊýµÄÊý×ÖµçѹÏÔʾ»º³å
uchar Display_Buffer[]="0.00V";
//LCDµÚÒ»ÐÐÏÔʾµÄÐÅÏ¢
uchar code Line1[]="Current Voltage:";
//ÑÓʱ×Ó³ÌÐò
void DelayMS(uint ms)
{
uchar t;
while(ms--) for(t=0;t<120;t++);
}
//LCDæ״̬¼ì²â
bit LCD_Busy_Check()
{
bit result;
RS=0;RW=1;E=1;delay4us();result=(bit)(P0&0x80);E=0;
return result;
}
//ЩLCDÃüÁî
void LCD_Write_Command(uchar cmd)
{
while(LCD_Busy_Check());
RS=0;RW=0;E=0;_nop_();_nop_();P0=cmd;delay4us();
E=1;delay4us();E=0;
}
//ÉèÖÃLCDÏÔʾλÖÃ
void Set_Disp_Pos(uchar pos)
{
LCD_Write_Command(pos|0x80);
}
//дLCDÊý¾Ý
void LCD_Write_Data(uchar dat)
{
while(LCD_Busy_Check());
RS=1;RW=0;E=0;
P0=dat;delay4us();
E=1;delay4us();E=0;
}
//LCD³õʼ»¯
void LCD_Ini
tialise()
{
LCD_Write_Command(0x38);DelayMS(1);
LCD_Write_Command(0x0C);DelayMS(1);
LCD_Write_Command(0x06);DelayMS(1);
LCD_Write_Command(0x01);DelayMS(1);
}
//»ñÈ¡ADת»»½á¹û
uchar Get_AD_Result()
{
uchar 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;DIO=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|((uchar)(DIO)<<i);
CLK=1; _nop_();_nop_();
CLK=0; _nop_();_nop_();
}
CS=1;
}
void main()
{
uchar i;
uint d;
LCD_Initialise();
DelayMS(10);
while(1)
{
d=Get_AD_Result()*500.0/255 ;
Display_Buffer[0]=d/100+'0';
Display_Buffer[2]=d/10%10+'0';
Display_Buffer[3]=d%10+'0';
Set_Disp_Pos(0x01);
i=0;
while(Line1[i]!=' ')
LCD_Write_Data(Line1[i++]);
Set_Disp_Pos(0x46);
i=0;
while(Display_Buffer[i]!=' ')
LCD_Write_Data(Display_Buffer[i++]);
}
}
我不明白主程序其中的d=Get_AD_Result()*500.0/255 ;是什么意思 在PROTUSE中
仿真,给5V 显示0.01V 给0V显示0.00V 在2.25V事从0.00V变换为0.01V
求大神给予解答啊 还有我发现我对0832的理解还不够,能够给指点迷津吗···
-
#include<reg52.h> //°üº¬Í·Îļþ£¬Ò»°ãÇé¿ö²»ÐèÒª¸Ä¶¯£¬Í·Îļþ°üº¬ÌØÊ⹦ÄܼĴæÆ÷µÄ¶¨Òå
sbit RS = P0^5; //Pin4
sbit RW = P0^6; //Pin5
sbit EN = P0^7; //Pin6
unsigned char Display_Buffer[]="0.00V";
#define RS_CLR RS=0
#define RS_SET RS=1
#define RW_CLR RW=0
#define RW_SET RW=1
#define EN_CLR EN=0
#define EN_SET EN=1
/******************************************************************/
/* ΢ÃëÑÓʱº¯Êý */
/******************************************************************/
void delay_us(unsigned int n) //ÑÓʱ Èç¹ûÐèÒª¸ß¾«¶ÈÑÓʱ ÇëǶÈë»ã±à
{
if (n == 0)
{
return ;
}
while (--n);
}
/******************************************************************/
/* ºÁÃ뺯ÊýÉùÃ÷ */
/******************************************************************/
void delay_ms(unsigned char i)
{
unsigned char a, b;
for (a = 1; a < i; a++)
{
for (b = 1; b; b++)
{ ; }
}
}
/******************************************************************/
/* дÈëÃüÁÊý */
/******************************************************************/
void LCD_write_com(unsigned char com)
{
RS_CLR;
RW_CLR;
EN_SET;
P1 = com;
delay_us(5);
EN_CLR;
}
/******************************************************************/
/* дÈëÊý¾Ýº¯Êý */
/******************************************************************/
void LCD_write_Data(unsigned char Data)
{
RS_SET;
RW_CLR;
EN_SET;
P1 = Data;
delay_us(5);
EN_CLR;
}
/******************************************************************/
/* ÇåÆÁº¯Êý */
/******************************************************************/
void LCD_clear(void)
{
LCD_write_com(0x01);
delay_ms(5);}
/******************************************************************/
/* дÈë×Ö·û´®º¯Êý */
/******************************************************************/
void LCD_write_str(unsigned char x,unsigned char y,unsigned char *s)
{
if (y == 0)
{
LCD_write_com(0x80 + x);
}
else
{
LCD_write_com(0xC0 + x);
}
while (*s)
{
LCD_write_Data( *s);
s ++;
}
}
/******************************************************************/
/* дÈë×Ö½Úº¯Êý */
/******************************************************************/
void LCD_write_char(unsigned char x,unsigned char y,unsigned char Data)
{
if (y == 0)
{
LCD_write_com(0x80 + x);
}
else
{
LCD_write_com(0xC0 + x);
}
LCD_write_Data( Data);
}
/******************************************************************/
/* ³õʼ»¯º¯Êý */
/******************************************************************/
void LCD_init(void)
{
LCD_write_com(0x38); /*ÏÔʾģʽÉèÖÃ*/
delay_ms(5);
LCD_write_com(0x38);
delay_ms(5);
LCD_write_com(0x38);
delay_ms(5);
LCD_write_com(0x38);
LCD_write_com(0x08); /*ÏÔʾ¹Ø±Õ*/
LCD_write_com(0x01); /*ÏÔʾÇåÆÁ*/
LCD_write_com(0x06); /*ÏÔʾ¹â±êÒƶ¯ÉèÖÃ*/
delay_ms(5);
LCD_write_com(0x0C); /*ÏÔʾ¿ª¼°¹â±êÉèÖÃ*/
}
/******************************************************************/
/* Ö÷º¯Êý */
/******************************************************************/
void main(void)
{
unsigned char i;
delay_ms(100);
LCD_init();
while (1)
{
LCD_clear();
LCD_write_str(2,0,"Welcome to");
i=0;
while(Display_Buffer[i]!=' ')
LCD_write_str(2,1,Display_Buffer[i++]);
delay_ms(250);
}
}
····为什么会有错啊··求解答啊 求解答
一周热门 更多>