欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2671|回復: 0
打印 上一主題 下一主題
收起左側

單片機+TLC5628信號發生器Proteus仿真圖與程序

[復制鏈接]
跳轉到指定樓層
樓主
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
#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下載地址:
信號發生器.zip (91.61 KB, 下載次數: 21)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表