|
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
單片機(jī)源程序如下:
#include <reg52.h>
#include <intrins.h>
/*定義I/O端口*/
sbit CLK = P0^0; //串行時鐘,下降沿有效
sbit DAT = P0^1; //串行數(shù)據(jù)
sbit LOAD = P0^7; //串行數(shù)據(jù)加載,下降沿有效
sbit LDAC = P0^3; //DAC更新鎖存控制,下降沿有效
/*函數(shù)申明*/
void delayms(unsigned char ms);
void TCL5628_Write(unsigned char addr, bit rng, unsigned char dat);
void Init_TLC5628();
void jichiWave();
void delay5us(void); //誤差 0us
/*函數(shù)定義*/
/*延時函數(shù)*/
void delayms(unsigned char ms)
{
unsigned char i;
while(ms--)
{
for(i = 0; i < 250; i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
void delay5us(void) //誤差 0us
{
unsigned char a;
for(a=1;a>0;a--);
}
/*TCL5628 driver*/
void TCL5628_Write(unsigned char addr, bit rng, unsigned char dat)
{
unsigned char n;
// 發(fā)送通道地址
n = 3;
do
{
DAT = (bit)(addr & 0x02);
addr <<= 1;
CLK = 0;
CLK = 1;
}while(--n != 0);
//發(fā)送RNG位
DAT = rng;
CLK = 0;
CLK = 1;
//發(fā)送8位DAC數(shù)據(jù)
n = 8;
do
{
DAT = (bit)(dat & 0x80);
dat <<= 1;
CLK = 0;
CLK = 1;
}while(--n != 0);
//加載數(shù)據(jù)
LOAD = 0;
// delay5us();
LOAD = 1;
// delay5us();
LDAC = 0;
// delay5us();
LDAC = 1;
}
/*初始化TLC5628*/
void Init_TLC5628()
{
DAT = 1;
CLK = 1;
LDAC = 1;
LOAD = 1;
}
///*方法一:采樣設(shè)計
// TLC5628轉(zhuǎn)換一次大概要12.5us
// 即最高80KHz
// 但是用51單片機(jī),晶振為12MHz
// 最快產(chǎn)生一個方波為2us,即最高頻率為500KHz
//
// 正弦波產(chǎn)生函數(shù)
// 用32個點
//*/
//void juchiWave()
//{
// /*根據(jù)曲線光滑來選取采樣點*/
// code unsigned char juchiTab[] =
// {
// 0,10,20,30,40,50,60,70,80,90,100,110,120,130,140,150,160,170,180,190,200,210,220,230,240,250
// };
// unsigned char n;
// for(n = 0; n < 25; n++)
// {
// TCL5628_Write(0,0,juchiTab[n]);
// delayms(1);
// }
//}
//void main()
//{
// Init_TLC5628();
// while(1)
// {
// juchiWave();
// }
//
//}
/*方法二:算法設(shè)計*/
void juchiwave()
{
unsigned char n;
for(n=0;n<50;n++)
{
TCL5628_Write(0,0,n);
delayms(1);
}
}
void main()
{
Init_TLC5628();
while(1)
{
juchiWave();
}
}
全部資料51hei下載地址:
信號發(fā)生器.zip
(91.61 KB, 下載次數(shù): 21)
2021-7-19 15:08 上傳
點擊文件名下載附件
|
評分
-
查看全部評分
|