/**************************************************************************
*程序名称:TLC1549驱动
*程序功能:将模拟信号值在数码管上显示
*开发工具:WSF-51DB开发板
* MCU型号:AT89S52-24PU
*时钟频率:12MHZ
*程序作者:吴师傅
*版权说明:吴师傅版权所有。转载请注明来源和作者。
**************************************************************************/
#include<reg52.h>
unsigned char code segmcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7C,0x39,0x5E,0x79,0x71};//共阴极数码管段码
unsigned char code bitcode[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
//8位共阴极数码管位码
sbit ser=P2^0;//74HC595串行数据输入
sbit oe=P2^1;//74HC595使能
sbit rclk=P2^2;//74HC595数据锁存
sbit srclk=P2^3;//74HC595串行时钟
sbit clock=P1^3;//TLC1549时钟
sbit dataout=P0^6;//TLC1549数据
sbit cs=P1^2;//TLC1549片选
//延时毫秒函数:
void Delayms(unsigned int t)
{
unsigned int x,y;
for(x=t;x>0;x--)
for(y=120;y>0;y--);
}
//任意位数码管显示一个字符函数:
void DTDisplayChar(unsigned char segmd,unsigned char bitd)//数码管段码和数码管位码
{
unsigned char i;
unsigned int dat;
oe=1;//74HC595禁止
dat=bitd;
dat=dat<<8|segmd;//位码段码合并为一个int型数据
for(i=0;i<16;i++)//16位数据从高位依次移入74HC595
{
ser=(dat&0x8000)?1:0; //判断最高位,为真取1,为假取0
srclk=1;//上升沿送数据
srclk=0;
dat<<=1;//左移取下一位
}
rclk=1;//74HC595锁存数据
rclk=0;
oe=0;//74HC595使能
}
//读TLC1549函数:
unsigned int ReadTLC1549(void)
{
unsigned int rdat=0;
unsigned char i;
cs=0;//片选使能
for(i=0;i<10;i++)
{
clock=0;
clock=1;//上升沿读数据
rdat<<=1;
if(dataout==1) rdat|=0x0001;//从高位读取
//else rdat|=0x0000;//如果是0,可不做处理
}
cs=1;//片选禁止
return rdat;
} |