C52单片机TLC5615三角波程序求帮助

C52单片机TLC5615三角波程序求帮助,第1张

以下是TLC5615的C控制程序。

有了这程序念者或,直接调用就行了。

后面的很容易了,交给你自己完成吧……

/////嫌则//////////////////////////////////////////////////////

// Name : TLC5615控制

// In :

// Out :

// Function :

// Explain :

// TLC5615 是10位的精度,送数时要送仔伍12位

// 高10位为真正的数据位,最低两位无用,

// 可送1或者0。

// 并且将TLC549的8位数据放在TLC5615的10位

// 数据的低8位,让高2位为0。

// 向TLC5615送数时,要连续发12个时钟周期

/**************************************/

void TLC5615_ctl(uchar x)

{

uchar j

uint i=0

i=(uint)x

i=i<<6// 向左移6位,满足12位要求

TLC5615_CS=0 // 拉低片选,准备送数

for(j=0j<12j++) // 送12次,先送高位,再到低位

{

TLC5615_SCLK=0// 由于 TLC5615 是在上升沿将数据打入移位寄存器,因此在 sclk 低电平时将数

// 据放在 TLC5615 数据线上,以便其在时钟上升沿来时正确取数

if((i&0x8000)!=0x0000)

TLC5615_DIN=1// 当高位为1时,输出1,否则输出0

else

TLC5615_DIN=0

TLC5615_SCLK=1 // 拉高时钟线,以便TLC5615读入数据

i=i<<1 // 将数据往左移一位,以便在下一个时钟输出给TLC5615

}

TLC5615_SCLK=0 // 空闲时拉低SCLK

TLC5615_CS=1 // 空闲时拉搞CS

}

