本文包含原理图、PCB、源代码、封装库、中英文PDF等资源
您需要 登录 才可以下载或查看,没有账号?注册会员
×
请问51单片机控制DAC8031:
CY = DO; //取数据SO
CY = ACC & 0x80; //存数据至ACC.0
这句话什么意思啊
整个程序是这个
#include <AT89X52.H>
#include <AT89X521.H>
#include <intrins.h>
#define uchar unsigned char
//#define _rlca_() CY = ACC & 0x80
uchar ADdata=0; // 输入电压数据
uchar disbuffer[6]; // 显示缓冲区
sbit CS=P1^0; // ADC片选端
sbit CLK=P1^1; // ADC时钟
sbit DO=P1^2; // ADC数据输出
void disdata() // 显示缓冲区数据处理
{
unsigned long j,k=500,l=255;
j=ADdata*k/l; // 显示数据标度变换
disbuffer[0]=10 ; // 前面3位数码管消隐
disbuffer[1]=10 ;
disbuffer[2]=10 ;
disbuffer[3]=j/100 ; // 拆分电压数据
disbuffer[4]=(j%100)/10 ;
disbuffer[5]=j%10 ;
}
void dt_display() // 显示程序
{
uchar code table[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00};
uchar i,j, x=0x01;
disdata(); // 拆分数据至显示缓冲区
for (i=0;i<6;i++)
{
P2=0;
if (i!=3) P0=table[disbuffer[i]]; // 输出数据
else P0=table[disbuffer[i]]+0x80; // 输出数据与小数点
P2=x; x=_crol_(x,1); // 锁存数据,指向下一位
for (j=0;j<255;j++) ;
}
}
unsigned char AD_cont()
{
unsigned char i;
CLK=0;CS=0;_nop_();
for (i = 9; i > 0; i--) // 1个启动脉冲,8个输入数据
{
CLK = 1;
_nop_();_nop_(); //延时
CLK = 0; //下降沿启动或读入数据
CY = DO; //取数据SO
CY = ACC & 0x80; //存数据至ACC.0
}
CS=1;
return ACC;
}
void main()
{
while(1)
{
ADdata=AD_cont(); // 晶振:12MHz 时间常数计算
dt_display() ; // 显示
}
} |