单片机C语言编程。

下面是一个调用程序。
void Init_Timer0(void)
{
TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
//TH0=0x00; //给定初值
//TL0=0x00;
EA=1; //总中断打开
ET0=1; //定时器中断打开
TR0=1; //定时器开关打开
}
/*------------------------------------------------
定时器中断子程序
------------------------------------------------*/
void Timer0_isr(void) interrupt 1
{
TH0=(65536-2000)/256; //重新赋值 2ms
TL0=(65536-2000)%256;

Display(0,8); // 调用数码管扫描

}
void Display(unsigned char FirstBit,unsigned char Num)
{
static unsigned char i=0;//静态局部变量不释放。

DataPort=0; //清空数据,防止有交替重影
LATCH1=1; //段锁存
LATCH1=0;

DataPort=dofly_WeiMa[i+FirstBit]; //取位码
LATCH2=1; //位锁存
LATCH2=0;

DataPort=TempData[i]; //取显示数据,段码
LATCH1=1; //段锁存
LATCH1=0;

i++;
if(i==Num)
i=0;

}
这位码是怎么样变化的?
假如我第1次输入一个低电平,那么锁存器锁存了。那第二次输入低电平,位码的变化是怎么样的。
欢迎有高手可以留下QQ或者MSN的联系方式。求老师啊。

没猜错的话这是矩阵扫描或定时器累加吧,首先要知道段码位码都是从P0口给我,我用WEI表示位锁存,用DUAN表示段锁存。
当WEi=1时,位打开,P0口送一个数0XFE(假如你的数码管是共阴的)这时位锁存器的输出是11111110(记住:这是数码管位选接口的状态),这时只有第一个数码管打开,然后关了位选,锁住这个状态,再打开段选DUAN=1,关一个数a。这时你的第一个数码管显你送的数a(这时每个数码管的段选接口都是 a值,但只有第一个数码管亮),再关段选,DUAN=0
然后再重复上面的过程:打开位,送位选值,再关位,再打开段,送段选值,再关段
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-12-06
全部的程序传上来看看