/**************************************/\x0d\x0a/* 信号发生器 (正弦波,方波,三角波)*/\x0d\x0a/*************************************/\x0d\x0a#include\x0d\x0a#include \x0d\x0a#define uchar unsigned char\x0d\x0a#define uint unsigned int\x0d\x0a\x0d\x0asbit cs=P2^0//tlc5615片选端口\x0d\x0asbit clk=P2^1//tlc5615时钟物碧核线\x0d\x0asbit din=P2^2//tlc5615传输端口\x0d\x0a\x0d\x0asbit key1=P1^0\x0d\x0asbit key2=P1^1//按键的单片机接口\x0d\x0a\x0d\x0auchar keydat\x0d\x0a\x0d\x0auchar flag//波形发生终止信号的标志位 一旦被置零立马停止发信号\x0d\x0auchar flagsqu//方波高低电平控制为(运用定时器1中断控制)\x0d\x0auchar m,num\x0d\x0auchar dat=0xff\x0d\x0a\x0d\x0auchar code tosin[141]={//正弦波的编码罩掘\x0d\x0a0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,\x0d\x0a0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15,0x16,\x0d\x0a0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,\x0d\x0a0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45,\x0d\x0a0x48,0x4c,0x4e,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,\x0d\x0a0x66,0x69,0x6c,0x6f,0x70,0x71,0x72,0x73,0x74,0x75,\x0d\x0a0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7e,\x0d\x0a0x7f,0x80,0x7f,0x7e,0x7e,0x7d,0x7c,0x7b,0x7a,0x79,\x0d\x0a0x78,0x77,0x76,0x75,0x74,0x73,0x72,0x6f,0x6c,0x69,\x0d\x0a0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x51,0x4e,0x4c,\x0d\x0a0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,\x0d\x0a0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,\x0d\x0a0x18,0x16,0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,\x0d\x0a0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,\x0d\x0a0x00}\x0d\x0a\x0d\x0avoid delay(uchar z)//延时函数\x0d\x0a{\x0d\x0auchar x,y\x0d\x0afor(x=0xfor(y=zy>0y--)\x0d\x0a\x0d\x0a}\x0d\x0avoid prepare()//tlc5615的初始化\x0d\x0a{\x0d\x0acs=1\x0d\x0adin=1\x0d\x0aclk=0\x0d\x0acs=0//cs的上升沿和下降沿必须在clk为低时进?\x0d\x0a}\x0d\x0a/* 用中断来产慧陆生方波\x0d\x0avoid Squtranslator()\x0d\x0a{\x0d\x0aTR1=1//启动定时器1 控制高低电平的持续时间 占空比\x0d\x0ado{\x0d\x0ado{\x0d\x0a_wave=0\x0d\x0a }while((!flagsqu) &&flag==1)//如果一旦终止信号的\x0d\x0a//产生可以立马退出循环\x0d\x0aflagsqu=0\x0d\x0ado{\x0d\x0a_wave=1\x0d\x0a }while((!flagsqu) &&flag==1)\x0d\x0aflagsqu=0\x0d\x0a }while(flag)\x0d\x0aflag=1\x0d\x0aTR1=0\x0d\x0a}\x0d\x0a*/\x0d\x0a\x0d\x0avoid Squtranslator()//方波函数\x0d\x0a{\x0d\x0auchar j\x0d\x0auchar dat1=0x7f\x0d\x0awhile(flag)\x0d\x0a{\x0d\x0ado{\x0d\x0aprepare()\x0d\x0adat=dat1\x0d\x0afor(j=0j{\x0d\x0adin=(bit)(dat>>7)//将数据的最高位赋给din\x0d\x0aclk=1\x0d\x0adat=dat//一位位的传输\x0d\x0aclk=0\x0d\x0a}\x0d\x0acs=1//cs的上升沿和下降沿必须在clk为低时进行\x0d\x0adelay(200)//使高低电平持续一段时间\x0d\x0aif(dat1==0)\x0d\x0adat1=0x7f//完成了0和0x7f之间的替换\x0d\x0aelse\x0d\x0adat1=0\x0d\x0a }while(flag)\x0d\x0a}\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0avoid Tratranslator()//锯齿波的发生函数\x0d\x0a{\x0d\x0auchar j\x0d\x0auchar dat1=0x7f\x0d\x0awhile(flag)\x0d\x0a{\x0d\x0ado{\x0d\x0aprepare()\x0d\x0adat=dat1\x0d\x0afor(j=0j{\x0d\x0adin=(bit)(dat>>7)//将数据的最高位赋给din\x0d\x0aclk=1\x0d\x0adat=dat//一位位的传输\x0d\x0aclk=0\x0d\x0a}\x0d\x0acs=1//cs的上升沿和下降沿必须在clk为低时进行\x0d\x0adelay(2)//稍加延时\x0d\x0adat1--\x0d\x0a }while(flag &&dat1)//一旦有终止信号就可以停止\x0d\x0ado{\x0d\x0aprepare()\x0d\x0adat=dat1\x0d\x0afor(j=0j{\x0d\x0adin=(bit)(dat>>7)//将数据的最高位赋给din\x0d\x0aclk=1\x0d\x0adat=dat//一位位的传输\x0d\x0aclk=0\x0d\x0a}\x0d\x0acs=1//cs的上升沿和下降沿必须在clk为低时进行\x0d\x0adelay(2)//稍加延时\x0d\x0adat1++\x0d\x0a }while(flag &&(!(dat1==0x7f)))\x0d\x0a}\x0d\x0a}\x0d\x0a\x0d\x0avoid Sintranslator(uchar wave[],uchar num )//正弦波的转换函数\x0d\x0a{\x0d\x0auchar i,j\x0d\x0auchar dat1\x0d\x0ado{\x0d\x0afor(i=0i

DI EQU P3.7

SCK EQU P3.6

CS EQU P3.5

ORG 0000H

AJMP MAIN

ORG 0030H

MAIN: MOV R7,#0FFH

DJNZ R7,$ 初始化

MOV R0,#90H

MOV R1,#00H 待转换的十位数放在R0,R1中,高位是R0

MOV R2,#08H

MOV R3,#04H 循环次数控制

CLR C

CLR SCK

SETB CS

NOP

CLR CS 选通TLC5615

MOV A,R0

LOOPH: NOP

RLC A

MOV DI,C

SETB SCK

NOP

CLR SCK

DJNZ R2,LOOPH 移入高8位

MOV A,R1

LOOPL: NOP

RLC A

MOV DI,C

SETB SCK

NOP

CLR SCK

DJNZ R3,LOOPL 移入低8位轮辩

SETB CS 转换完毕腊贺缺,拉拍拆高CS

RET

END


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12464580.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存