51单片机使用ADC0832进行数模转换在Project中进行仿真模拟
单片机源程序如下:
- #include <REGX52.H>
- #include <intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- //ADC0832绑定引脚
- sbit ADCS=P1^3;
- sbit ADDI=P1^5;
- sbit ADCLK=P1^4;
- /**
- * @brief ADC083初始化,在程序的开头调用
- * @param 无
- * @retval 无
- */
- void ADC0832_Init()
- {
- ADCS=1;
- }
- /**
- * @brief ADC083获取无符号8位数据
- * @param 无
- * @retval 返回 usigned char 型数据
- */
- uchar getDaTa()
- {
- uchar i=0;
- uchar j;
- uint dat=0;
- uchar ndat=0;
- ADDI=1;
- _nop_();
- _nop_();
- ADCS=0;//拉低CS端
- _nop_();
- _nop_();
- ADCLK=1;//拉高CLK端
- _nop_();
- _nop_();
- ADCLK=0;//拉低CLK端,形成下降沿1
- _nop_();
- _nop_();
- ADCLK=1;//拉高CLK端
- ADDI=1; //选择通道0
- _nop_();
- _nop_();
- ADCLK=0;//拉低CLK端,形成下降沿2
- _nop_();
- _nop_();
- ADCLK=1;//拉高CLK端
- ADDI=0; //选择通道1
- _nop_();
- _nop_();
- ADCLK=0;//拉低CLK端,形成下降沿3
- ADDI=1;//控制命令结束
- _nop_();
- _nop_();
- dat=0;
- for(i=0;i<8;i++)
- {
- dat|=ADDI;//收数据
- ADCLK=1;
- _nop_();
- _nop_();
- ADCLK=0;//形成一次时钟脉冲
- _nop_();
- _nop_();
- dat<<=1;
- if(i==7)dat|=ADDI;
- }
- for(i=0;i<8;i++)
- {
- j=0;
- j=j|ADDI;//收数据
- ADCLK=1;
- _nop_();
- _nop_();
- ADCLK=0;//形成一次时钟脉冲
- _nop_();
- _nop_();
- j=j<<7;
- ndat=ndat|j;
- if(i<7)ndat>>=1;
- }
- ADCS=1;//拉低CS端
- ADCLK=0;//拉低CLK端
- ADDI=1;//拉高数据端,回到初始状态
- dat<<=8;
- dat|=ndat;
- return(dat); //return ad k
- }
复制代码
Keil代码下载:
AD数模转换.zip
(110.49 KB, 下载次数: 43)
|