微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 关于计数器的两个问题咨询

关于计数器的两个问题咨询

时间: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);
就这些地方不怎么明白,麻烦帮我解释一下   不胜感激。

&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

才开始学习还无法看懂!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top