速度测量问题,仿真不成功

2019-07-16 01:28发布

本帖最后由 急速飞叶 于 2013-4-12 22:39 编辑

#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint  unsigned int
uchar cc,bai,shi,ge,d1,d2;
uchar code_table[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar DSY_Buffer[]={0xfe,0xfd,0xfb,0xf7,0xef};
sbit SPK=P3^2;//定义输入口状态
sbit nn=P0;
float num=0,mm=0;
void delay(uint z);
void display(uchar bai,uchar shi,uchar ge,uchar d1,uchar d2);
void delay(uint z) //延时
{  uint x,y;  for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}  
void main() //主程序
{ cc=0;
  num=0;   
  TMOD=0x09; //选用定时器1,Gate位赋值1
  TH0=0;//设定初值
  TL0=0;  
  TR0=0;   
  EA=1;  
  if(SPK==0)//查INT0的状态
  {if(SPK==0)
    TR0=1;   //开计数器T0
     {if(SPK==1)  
      TR0=0;//关计数器T0
      }
   }
  mm=(cc*65536+TH0*256+TL0)*0.000001;//计算时间s
  num=10/mm;//计算速度(10代表10mm)
  display(num);//显示mm/s
}
void  timer0() interrupt 0 //计数器中断
{
  cc++; }   
void _display()//显示程序
{
     P0=0xff;//初始化数码管
     P2=0xff;
  
  { uchar i,m,Num;
    bai=Num/100;//百位上的数
    shi=Num/10%10;//十位上的数
    ge=Num%10;//个位上的数
    d1=Num*10%10;//小数点后一位
    d2=Num*100%10;//小数点后第二位位
       {  
     P2=DSY_Buffer[0];//第一个数码管
     nn=code_table[bai];//显示百位上的数
  delay(1);//延时
     P2=DSY_Buffer[1];//第二个数码管
     nn=code_table[shi];//显示十位上的数
  delay(1);
     P2=DSY_Buffer[2];
     nn=code_table[ge];
  delay(1);
  P2=DSY_Buffer[3];
     nn=code_table[d1];
  delay(1);
  P2=DSY_Buffer[4];
     nn=code_table[d2];
  delay(1);
      
        }
        while(1) ;//循环
    }
}
12.jpg
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。