因为中断里要对三个串在一起的74164送显示数据,所以这部分程序占用的时间比较多.
我想改一下,比如显示8,就直接发送7个1+1个0,显示0就直接发6个1+2个0.
如果改成这样是不是用函数指针数组可以实现,请高手指点.
原程序:
中断程序
void T0_int() interrupt 1 using 0
{
TH0 = T2mS5_H; // 定时2.5mS
/* 显示中断处理程序 */
disp_bit++;
if( disp_bit >= 5) disp_bit = 0;
PTC = 0xff; // 先屏蔽显示
led8 = led[2][disp_bit];
send_to_led();
led8 = led[1][disp_bit];
send_to_led();
led8 = led[0][disp_bit];
send_to_led();
switch ( disp_bit )
{
case 0: PTC = 0x7f; break;
case 1: PTC = 0xbf; break;
case 2: PTC = 0xdf; break;
case 3: PTC = 0xef; break;
case 4: PTC = 0xf7; break;
default: disp_bit = 0;
}
}
74164移位程序
void send_to_led()
{
PTB &= ~BIT4; // 时钟低 1
PTB &= ~BIT5; // 数据低
if( led8 & BIT7 ) PTB |= BIT5; // 数据高
PTB |= BIT4; // 时钟高
led8 <<= 1;
PTB &= ~BIT4; // 时钟低 2
PTB &= ~BIT5; // 数据低
if( led8 & BIT7 ) PTB |= BIT5; // 数据高
PTB |= BIT4; // 时钟高
led8 <<= 1;
..................
.....中间省略.....
..................
PTB &= ~BIT4; // 时钟低 8
PTB &= ~BIT5; // 数据低
if( led8 & BIT7 ) PTB |= BIT5; // 数据高
PTB |= BIT4; // 时钟高
}
现在想改成如下的程序
void send0_to_led()
{
PTB &= ~BIT4; // 时钟低
PTB &= ~BIT5; // 数据低 0
PTB |= BIT4; // 时钟高-------
PTB &= ~BIT4; // 时钟低
PTB |= BIT5; // 数据高 1
PTB |= BIT4; // 时钟高-------
PTB &= ~BIT4; // 时钟低
PTB &= ~BIT5; // 数据低 0
PTB |= BIT4; // 时钟高-------
PTB &= ~BIT4; // 时钟低 0
PTB |= BIT4; // 时钟高-------
PTB &= ~BIT4; // 时钟低 0
PTB |= BIT4; // 时钟高-------
PTB &= ~BIT4; // 时钟低 0
PTB |= BIT4; // 时钟高-------
PTB &= ~BIT4; // 时钟低 0
PTB |= BIT4; // 时钟高-------
PTB &= ~BIT4; // 时钟低
PTB |= BIT5; // 数据高 1
PTB |= BIT4; // 时钟高-------
}
void send1_to_led()
{
..............
}
void send2_to_led()
{
..............
}
void send3_to_led()
{
..............
}
void send4_to_led()
{
..............
}
void send5_to_led()
{
..............
}
void send6_to_led()
{
..............
}
void send7_to_led()
{
..............
}
void send8_to_led()
{
..............
}
void send9_to_led()
{
..............
} |