#include <REGX51.H>

#define FOSC 12000000 //--- 宏定义时钟频率 ---

//=================================================================================================
//--- TLC5620定义与函数声明区 ---
sbit DATA = P3^4;
sbit CLK = P3^5;
sbit LDAC = P3^6;
sbit LOAD = P3^7;

void InitTLC5620(void)
{
LDAC = 1;
LOAD = 1;
CLK = 0;
}
void WriteTLC5620(unsigned char ch,unsigned char rng,unsigned char value)
{
unsigned char i;

if(ch & 0x02)DATA = 1; //--- 送入通道数据 ---
else DATA = 0;
CLK = 1;
CLK = 0;
if(ch & 0x01)DATA = 1;
else DATA = 0;
CLK = 1;
CLK = 0;
if(rng)DATA = 1; //--- 送入放大倍数数据 ---
else DATA = 0;
CLK = 1;
CLK = 0;
for(i=8;i>0;i--) //--- 送入DAC数据 ---
{
if(value & 0x80)DATA = 1;
else DATA = 0;
CLK = 1;
CLK = 0;
value <<= 1;
}
LDAC = 0; //--- 更新DAC寄存器数据 ---
LOAD = 0; //--- 使DAC数据输出 ---
}

//=================================================================================================
//--- 正弦信号表,共256个数据 ---
code unsigned char SINTAB[] =
{
0x7F,0x81,0x83,0x86,0x88,0x8A,0x8C,0x8E,0x91,0x93,0x95,0x97,0x99,0x9C,0x9E,0xA0,
0xA2,0xA4,0xA6,0xA8,0xAA,0xAD,0xAF,0xB1,0xB3,0xB5,0xB7,0xB9,0xBB,0xBD,0xBE,0xC0,
0xC2,0xC4,0xC6,0xC8,0xCA,0xCB,0xCD,0xCF,0xD1,0xD2,0xD4,0xD6,0xD7,0xD9,0xDA,0xDC,
0xDD,0xDF,0xE0,0xE2,0xE3,0xE4,0xE6,0xE7,0xE8,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,
0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF6,0xF7,0xF8,0xF8,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,
0xFC,0xFC,0xFD,0xFD,0xFD,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,
0xFD,0xFD,0xFD,0xFC,0xFC,0xFC,0xFB,0xFB,0xFA,0xFA,0xF9,0xF8,0xF8,0xF7,0xF6,0xF6,
0xF5,0xF4,0xF3,0xF2,0xF1,0xF0,0xEF,0xEE,0xED,0xEC,0xEB,0xEA,0xE8,0xE7,0xE6,0xE4,
0xE3,0xE2,0xE0,0xDF,0xDD,0xDC,0xDA,0xD9,0xD7,0xD6,0xD4,0xD2,0xD1,0xCF,0xCD,0xCB,
0xCA,0xC8,0xC6,0xC4,0xC2,0xC0,0xBE,0xBD,0xBB,0xB9,0xB7,0xB5,0xB3,0xB1,0xAF,0xAD,
0xAA,0xA8,0xA6,0xA4,0xA2,0xA0,0x9E,0x9C,0x99,0x97,0x95,0x93,0x91,0x8E,0x8C,0x8A,
0x88,0x86,0x83,0x81,0x7F,0x7D,0x7B,0x78,0x76,0x74,0x72,0x70,0x6D,0x6B,0x69,0x67,
0x65,0x62,0x60,0x5E,0x5C,0x5A,0x58,0x56,0x54,0x51,0x4F,0x4D,0x4B,0x49,0x47,0x45,
0x43,0x41,0x3F,0x3E,0x3C,0x3A,0x38,0x36,0x34,0x33,0x31,0x2F,0x2D,0x2C,0x2A,0x28,
0x27,0x25,0x24,0x22,0x21,0x1F,0x1E,0x1C,0x1B,0x1A,0x18,0x17,0x16,0x14,0x13,0x12,
0x11,0x10,0x0F,0x0E,0x0D,0x0C,0x0B,0x0A,0x09,0x08,0x08,0x07,0x06,0x06,0x05,0x04,
};

//=================================================================================================
//--- main()主程序区 ---
void main(void)
{
unsigned char i;

InitTLC5620();

while(1)
{
WriteTLC5620(0,0,SINTAB[i]); //--- 向A通道写入DAC数据 ---
WriteTLC5620(1,0,SINTAB[(i + 85) % 256]); //--- 向B通道写入DAC数据 ---
WriteTLC5620(2,0,SINTAB[(i + 85 + 85) % 256]); //--- 向C通道写入DAC数据 ---
i ++;
if(255 == i) i = 0;

posted on 2015-08-04 17:49  ChunJian-YANG  阅读(927)  评论(0)    收藏  举报