📄 main.c
字号:
/*
Main.C
TLC5620串行DAC例程:产生正弦波
*/
#include <REG51.H>
//定义I/O端口
sbit DAT = P1^4; //串行数据
sbit CLK = P1^5; //串行时钟,下降沿有效
sbit LDAC = P1^6; //DAC更新锁存控制,下降沿有效
sbit LOAD = P1^7; //串行数据装载,下降沿有效
/*
函数:Dac()
功能:发送数据至TLC5620串行DAC
参数:
addr:DAC通道地址,取值0~3,对应通道A~D
rng:附加的范围位,rng=0时,Vo不会超过Vref,rng=1时,Vo变为2倍
dat:8位DAC数据
公式:
rng=0时,Vo=Vref*(dat/256)
rng=1时,Vo=Vref*(dat/256)*2
*/
void Dac(unsigned char addr, bit rng, unsigned char dat)
{
unsigned char n;
//发送通道地址
n = 2;
do
{
DAT = (bit)(addr & 0x02);
addr <<= 1;
CLK = 0;
CLK = 1;
} while ( --n != 0 );
//发送RNG位
DAT = rng;
CLK = 0;
CLK = 1;
//发送8位DAC数据
n = 8;
do
{
DAT = (bit)(dat & 0x80);
dat <<= 1;
CLK = 0;
CLK = 1;
} while ( --n != 0 );
//装载数据
LOAD = 0;
LOAD = 1;
//数据锁存到DAC转换器
LDAC = 0;
LDAC = 1;
}
/*
函数:Delay()
功能:延时1ms~256ms
参数:
t>0时,延时(t)ms
t=0时,延时256ms
*/
void Delay(unsigned char t)
{
do
{
TH0 = 0xFC;
TL0 = 0x66;
TR0 = 1;
while ( !TF0 );
TR0 = 0;
TF0 = 0;
} while ( --t != 0 );
}
/*
函数:SinWave()
功能:利用TLC5620串行DAC在通道B产生正弦波
说明:请用示波器观察SmartSOPC实验箱D5区的DACB通道
*/
void SinWave()
{
code unsigned char SinTab[] =
{
128,147,167,185,202,218,231,241,249,253,
255,253,249,241,231,218,202,185,167,147,
127,108,88,70,53,37,24,14,6,2,
0,2,6,14,24,37,53,70,88,108
};
unsigned char n;
for (;;)
{
for ( n=0; n<40; n++ )
{
Dac(1,0,SinTab[n]);
Delay(5);
}
}
}
void main()
{
TMOD &= 0xF0;
TMOD |= 0x01;
DAT = 1;
CLK = 1;
LDAC = 1;
LOAD = 1;
SinWave();
for (;;);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -