仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.png (22.79 KB, 下載次數: 75)
下載附件
2021-7-19 15:30 上傳
51hei.png (93.99 KB, 下載次數: 58)
下載附件
2021-7-19 15:30 上傳
單片機源程序如下:
#include <reg52.h>
#include <intrins.h>
/*定義I/O端口*/
sbit CLK = P0^0; //串行時鐘,下降沿有效
sbit DAT = P0^1; //串行數據
sbit LOAD = P0^7; //串行數據加載,下降沿有效
sbit LDAC = P0^3; //DAC更新鎖存控制,下降沿有效
/*函數申明*/
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
/*函數定義*/
/*延時函數*/
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;
// 發送通道地址
n = 3;
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;
// delay5us();
LOAD = 1;
// delay5us();
LDAC = 0;
// delay5us();
LDAC = 1;
}
/*初始化TLC5628*/
void Init_TLC5628()
{
DAT = 1;
CLK = 1;
LDAC = 1;
LOAD = 1;
}
///*方法一:采樣設計
// TLC5628轉換一次大概要12.5us
// 即最高80KHz
// 但是用51單片機,晶振為12MHz
// 最快產生一個方波為2us,即最高頻率為500KHz
//
// 正弦波產生函數
// 用32個點
//*/
//void juchiWave()
//{
// /*根據曲線光滑來選取采樣點*/
// 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();
// }
//
//}
/*方法二:算法設計*/
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.png (14 KB, 下載次數: 56)
下載附件
2021-7-19 15:28 上傳
全部資料51hei下載地址:
信號發生器.zip
(91.61 KB, 下載次數: 21)
2021-7-19 15:08 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|