有了这程序念者或,直接调用就行了。
后面的很容易了,交给你自己完成吧……
/////嫌则//////////////////////////////////////////////////////
// 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=0iDI EQU P3.7SCK 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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)