本帖最后由 急速飞叶 于 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) ;//循环
}
}
-
一周热门 更多>