/*
描述:新24孔荧光实时定量PCR灯板控制程序
主要芯片:TI公司 TLC5924DAP
芯片相关信息:
1.Imax = Viref * 40 / Riref; 其中Viref = 1.24V,选Riref = 1k;Imax = 49.6mA
2.Ioutn = Imax * DCn / 127; 其中DCn是第n路可编程点校正值,范围0~127
3.端口含义:
SIN 串行数据输入端口
SCLK 数据移位时钟,上升沿有效
BLANK BLANK = H,点亮所有LED;BLANK = L,LED 点亮与否由控制字决定
XLAT 数据锁存信号,MODE = L,边沿触发锁存;MODE = H,高电平触发锁存
MODE 模式选择:MODE = H,SIN,SCLK,XLAT为点校正控制逻辑;MODE = L,SIN,SCLK,XLAT点亮与否控制逻辑
XERR 错误数据输出端口
4.端口定义:
SIN P0^0
SLCK P0^1
BLANK P0^2
XLAT P0^3
MODE P0^4
XERR P0^5
创建人: 龚大江
创建日期:2007.07.24
最后修改:2007.07.24
修改内容:
*/
#include <UHF.h>
void TLC5924_WriteDC(unsigned char *dc); //写入dot code,*dc是一个7个unchar型变量的指针
void TLC5924_WriteOn(unsigned long ledstate);
//32bit ledstate是点亮的led控制变量,其中高8bit不用;on=1,代表点亮,on=0代表关断
void TLC5924_WriteDC(unsigned char *dc)
{
unsigned char i,j;
MODE = 1;
XLAT = 0;
SCLK = 0;
SIN = 0;
// EA = 0;
for(i=0;i<LED_NUMBER;i++) //每个LED一个dc字节
{
for(j=0;j<7;j++) //dc_number范围0~127 dc7bit 依次串行输入
{
SCLK = 0;
if((*dc&0x40)==0x40) SIN = 1;
else if((*dc&0x40)==0) SIN = 0;
_nop_();
_nop_();
SCLK = 1;
_nop_();
_nop_();
*dc <<= 1;//左移一位
}
dc ++;//下一个字节
}
XLAT = 1; //XLAT 高电平将点校正数据锁存到7Bit DC Register
// EA = 1;
_nop_();
}
void TLC5924_WriteOn(unsigned long ledstate)
{ unsigned char k;
unsigned long ledstatetmp;
MODE=0; //Mode=0 On/Off 模式
BLANK=0;
XLAT=0;
SCLK=0;
SIN=0;
ledstatetmp=ledstate;
for(k=0;k<24;k++) //送24路灯点亮控制量
{
SCLK=0;
SIN=ledstatetmp&0x00000001; //从高位到低位送24bit数据
ledstatetmp>>=1;
SCLK=1; //SCLK 上升沿用于将数据送入On/Off Input shift register
SCLK=0;
}
_nop_();
BLANK=1;//BLANK高电平用于屏蔽LOD错误数据从SOUT 输出,以实现两片5924级联。
_nop_();
XLAT=1; //XLAT 上升沿用于将数据锁存到 On/Off register
XLAT=0;
_nop_();
BLANK=0;
}