adc0832问题
时间:10-02
整理:3721RD
点击:
编写程序仿真 通道0能行 换成通道1就不信 为什么?
#include<reg51.h>
#include<intrins.h>
#include<string.h>
#define INT8U unsigned char
#define INT16U unsigned int
//DAC0832
sbit CS=P1^0;
sbit CLK=P1^1;
sbit DIO=P1^2;
//1602
sbit RS=P2^0;
sbit RW=P2^1;
sbit E=P2^2;
#define LCD_PORT P0
INT8U Disp_Buff1[]=" VOLTAGE: 0.00V";
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<16) Write_LCD_Data(s[i++]);
}
//液晶初始化
void LCD_Initialise()
{
Write_LCD_Command(0x38); delay_ms(1);
Write_LCD_Command(0x0c); delay_ms(1);
Write_LCD_Command(0x06); delay_ms(1);
Write_LCD_Command(0x01); delay_ms(1);
}
//获取AD转换结果
INT8U Get_AD_Result()
{
INT8U i,dat1=0,dat2=0;
CS=0;_nop_();
_nop_();CLK=0;_nop_();
_nop_();
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_();
//CLK = 1; _nop_(); _nop_(); // 新
//CLK = 0; _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;DIO = 1;CLK=1;
return(dat1==dat2)?dat1 : 0x00;
}
void main()
{
INT8U i,AD;INT16U d;
LCD_Initialise();
delay_ms(10);
while(1)
{
AD= Get_AD_Result();
d=AD*500.0*2/511.0;
Disp_Buff1[11]=d/100 +'0';
Disp_Buff1[13]=d/10%10 +'0';
Disp_Buff1[14]=d%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);
}
}