- #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();
- }
|