找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1862|回复: 0
收起左侧

单片机+TLC5628信号发生器Proteus仿真图与程序

[复制链接]
ID:845605 发表于 2021-7-19 15:08 | 显示全部楼层 |阅读模式
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
51hei.png 51hei.png

单片机源程序如下:
#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

全部资料51hei下载地址:
信号发生器.zip (91.61 KB, 下载次数: 21)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表