void bitout(void)
{
DisplayCs=1; /*锁存寄存器时钟输入*/
en_send=1; /*第二个数据发送允许*/
SBUF =Display_Digit[Digit];/* 发送8位位码*/
}
void Serial(void) interrupt 4 using 2 /* 串行发送中断子程序,发送8位段码 */
{
TI=0; /*TI软件置0,允许发送下一个8位数据到SBUF中*/
if(en_send)
{
en_send=0; /*判断是第一个字节还是第二个字节*/
if(Digit!=4) /*位码在0带3的时候*/
SBUF=Show_Segment[Digit]; /*把缓存器中的内容发送到堆栈中,4个数码管的段码*/
else
SBUF=led_flag; /*在面板上还有4个灯的8位段码*/
Digit++;
if(Digit==5) /*如果位码到5变为0*/
Digit=0;
DisplayCs=0; /*锁存寄存器时钟输入*/
}
}
这个是我程序中的两个子程序,两个的用处是第一个发送数码管的位码,第2个是发送数码管的段码,因为面板上有4个灯,
设第5个位码显示这4个LED灯。DisplayCs是主芯片89c52连接595芯片的一个脚,作用为锁存寄存器时钟输入。led_flag是
一个8位段码,显示4个LED灯的亮。Digit是位码的位数。en_send是判断是第一个发送的数据还是第二个数据,第一个为1,第2个为0时发送。 哈哈 终于把这个问题解决了