#include<reg52.h>
sbit SPI_SI=P1^0;
sbit SPI_SCL=P1^1;
sbit TLC5615_CS=P1^2;
unsigned char bdata dat;//dat是可位寻址的变量
sbit dat7=dat^7;
sbit dat6=dat^6;
sbit dat5=dat^5;
sbit dat4=dat^4;
sbit dat3=dat^3;
sbit dat2=dat^2;
sbit dat1=dat^1;
sbit dat0=dat^0;
unsigned int value=0,aa=0;
/************************************************
功能描述:IO模拟SPI,发送一个字节
隶属模块:SPI模块
函数属性:外部,供用户调用
参数说明 :x,要发送的字节
返回说明:无返回值
注:很多情况下,SPI是需要有较高的速度的,此函数中不使用任何循环结构,如for(;;),while等等,使用了位寻址就是为了提高速度
*******************************************/
void SPI_WriteByte(unsigned char x)
{
dat=x; //将x的值赋给可位寻址的变量dat,以便取出各个位
SPI_SI=dat7; //取出第7个位,写到数据线上
SPI_SCL=0;
SPI_SCL=1; //时钟线产生上升沿,数据被写入
SPI_SI=dat6;
SPI_SCL=0;
SPI_SCL=1;
SPI_SI=dat5;
SPI_SCL=0;
SPI_SCL=1;
SPI_SI=dat4;
SPI_SCL=0;
SPI_SCL=1;
SPI_SI=dat3;
SPI_SCL=0;
SPI_SCL=1;
SPI_SI=dat2;
SPI_SCL=0;
SPI_SCL=1;
SPI_SI=dat1;
SPI_SCL=0;
SPI_SCL=1;
SPI_SI=dat0;
SPI_SCL=0;
SPI_SCL=1;
}
/********************************************
功能描述:向TLC5615中写入数据
隶属模块:TLC5615(DAC)模块
函数属性:外部,供用户调用
参数说明:da,写入到TLC5615中的数据,有效数据10位(TLC5615是10位 DAC,即有效值是0~1023)
返回值:无注:数据写入后,TLC5615将在模拟输出端产生相应的电压,电压值为2*(da/1024)Vref,如写入500,基准电压时2.5V,则产生电压为2.4V
***************************************************/
void TLC5615_SetValue(unsigned int da)
{
da<<=2;
TLC5615_CS=0;
SPI_WriteByte(da>>8);
SPI_WriteByte(da);
TLC5615_CS=1;
}
void delay(del)
{
unsigned char x;
while(x--);
}
void main()
{
while(1)
{
if(value==1023)
value=0;
TLC5615_SetValue(value++);
delay(50);
}
}
锯齿波的产生周期大约为32mm,我在程序中写的可能不对 |