原创 ADC0831+LCD1602显示

2008-10-28 17:04 4866 7 7 分类: MCU/ 嵌入式

https://static.assets-stash.eet-china.com/album/old-resources/2008/10/28/656f48c1-6b7b-44f3-89a3-825ea16d57db.rarADC0831+LCD1602显示


 


/*Chip:ADC0831
〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
Block Diagram
    __        __________
1-  CS ─—|。        |─—VCC -8
           |          |
2-IN(+)─—|   ADC    |─—CLK -7
           |   0831   |   
3-IN(-)─—|          |─—DO  -6
           |          |   
4- GND ─—|          |─—VRef-5
             ̄ ̄ ̄ ̄ ̄
〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
*/



#ifndef _ADC0831_1_H_
#define _ADC0831_1_H_


#include<intrins.h>


sbit AD_CS = P2^3;   //ADC0831与AT89S52的管脚接线定义
sbit AD_DO = P2^4;
sbit AD_CLK = P2^5;
unsigned int Temp;   //电压扩大1000倍
unsigned char VoltBuffer[7];//数据转化成液晶字符显示


unsigned char ADC_Conv(void)
{
 unsigned char i;
 unsigned char Data;
 AD_CLK = 0;
 AD_CS = 0;
 _nop_();
 AD_CLK = 1;
 _nop_();
 AD_CLK = 0; //第一个下降沿时钟信号,启动转换
 _nop_();
 AD_CLK = 1;
 _nop_();
 AD_CLK = 0; //第二个下降沿时钟信号,开始转换输出
 _nop_();
 for(i = 8; i > 0; i--)
 {
  Data <<= 1;   //左移1位 //Note:先移位,后置数
  if(AD_DO)
   Data++; //末尾位置加1  
  AD_CLK = 1;
  _nop_();
  AD_CLK = 0; //下一个下降沿
  _nop_();
 }
 AD_CS = 1;  //本次转换已经完成
 AD_CLK = 0; 
 for(i = 40; i > 0; i--)
 {
  _nop_(); //延迟时间,等待下次转换
 }
 return (Data); //返回转换结果
}


void Data_Conversion(void)
{
 unsigned char AD_Data;
 AD_Data=ADC_Conv();
 Temp=5.0/256*AD_Data*1000;
}
 
//数据转化成液晶字符显示
void Temp_To_String(void)

 Data_Conversion();
 VoltBuffer[0]=Temp/1000+'0';  //千位
 VoltBuffer[1]='.';     //小数点
 VoltBuffer[2]=Temp/100%10+'0';//百位
 VoltBuffer[3]=Temp/10%10+'0'; //十位
 VoltBuffer[4]=Temp%10+'0';   //个位
 VoltBuffer[5]='V';     //字符V 
 VoltBuffer[6]='\0';     //字符串结束标志符
}
/*---------------------------------*/
#endif


 


 


 



 

文章评论0条评论)

登录后参与讨论
我要评论
0
7
关闭 站长推荐上一条 /2 下一条