#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit LTC1661_CS=P1^0; //定义片选信号端
sbit LTC1661_SCLK=P1^1; //定义片选时钟信号
sbit LTC1661_DIN=P1^2; //定义数据信号 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
uchar table[2]={0xff,0x00}; //定义数据 其中 table[0]=0XFF = A3 A2 A1 A0 D9 D8 D7 D6 table[1] =0x00=D5 D4 D3 D2 D1 D0 X1 X0
void LTC1661_DAC(void); // LTC1661输出程序
void LTC1661_start(void); //启动信号
void LTC1661_write_word(void); //写一个字节
void LTC1661_stop(void); //停止信号
void delayns(void); //延时us程序
void delayms(uint); //延时毫秒程序
void LTC1661_Init(void); //LTC1661初始化
void main()
{
LTC1661_Init();
delayms(1000);
while(1)
{
delayms(1000);
LTC1661_DAC();
}
}
void delayms(uint xms)
{
uint i,j;
for(j=xms;j>0;j--)
for(i=110;i>0;i--);
}
void LTC1661_start(void)
{
LTC1661_CS=1; //SCLK低电平时,CS一个下降沿 启动信号
delayns();
LTC1661_SCLK=0;
delayns();
LTC1661_CS=0;
delayns();
}
void LTC1661_stop(void)
{
LTC1661_CS=0; //CS一个上升沿, 时钟无效,时钟置1
delayns();
LTC1661_CS=1;
delayns();
LTC1661_SCLK=1;
delayns();
}
void LTC1661_write_word(void)
{
uchar i,temp;
temp=table[0];
for(i=0;i<8;i++) // temp左移移位,最高位进入CY, LTC1661的发送顺序为 A3 A2 A1 A0 D9 D8 D7 D6
{
temp=temp<<1;
LTC1661_SCLK=0;
delayns();
LTC1661_DIN=CY;
delayns();
LTC1661_SCLK=1;
delayns();
}
temp=table[1]; // temp左移移位,最高位进入CY, LTC1661的发送顺序为 D5 D4 D3 D2 D1 D0 X1 X0
for(i=0;i<8;i++) //X1,X0数据无意义
{
temp=temp<<1;
LTC1661_SCLK=0;
delayns();
LTC1661_DIN=CY;
delayns();
LTC1661_SCLK=1;
delayns();
}
LTC1661_SCLK=0;
delayns();
LTC1661_DIN=1;
delayns();
}
void LTC1661_DAC(void) //LTC1661_DAC输出
{
LTC1661_start();
LTC1661_write_word();
LTC1661_stop();
}
void LTC1661_Init(void) //初始化 CS与SCLK均拉高
{
LTC1661_CS=1;
delayns();
LTC1661_SCLK=1;
delayns();
}
|