关于计数器的两个问题咨询
时间:10-02
整理:3721RD
点击:
#include<reg51.h> //头文件
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char temp[8];
unsigned char dispcount;
unsigned char T0count;
unsigned char timecount;
bit flag;
unsigned long x;
unsigned char TempBuffer[10];
sbit lcde=P2^7; //使能端
sbit lcdrs=P2^6; //复位端
sbit lcdrw=P2^5; //写数据端
void IntToStr(unsigned int t, unsigned char *str, unsigned char n)
{
unsigned char a[5]; char i, j;
a[0]=(t/10000)%10; //取得整数值到数组
a[1]=(t/1000)%10;
a[2]=(t/100)%10;
a[3]=(t/10)%10;
a[4]=(t/1)%10;
for(i=0; i<5; i++) //转成ASCII码
a=a+'0';
for(i=0; a=='0' && i<=3; i++);
for(j=5-n; j<i; j++) //填充空格
{ *str=' '; str++; }
for(; i<5; i++)
{ *str=a; str++; } //加入有效的数字
*str='\0';
}
/*******************************************************************/
/* */
/* 延时子程序 */
/* */
/*******************************************************************/
void delay(uint z)
{
uint a,y;
for(a=z;a>0;a--)
for(y=110;y>0;y--);
}
main()
{
unsigned char i;
init();
while(1)
{
if(flag==1)
{
flag=0;
x=T0count*65536+TH0*256+TL0;
IntToStr(x, &TempBuffer[0], 5);
while(TempBuffer != '\0')
{
write_date(TempBuffer);
i++;
delay(300);
}
write_com(0x01);
timecount=0;
T0count=0;
TH0=0;
TL0=0;
TR0=1;
TR1=1;
i = 0;
}
}
}
这个是我在网上找到的一个计数器程序,里面我有两个地方没有看懂,我用红色的标注出来了的
for(i=0; i<5; i++) //转成ASCII码
a=a+'0'; 他这里是写出计数的位 ,后面加一个 '0'是干什么的呢
for(i=0; a=='0' && i<=3; i++);
for(j=5-n; j<i; j++) //填充空格
{ *str=' '; str++; } 这个语句我没有看懂, *str函数不怎么明白
for(; i<5; i++)
{ *str=a; str++; } //加入有效的数字
*str='\0';
第二个地方
x=T0count*65536+TH0*256+TL0; 这个X是表示计数值的大小,那怎么等式为什么要T0count*65536+TH0*256+TL0
IntToStr(x, &TempBuffer[0], 5); &TempBuffer[0]是什么意思呢
while(TempBuffer != '\0')
{
write_date(TempBuffer);
就这些地方不怎么明白,麻烦帮我解释一下 不胜感激。
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char temp[8];
unsigned char dispcount;
unsigned char T0count;
unsigned char timecount;
bit flag;
unsigned long x;
unsigned char TempBuffer[10];
sbit lcde=P2^7; //使能端
sbit lcdrs=P2^6; //复位端
sbit lcdrw=P2^5; //写数据端
void IntToStr(unsigned int t, unsigned char *str, unsigned char n)
{
unsigned char a[5]; char i, j;
a[0]=(t/10000)%10; //取得整数值到数组
a[1]=(t/1000)%10;
a[2]=(t/100)%10;
a[3]=(t/10)%10;
a[4]=(t/1)%10;
for(i=0; i<5; i++) //转成ASCII码
a=a+'0';
for(i=0; a=='0' && i<=3; i++);
for(j=5-n; j<i; j++) //填充空格
{ *str=' '; str++; }
for(; i<5; i++)
{ *str=a; str++; } //加入有效的数字
*str='\0';
}
/*******************************************************************/
/* */
/* 延时子程序 */
/* */
/*******************************************************************/
void delay(uint z)
{
uint a,y;
for(a=z;a>0;a--)
for(y=110;y>0;y--);
}
main()
{
unsigned char i;
init();
while(1)
{
if(flag==1)
{
flag=0;
x=T0count*65536+TH0*256+TL0;
IntToStr(x, &TempBuffer[0], 5);
while(TempBuffer != '\0')
{
write_date(TempBuffer);
i++;
delay(300);
}
write_com(0x01);
timecount=0;
T0count=0;
TH0=0;
TL0=0;
TR0=1;
TR1=1;
i = 0;
}
}
}
这个是我在网上找到的一个计数器程序,里面我有两个地方没有看懂,我用红色的标注出来了的
for(i=0; i<5; i++) //转成ASCII码
a=a+'0'; 他这里是写出计数的位 ,后面加一个 '0'是干什么的呢
for(i=0; a=='0' && i<=3; i++);
for(j=5-n; j<i; j++) //填充空格
{ *str=' '; str++; } 这个语句我没有看懂, *str函数不怎么明白
for(; i<5; i++)
{ *str=a; str++; } //加入有效的数字
*str='\0';
第二个地方
x=T0count*65536+TH0*256+TL0; 这个X是表示计数值的大小,那怎么等式为什么要T0count*65536+TH0*256+TL0
IntToStr(x, &TempBuffer[0], 5); &TempBuffer[0]是什么意思呢
while(TempBuffer != '\0')
{
write_date(TempBuffer);
就这些地方不怎么明白,麻烦帮我解释一下 不胜感激。
&TempBuffer[0]是给指针变量赋值
a=a+'0';是将数值转化为对应的ASCII码如果a是5则对应的ASCII码不就是‘5’M么
*str=' '; str++; 中*str就是str指针变量存储的RAM地址内存储的数值,对其赋值文空格,然后指针指向下一个地址
T0count*65536+TH0*256+TL0,是计算累计的数值TH0和TL0都是8bit的,所以TH0*256
才开始学习还无法看懂!