仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
1.jpg (101.62 KB)
下載附件
2021-7-20 17:17 上傳
部分源碼:完整見附件
- #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();
- }
-
- }
復制代碼 完整源碼和proteus仿真文件:
信號發生器.zip
(108.2 KB, 售價: 2 E幣)
2021-7-20 17:18 上傳
點擊文件名下載附件
售價: 2 E幣 [記錄]
[ 購買]
【必讀】版權免責聲明
1、本主題所有言論和內容純屬會員個人意見,與本論壇立場無關。2、本站對所發內容真實性、客觀性、可用性不做任何保證也不負任何責任,網友之間僅出于學習目的進行交流。3、對提供的數字內容不擁有任何權利,其版權歸原著者擁有。請勿將該數字內容進行商業交易、轉載等行為,該內容只為學習所提供,使用后發生的一切問題與本站無關。 4、本網站不保證本站提供的下載資源的準確性、安全性和完整性;同時本網站也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的損失或傷害。 5、本網站所有軟件和資料均為網友推薦收集整理而來,僅供學習用途使用,請務必下載后兩小時內刪除,禁止商用。6、如有侵犯你版權的,請及時聯系我們(電子郵箱1370723259@qq.com)指出,本站將立即改正。
|