📄 max518.c
字号:
#include <reg51.h> /*#include <reg52.h>*/
#include <absacc.h>
#include <intrins.h>
#define Wait {_nop_();_nop_();}
#define uint unsigned int
#define uchar unsigned char
/*正弦波数组128点*/
const char table[ ] = {0X80,0X86,0X8D, 0X93,0X99,0X9F,0XA5,0XAB,0XB1,//9
0XB7,0XBC,0XC2,0XC7,0XCC,0XD1,0XD6,0XDA,0XDF,0XE3,0XE7,0XEA,0XEE,//13*9
0XF1,0XF4,0XF6,0XF8,0XFA,0XFC,0XFD,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFE,0XFD,0XFB,0XF9,0XF7,0XF5,0XF2,0XEF,0XEC,0XE9,0XE5,0XE1,0XDD,
0XD8,0XD4,0XCF,0XCA,0XC5,0XBF,0XBA,0XB4,0XAE,0XA8,0XA2,0X9C,0X96,
0X90,0X89,0X83,0X80,0X79,0X72,0X6C,0X66,0X60,0X5A,0X55,0X4E,0X48,
0X43,0X3D,0X38,0X33,0X2E,0X29,0X25,0X20,0X1C,0X18,0X15,0X11,0X0E,
0X0B,0X09,0X07,0X05,0X03,0X02,0X00,0X00,0X00,0X00,0X00,0X00,0X01,
0X02,0X04,0X06,0X08,0X0A,0X0D,0X10,0X13,0X16,0X1A,0X1E,0X22,0X27,
0X2B,0X30,0X35,0X3A,0X40,0X45,0X4C,0X51,0X57,0X5D,0X63,0X69,0X6F,
0X76,0X7C};
#define Addr 0x58 /*010 11 00(A1A0) 0 器件地址*/
/* 2。 嵌入变量申明:*/
sbit Sda =P1^1; /*使用具体线路的Sda*/
sbit Scl =P1^2; /*使用具体线路的Scl*/
//unsigned char bdata cFlag;
//sbit bScanErr =cFlag^0;
/* 3。 嵌入涵数申明:*/
void IicStart(void);
void IicStop(void);
void IicInit(void);
void IicAck(void);
bit SendIic(unsigned char cData);
bit IicClock(void);
unsigned char ScanIic(void);
void OutputMax518(uchar Address, uchar channel, uchar DAdata);
void delay(unsigned short int time);
/* 4。 嵌入涵数代码段:*/
/****************************************************
Name:IicStart
Function:
Time:113us 88.5K
***************************************************/
void IicStart(void){
Sda=Scl=1;
Wait;
Sda=0;
Wait;
Scl=0;
}
/***********************************************/
/****************************************************
Name:IicStop
Function:
Time:113us 88.5K
***************************************************/
void IicStop(){
Sda=0;
Scl=1;
Wait;
Sda=1;
}
/***********************************************/
/****************************************************
Name:IicInit
Function:Iic Init
Time:113us 88.5K
***************************************************/
void IicInit(){
Scl=0;
IicStop();
}
/***********************************************/
/****************************************************
Name:SendIic
Function:Send data to Iic
Time:116us(8位数据为:112us) 88.5k
*****************************************************/
bit SendIic(unsigned char cData){
unsigned char data i;
for(i=0;i<8;i++){
Sda=(bit)(cData&0x80);
Scl=1;
cData<<=1;
IicClock();
}
Sda=1; /*检测ACK*/
return (~IicClock());
}
/*********************************************
Name:IicClock
Function:
********************************************/
bit IicClock(){
bit sample;
Scl=1;
Wait;
sample=Sda;
Scl=0;
Wait;
return(sample);
}
/*********************************************************************************************************
** 函数名称: OutputMax518(uchar Address, uchar channel, uchar DAdata)
** 功能描述: 向MAX518任一通道写入数据
** 输 入: Address : 器件地址
** Channel : 写入通道(DAC0,DAC1)
** DAdata : DA转换输出的数据
** 输 出: 无
** 全局变量:
** 调用模块:IicStart();SendIic();IicStop();
**
** 修改人: 曾红兵
** 日 期: 2007年1月20日
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void OutputMax518(uchar Address, uchar channel, uchar DAdata)
{
IicStart();
SendIic(Address);
SendIic(channel);
SendIic(DAdata);
IicStop();
}
/*********************************************************************************************************
** 函数名称: OutputMax518D(uchar Address, DA0data, uchar DA1data)
** 功能描述: 向MAX518两通道同时写入数据
** 输 入: Address : 器件地址
** DA0data :DAC0转换输出的数据
** DA1data :DAC1转换输出的数据
** 输 出: 无
** 全局变量:
** 调用模块:IicStart();SendIic();IicStop();
**
** 修改人: 曾红兵
** 日 期: 2007年1月20日
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void OutputMax518D(uchar Address, DA0data, uchar DA1data)
{
IicStart();
SendIic(Address);
SendIic(0);
SendIic(DA0data);
SendIic(1);
SendIic(DA1data);
IicStop();
}
/*********************************************
** 函数名称: delay(unsigned short int time)
** 功能描述: 延时
** 输 入: time : 延时时间
********************************************/
void delay(unsigned short int time)
{
while(time--)
{;}
}
main()
{
IicInit();
while(1){
OutputMax518D(Addr, 0, 255);
delay(65535);
//delay(65535);
OutputMax518D(Addr, 255,0);
delay(65535);
//delay(65535);
OutputMax518D(Addr, 127,127);
delay(65535);
//delay(65535);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -