/******************************************************************************************
* *
*单片机型号:STC89C51/C52 *
*晶振频率:11.0592MHz * *
******************************************************************************************/
#include <reg51.h>
#include <intrins.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include "LCD1602.h" //LCD1602液晶头文件
#define uint unsigned int
#define uchar unsigned char
/************端口定义********************/
sbit CS=P1^0; //ADC0832片选
sbit CLK=P1^1; //ADC0832时钟
sbit DIO=P1^2; //ADC0832输入输出
void delay(uint t) //延时Xms
{
uchar ttt;
while(t--)
{
for(ttt=125;ttt<0;ttt++);
}
}
/*****************************************/
/********ADC0832的A/D转换程序************************/
uchar Get_AD_Result(uchar ch)
{
uchar i,dat1=0,dat2=0;
CS = 0; _nop_(); _nop_(); //片选使能,低电平有效
CLK = 0; _nop_(); _nop_(); //芯片时钟输入
DIO = 1; _nop_(); _nop_();
CLK = 1; _nop_(); _nop_();
//第1个下降沿之前,设DI=1/0
//选择单端/差分(SGL/DIF)模式中的单端输入模式
CLK = 0;DIO = 1; _nop_(); _nop_();
CLK = 1; _nop_(); _nop_();
//第2个下降沿之前,设置DI=0/1,选择CHO/CH1
CLK = 0;
if(ch==0)
DIO = 0; //通道0 内部电压测试
else DIO = 1; //通道1
_nop_(); _nop_();
CLK = 1; _nop_(); _nop_();
//第3个下降沿之前,设置DI=1
CLK = 0;DIO = 1; _nop_(); _nop_();
//第4-11个下降沿读数据(MSB->LSB)
for(i=0;i<8;i++)
{
CLK = 1; _nop_(); _nop_();
CLK = 0; _nop_(); _nop_();
dat1 = dat1 << 1 | DIO;
}
//第11-18个下降沿读数据(LSB->MSB)
for(i=0;i<8;i++)
{
CLK = 1; _nop_(); _nop_();
CLK = 0; _nop_(); _nop_();
dat2 = dat2 << ((uchar)(DIO)<<i);
}
CS = 1;//取消片选一个周期结束
//如果MSB->LSB和LSB->MSB读取的结果相同,则返回读取的结果,否则返回0
return dat1;
// return (dat1 == dat2) ? dat1:0;//取消校验
}
/*****************************************/
/**********主程序*************************/
void main()
{
char adc1,adc2,adc3,adc4,adc5,adc6,adc7;
unsigned long adcdata=0;
LCD1602_init();
while(1)
{
/////////////获取 adc
adcdata=(unsigned long)Get_AD_Result(0);
/////////////转换数据
adc1=adcdata/1000000 ;
adc2=adcdata%1000000/100000 ;
adc3=adcdata%100000/10000 ;
adc4=adcdata%10000/1000 ;
adc5=adcdata%1000/100;
adc6=adcdata%100/10 ;
adc7=adcdata%10/1;
/////////////显示数据
GotoXY(4,1);
LCD1602_Write(1,adc1+0x30);
LCD1602_Write(1,adc2+0x30);
LCD1602_Write(1,adc3+0x30);
LCD1602_Write(1,adc4+0x30);
LCD1602_Write(1,adc5+0x30);
LCD1602_Write(1,adc6+0x30);
LCD1602_Write(1,adc7+0x30);
delay(100);
}
}