特别是void tsled(void) 函数里的AC==1那部分 请分析详细一点 还有ts0左移一位有什么用?(这段程序是用DTLED-6芯片驱动数码管的,其中DTLED-6的用法和MC14499芯片类似)
#include"reg51.h"
#include"intrins.h"
#define uchar unsigned char
#define uint unsigned int
#define nop _nop_()
sbit en =P1^7;
sbit dout=P1^6;
sbit clk=P1^3;
uchar dispbuf[9];
void delay (uint value)
{
while (value!=0) value--;
}
//串行发送DTLED-6显示
//dispbuf0-dispbuf1-dispbuf2-dispbuf3-dispbuf4-dispbuf5-dispbuf6-dispbuf7-dispbuf8
// 小数点 - 数码管1- 数码管2- 数码管3- 数码管4- 数码管5- 数码管6-ID识别码-BZ识别码
//00000xxx-0000xxxx-0000xxxx-0000xxxx-0000xxxx-0000xxxx-0000xxxx-0000xxxx-0000xxxx
//小数点=1~6,其它为不显示
//数码管1-6=0~15,
//ID识别码=0~15
//BZ识别码=BZ.3为蜂鸣输出控制位,0=关闭,1=打开
// BZ0~2为蜂鸣频率输出设定为,000=不分频, 最高频率输出=4800Hz;
// 001=一次分频,频率输出=4800/ 2 =2400Hz;
// 010=二次分频,频率输出=4800/ 4 =1200Hz;
// 011=三次分频,频率输出=4800/ 8 =600Hz;
// 100=四次分频,频率输出=4800/ 16=300Hz;
// 101=五次分频,频率输出=4800/ 32=150Hz;
// 110=六次分频,频率输出=4800/ 64=75Hz;
// 111=七次分频,频率输出=4800/128=38Hz;
//======================================================================
void tsled(void)
{
char ts0,i,j;
clk=0;
en=0;
delay(10);
for(j=0;j<9;j++)
{ ts0=dispbuf[j];
for(i=0;i<4;i++)
{
clk=1;
ts0=ts0<<1;
if(AC==1) dout=1;
else dout=0;
clk=0;
nop;
delay(3);
}
}
en=1;
}
void main(void)
{
uchar i,j,dat=0;
dispbuf[7]=0x01;
dispbuf[8]=0x00;
while(1)
{
for(i=1;i<=6;i++)
{
dispbuf[0]=i;
tsled();
delay(50000);
}
dispbuf[0]=0x00;
for(i=0;i<3;i++)
for(j=1;j<=6;j++)
{
dispbuf[j]=dat++;
tsled();
delay(50000);
}
}
}
我明白了再给分