微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 恳请高人指教这个程序!

恳请高人指教这个程序!

时间:10-02 整理:3721RD 点击:

这是本人从网上下载的一个关于6为数码管显示的频率计,本人由于初学单片机,想制作这个频率计,可是将程序编译后烧入
51单片机仿真,总是显示不出来,现在小弟恳请哪位高人,指点下我,看看程序是否不够完善。不胜感激!
#include <AT89X52.H>

unsigned char code dispbit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,

                               0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};

unsigned char dispbuf[8]={0,0,0,0,0,0,10,10};

unsigned char temp[8];

unsigned char dispcount;

unsigned char T0count;

unsigned char timecount;

bit flag;

unsigned long x;

void main(void)

{

  unsigned char i;

  TMOD=0x15;

  TH0=0;

  TL0=0;

  TH1=(65536-4000)/256;

  TL1=(65536-4000)%256;

  TR1=1;

  TR0=1;

  ET0=1;

  ET1=1;

  EA=1;

  while(1)

   {

     if(flag==1)

       {

         flag=0;

         x=T0count*65536+TH0*256+TL0;

         for(i=0;i<8;i++)

           {

             temp=0;

           }

         i=0;

         while(x/10)

           {

             temp=x%10;

             x=x/10;

             i++;

           }

         temp=x;

         for(i=0;i<6;i++)

           {

             dispbuf=temp;

           }

         timecount=0;

         T0count=0;

         TH0=0;

         TL0=0;

         TR0=1;

       }

   }

}

void t0(void) interrupt 1 using 0

{

  T0count++;

}

void t1(void) interrupt 3 using 0

{

  TH1=(65536-4000)/256;

  TL1=(65536-4000)%256;

  timecount++;

  if(timecount==250)

    {

      TR0=0;

      timecount=0;

      flag=1;

    }

  P0=dispcode[dispbuf[dispcount]];

  P2=dispbit[dispcount];

  dispcount++;

  if(dispcount==8)

    {

      dispcount=0;

    }

}

养成好习惯,不要在中断函数内通过计算得到定时器初始化数值,太浪费时间

顶 就是,先用一个全局的常量替代。这个常量,你先算一下你要定时多少。

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

网站地图

Top