⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ad1674.c

📁 12bitAD转换芯片AD1674的应用
💻 C
字号:
#include <absacc.h>  //  包含头文件
#include <reg51.h>
#include <intrins.h>

//#define   ad1674       XBYTE[0x7FFF] //	CS0 的片选地址
#define   cmd8279      XBYTE[0x3FFF] //定义外部命令口
#define   data8279     XBYTE[0x3FFE] //定义外部数据口

#define   LED_MOD      0x10   //定义显示模式000,1,0,000 右端送入8+8显示,二键封锁,编码扫描
#define   LED_FEQ      0x38   //定义8279工作频率001,11000 24分频
#define   LED_CLS      0xD1   //清除显示110,100,0,1
#define   LED_WR       0x90   //写入显示RAM 100,1,000 从0地址开始显示,地址自动加1
#define   READKB       0x40   //读端口命令010,0读FIFO  RAM ,地址自动加1

#define  uint   unsigned  int 
#define  uchar  unsigned  char

char xdata *ad_1674=(char xdata *)0x7fff;

uint  a[5]={1,2,3,4,5};
uchar led[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x67,0x77,0x7C,0x39,0x5E,0x79,0x71};//定义0 到F的键码 共阴的数码管
uchar led_0[]={0xBF,0X86,0XDB,0XCF,0XE6,0XED,0XFD,0X87,0XFF,0XEF,0XF7,0XFC,0XB9,0XDE,0XF9,0XF1};

void display_1674(void);
void test8279(void); 
void delay(uchar n); 

sbit p16=P1^6;// 控制A0,r/c两个控制信号
sbit p17=P1^7;

void ad_end (void) interrupt 0
{int i;
 uint h, l, adresult,result_1;
 float  result_0;
 p16=0x1;p17=0x0; //置r/c为1,A0=0   0000,0010
 h=*ad_1674;
 p16=0x1;p17=0x1;//置r/c为1,A0=1    0000,0011
 l=*ad_1674; 
 h=(uint)(h<<4);
  l=(uint)(l>>4);
 adresult=h+l; //得到最后的数字结果
result_0=(float)adresult*(float)10.0/4096.0;
result_1=(uint)(result_0*1000);
  for(i=4;i>=0;i--)
  {
   a[i]=result_1%10;
   result_1=result_1/10;
  }									   
return ; 
}

void main(void)
{
   EA=1; 
   EX0=1;
   IT0=1;//下降沿触发
  
 test8279();
 while(1)
  {   
p16=0x0;   p17=0x0; //在启动转换之前必须置r/c为0,A0=0   0000,0010
*ad_1674=0x00;//启动AD转换开始
display_1674();
   }
}


void display_1674(void)
 {   
 cmd8279=LED_WR;  
                   data8279=led[a[4]];	 //小数三位
				   data8279=led[a[3]];	 //小数二位
				   data8279=led[a[2]];  //小数一位
				   data8279=led_0[a[1]];  //个位 
                   data8279=led[a[0]];  //十位
 				  //	 ;
  }

void test8279(void)            //8279初始化子程序
{
 uchar i;
 
 cmd8279=LED_MOD;  //初始化
 cmd8279=LED_FEQ;
 cmd8279=LED_WR;
 
 for (i=0;i<8;i++)  //每个led均显示8
  data8279=0xFF;
    
 delay(2);   //延时
  
 cmd8279=LED_CLS;   //清零
 cmd8279=LED_WR;
} 
void delay(uchar n)         //延时子程序
{
 unsigned int i;
 for (i=1;i<20000*n;i++)
 ;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -