完整版 电路图和程序代码 下载地址
https://pan.baidu.com/s/1V2qSieymT4937UdFhVZfmA?pwd=8888
部分代码展示
#include <reg52.h>
#include <intrins.h>
#include <stdio.h>
#define uint unsigned int
#define uchar unsigned char
sbit RS = P2^0;
sbit RW = P2^1;
sbit E = P2^2;
sbit AD0832_CS = P2^3 ; //片选信号
sbit AD0832_CLK = P2^4; //时钟接口
sbit AD0832_DI = P2^5; //数据接口
sbit distance_check = P2^6; //热释电模拟接口
sbit BELL = P3^7; //无源蜂鸣器控制IO
sbit LED = P2^7; //定时器指示灯
uchar num=0,Miao=0,Fen=0,Check_falge=0;
uchar Display_Buffer[] = "0.00V";
uchar code Line1[] = "PRE:";
uchar Line2[] = "T: 00:00";
uchar Line3[] = " 0.00V";
void DelayMS(uint ms)
{
uchar i;
while(ms--)
{
for(i=0;i<120;i++);
}
}
void delay4us()
{
_nop_();
_nop_();
_nop_();
_nop_();
}
bit LCD_Busy_Check()
{
bit result;
RS = 0;
RW = 1;
E = 1;
delay4us();
result = (bit)(P0&0x80);
E = 0;
return result;
}
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;
}
void Set_Disp_Pos(uchar pos)
{
LCD_Write_Command(pos | 0x80);
}
void LCD_Write_Data(uchar dat)
{
while(LCD_Busy_Check());
RS = 1;
RW = 0;
E = 0;
P0 = dat;
delay4us();
E = 1;
delay4us();
E = 0;
}
void LCD_Initialise()
{
LCD_Write_Command(0x38); DelayMS(1);
LCD_Write_Command(0x0c); DelayMS(1);
LCD_Write_Command(0x06); DelayMS(1);
LCD_Write_Command(0x01); DelayMS(1);
}
uchar GetAD0832(bit Channel)
{
uchar i=0 , Data1 =0 , Data2 = 0 ;
AD0832_CLK = 0 ; //时钟置低平//时钟12Mhz, 整个转换时间为224us //使用芯片准备(参考PDF时序图)
AD0832_DI = 1 ; //开始信号为高电平
AD0832_CS = 0 ; //片选信号置低,启动AD转换芯片
AD0832_CLK = 1 ; //输入开始信号(构成一个正脉冲),时钟上升沿,输入开始信号
AD0832_CLK = 0 ; //时钟下降沿
//模拟信号输入模式选择(1:单模信号,0:双模差分信号)
AD0832_DI = 1 ;
AD0832_CLK = 1 ; //时钟上升沿,输入开始信号
AD0832_CLK = 0 ; //时钟下降沿
//模拟信号输入通道选择(1:通道CH1,0:通道CH0)
AD0832_DI = Channel ; //选择通道0
AD0832_CLK = 1 ; //时钟上升沿,输入开始信号
AD0832_CLK = 0 ; //时钟下降沿
AD0832_DI = 1 ; //数据线置高,准备接收数据
for(i=0;i<8;i++) //从高位移入数据
{
AD0832_CLK = 1 ;
AD0832_CLK = 0 ; //时钟下降沿,AD0832输出数据,高位(MSB)先
Data1 = Data1<<1; //数据左移位,补0
if(AD0832_DI ==1)
{Data1 = Data1 | 0x01;} //如果数据为"1",移入1,
} //如果数据为"0",移入0,
for(i=0;i<8;i++) //从低位移入数据
{
Data2 = Data2>>1; //数据左移位,补0
if(AD0832_DI ==1)
{Data2 = Data2 | 0x80;} //如果数据为"1",移入1如果数据为"0",移入0,
AD0832_CLK = 1 ;
AD0832_CLK = 0 ; //时钟下降沿,AD0832输出数据,高位(MSB)先
}
//数据线置高,释放总线,完成一次转换
AD0832_CLK = 1 ;
AD0832_DI = 1 ;
AD0832_CS = 1 ;
if(Data1==Data2) //输出
{
return Data2;
}
}