打印

程序难以理解,求高手赐教

[复制链接]
1392|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xiaojiying|  楼主 | 2007-10-6 09:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int
uchar code BitTab[]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB}; //位驱动码
uchar code DispTab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x8
6,0x8E,0xFF}; //字形码
uchar DispBuf[6]; //显示缓冲区
void Timer1() interrupt 3
{ uchar tmp;
uchar Count; //计数器,显示程序通过它得知现正显示哪个数码管
TH1=(65536-3000)/256;
TL1=(65536-3000)%256; //重置初值
tmp=BitTab[Count]; //取位值
P2=P2|0xfc; //P2 与11111100B 相或
P2=P2&tmp; //P2 与取出的位值相与
tmp=DispBuf[Count];//取出待显示的数 tmp=DispTab[tmp]; //取字形码
P0=tmp;
Count++;
if(Count==6)
Count=0;
}
void main()
{ uint tmp;
P1=0xff;
P0=0xff;
TMOD=0x15; //定时器0 工作于计数方式1,定时器1 工作于定时方式1
TH1=(65536-3000)/256;
TL1=(65536-3000)%256; //定时时间为3000 个周期
TR0=1; //计数器0 开始运行
TR1=1;
EA=1;
ET1=1;
for(;;)
{ tmp=TL0|(TH0<<8); //取T0 中的数值
DispBuf[5]=tmp%10;
DispBuf[4]=tmp%10;
tmp/=10;
tmp/=10;
DispBuf[3]=tmp%10;
tmp/=10;
DispBuf[2]=tmp%10;
DispBuf[1]=tmp/10;
DispBuf[0]=0;
}
}

一个计数器程序,将T0 作为计数器来使用,对外部信号计数,将所计数字
显示在数码管上。


这程序中的这一部分难以理解,请高人指点
{ tmp=TL0|(TH0<<8); //取T0 中的数值
DispBuf[5]=tmp%10;
DispBuf[4]=tmp%10;
tmp/=10;
tmp/=10;
DispBuf[3]=tmp%10;
tmp/=10;
DispBuf[2]=tmp%10;
DispBuf[1]=tmp/10;
DispBuf[0]=0;
}

相关帖子

沙发
太阳之母| | 2007-10-6 12:27 | 只看该作者

嘿嘿

这程序中的这一部分很好理解
{ tmp=TL0|(TH0<<8);      // 取T0中的数值,等价于tmp = TL0 + TH0*256
                         //为了下面的说明方便一些,假定这会儿tmp里放了23456这个数吧
  DispBuf[5]=tmp%10;     // DispBuf[5]里放的是tmp的个位:6
  tmp/=10;               // 这一句应该放在这里,不应该放在下面,现在tmp=2345了
  DispBuf[4]=tmp%10;     // DispBuf[4]里放的是tmp的个位:5
  tmp/=10;               // 现在tmp=234了
  DispBuf[3]=tmp%10;     // DispBuf[3]里放的是tmp的个位:4
  tmp/=10;               // 现在tmp=23了
  DispBuf[2]=tmp%10;     // DispBuf[2]里放的是tmp的个位:3
  DispBuf[1]=tmp/10;     // DispBuf[1]里放的是tmp的十位:2
  DispBuf[0]=0;          // DispBuf[0]里固定放0
}                        // 到此,DispBuf[0]~DispBuf[5]里放的是0 2 3 4 5 6

使用特权

评论回复
板凳
xiaojiying|  楼主 | 2007-10-6 13:29 | 只看该作者

啊,原来如此,受教了

啊,原来如此,明白了.多谢二楼 太阳之母 的详细解说

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

0

粉丝