/********************************
项目名称:TLC5615DA转换
项目版本:1.1
项目时间:20130808
制 作 人:大鹏
********************************/
#include<stc12c5a60s2.h>
#include<intrins.h>
#include"tlv5615.h"
uint ads=256;
/*************用户自定义*********/
/******************************
函 数 名:void delay_ms(uchar i)
函数功能;1-255ms任意延时
参 数;无
返 回 值:无
时 间;20130808
***************************/
void delay_ms(uchar i) //误差 -0.651041666667us
{
unsigned char a,b;
while(i--)
{
for(b=4;b>0;b--)
for(a=248;a>0;a--);
_nop_(); //if Keil,require use intrins.h
}
}
/******************************
函 数 名:void DA(uint j)
函数功能;WRIT DA转换J(0-1023)代表不同电压值
参 数;uint j
返 回 值:无
时 间;20130808
***************************/
void DA(uint j)
{
uint i;
uchar temb=0,dout=0,temp=0;
temb=j/256;//取出高两位
temp =j%256;//取出低八位
temb=temb<<6 ;//将高两位右移6位
clk=0;
cs=0;
for(i=0;i<12;i++) //注意当是12时,有一位没有移位。因为数据是在后面移位的
{
if(i<2)
{
temb=temb<<1;
di=CY; //取出最高位
clk=1;
_nop_();
clk=0;
}
if(i>=2&&i<11)
{
temp=temp<<1;
di=CY;
clk=1;
_nop_();
clk=0;
}
if(i>=11)
{
di=CY;
clk=1;
_nop_();
clk=0;
dout=dout<<1;
}
}
cs=1;
}
/******************************
函 数 名:uint key()
函数功能;按键调整,可实现4ms与40ms步进
参 数;无
返 回 值: uint ads
时 间;20130808
*******************************/
void key()
{
P2=0xdf;
if(k1==0)
{
while(~k1)
delay_ms(90);
xia=0;
if(ads>0)
ads=ads-1;
if(ads<1)
ads=ads+10;
delay_ms(35);
}
xia=1;
if(k2==0)
{
while(~k2)
delay_ms(90);
xia=0;
if(ads<1022)
ads=ads+1;
if(ads>1022)
ads=ads+10;
delay_ms(35);
}
xia=1;
P2=0xef;
if(k1==0)
{
while(~k1)
delay_ms(90);
xia=0;
if(ads>0)
ads=ads-10;
if(ads<1)
ads=ads+10;
delay_ms(75);
}
xia=1;
if(k2==0)
{
while(~k2)
delay_ms(90);
xia=0;
if(ads<1022)
ads=ads+10;
if(ads>1022)
ads=ads-10;
delay_ms(75);
}
xia=1;
}
/******************************
函 数 名:main
函数功能;
参 数;无
返 回 值:无
时 间;20130808
***************************/
main()
{
cs=1;
clk=0;
while(1)
{
DA(ads);
delay_ms(30);
key();
}
}
|