原创 AD7705应用 又C51源程序

2007-10-25 09:55 4679 6 7 分类: 汽车电子

#include<reg52.h>
#include<absacc.h>
#include<intrins.h>
#include<math.h>
 
sbit Number_BIT0 = P2^7;
sbit Number_BIT1 = P2^6;
sbit Number_BIT2 = P2^5;
sbit Number_BIT3 = P2^4;
sbit BUZZER = P2^3;


sbit AD7705_DATA=P3^0;       // AD7705 input & output data
sbit AD7705_CLK=P3^1;        // AD7705 CLK


sbit AD7705_DRDY=P1^2;       // AD7705 data ready
sbit AD7705_CS  =P1^3;       // AD7705 CS


unsigned char Counter,dis_index,dis_digit;
float T_Voltage;
unsigned char MSB_Data,LSB_Data,temp0,temp1,temp2,temp3,temp4,temp5;


unsigned char code Display_code[11]=
//{0xa0,0xF9,0xc4,0xd0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF,};
{0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF};


void Delayms(unsigned char ms);
void AD7705_Start();
void AD7705_Read ();
void AD7705_Write_Reg(unsigned char Data_byte);
unsigned char AD7705_Read_Reg();


main()
{
 TMOD = 0x11;
 IT0 = 1;
 PCON=0X00;
 ET0 = 1;
 TH1 = 0xFC;
 TL1 = 0x17;
    TR0 = 1;
        
 EA = 1; 
 P0 = 0xff; P1 = 0xff; P2 = 0xf7; P3 = 0xff;
 dis_digit = 0x77;
 dis_index = 0;
 Counter  = 0;
 AD7705_Start();
 
 while(1)
 {
 while(AD7705_DRDY);
    AD7705_Read();
 Delayms(50);
 }
}


void Delayms(unsigned char ms) 
// relay ms
{ unsigned char i;
 while(ms--)
 {
  for(i = 0; i < 120; i++);
 }
}


void AD7705_Start()
{
 AD7705_Write_Reg(0x20);
 AD7705_Write_Reg(0x0c);
 AD7705_Write_Reg(0x10);
 AD7705_Write_Reg(0x44);
}
/*****************************************/
void AD7705_Read()
{
 AD7705_Write_Reg(0x38);
 MSB_Data = AD7705_Read_Reg();
 LSB_Data = AD7705_Read_Reg();
 T_Voltage =(float)MSB_Data;
 T_Voltage = T_Voltage*100;
 T_Voltage = T_Voltage + (float)LSB_Data;


 temp0 = T_Voltage/100000;
 temp1 = ((T_Voltage-temp0*100000)/10000);
 temp2 = ((T_Voltage-temp0*100000-temp1*10000)/1000);
 temp3 = ((T_Voltage-temp0*100000-temp1*10000-temp2*1000)/100);
 temp4 = (T_Voltage-temp0*100000-temp1*10000-temp2*1000-temp3*100)/10;
 temp5 = (T_Voltage-temp0*100000-temp1*10000-temp2*1000-temp3*100-temp4*10);


}
/*******************************************/


void AD7705_Write_Reg(unsigned char Data_byte)

 unsigned char i;
 AD7705_CS = 0;
 AD7705_CLK = 1;
        _nop_();
  _nop_();
 for(i = 0; i < 8; i++) 
 {
     AD7705_DATA = (bit)(Data_byte & 0x80);
  AD7705_CLK = 0;
        _nop_();
  _nop_();
  _nop_();
  AD7705_CLK = 1;
      
     Data_byte <<= 1;
 }
  _nop_();
  AD7705_CS = 1;
}
unsigned char AD7705_Read_Reg()

 unsigned char i,Data_read;
 AD7705_CS = 0;
 AD7705_CLK = 1;
     _nop_();
 for(i = 0; i < 8; i++) 
 {
     AD7705_CLK = 0;
        _nop_();
     _nop_();
  Data_read <<= 1;
  Data_read |= (unsigned char)AD7705_DATA;
  _nop_();
  _nop_();
        AD7705_CLK = 1;
        _nop_();
     _nop_();
 }
   _nop_();
  AD7705_CS = 1;
  AD7705_DRDY = 1;
  return(Data_read);
}


void time0(void) interrupt 1
{
 TR0 = 0;
 P2 = dis_digit;   //P2.7 --DS8
 P0 = Display_code[dis_index];
   
 TH0 = 0xFC;
 TL0 = 0x17;
 Counter++;
 if(Counter==1)
 {
 dis_digit = 0x77;
  dis_index = temp5;
    }else if(Counter==2)
 {
 dis_digit = 0xb7;
  dis_index = temp4;
 }else if(Counter==3)
 {
 dis_digit = 0xd7;
  dis_index = temp3;
 }else if(Counter==4)
 {
 dis_digit = 0xe7;
  dis_index = temp2;
 Counter = 0;
 }
 
    TR0 = 1;
}


转自:驭刀降佛之火浪汤B

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户1630788 2012-10-16 16:16

不错很好 可以试用 谢谢分享~

用户382650 2008-1-9 21:51

看了,参考一下,谢了
相关推荐阅读
用户66603 2007-12-04 16:13
Proteus 自建元件库
一、Proteus VSM仿真模型简介    在使用Proteus仿真单片机系统的过程中,经常找不到所需的元件,这就需要自己编写。Proteus VSM的一个主要特色是使用基于DLL组件模型的可扩展性...
用户66603 2007-11-26 15:17
Keil和Proteus之间的通信设置
如何在keil中调用proteus进行MCU外围器件的仿真!         proteus 6.9以前的版本  1、安装keil c51 与 proteus   2、把proteus安装目录下MOD...
用户66603 2007-11-26 12:51
QQ空间的几个好工具
刷人气回复...
用户66603 2007-11-23 13:26
volatile的用法
volatile的本意是“易变的” 由于访问寄存器的速度要快过RAM,所以编译器一般都会作减少存取外部RAM的优化。比如:static int i="0";int main(void){...whil...
用户66603 2007-11-14 16:16
WORD技巧60例分享
1、 Word表格自动填充  在Word表格里选中要填入相同内容的单元格,单击“格式→项目符号和编号”,进入“编号”选项卡,选择任意一种样式,单击“自定义”按钮,在“自定义编号列表”窗口中“编号格式”...
用户66603 2007-11-14 15:24
C51问答
一、#pragma asm是什么意思? #pragma asmMOV P1,R7NOPNOPMOV P1,#0#pragma endasm实际上就是一个在C51中内嵌汇编语言的开关  二、一个 hex...
EE直播间
更多
我要评论
1
6
关闭 站长推荐上一条 /3 下一条