27

/********************************
工程名:乒乓球台震动模式测试系统
程序编辑:付江云
说  明:不断扫描P1口的值,
如与各等级电压比较器相连端出现了
高电平则记录其值并启动计时器,
再通过分析其值分析出振动模式,
再在数码管等级处显示,然后等待
定时器计算完脉宽,再显示脉宽。
********************************/
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int

//无线发送控制管脚定义
sbit senden=P3^6; //当其置一后数据传送过去
sbit yellow=P3^5; //控制黄灯亮
sbit sound=P3^7; //控制蜂鸣器鸣叫

//外部中断0管脚
sbit INT_0=P3^2;

//数码管显示位及数据预设
uchar code wei[]={0xff,0xfe,0xfd,0xfb,0xf7,0xef}; //wei[1]~wei[5]分别表示选择第1~5个数码管
uchar code num[]={0x3f,0×06,0x5b,0x4f,0×26,0x2d,0x3c,0×07,0x7f,0×27,0×00}; //0~9

//震动等级P1端值预设
//uchar code dengji[]={0xe0,0xe1,0xe3,0xe7,0xef,0xff}; //分别表示0~5级模式

//全局变量定义
uint width; //脉宽值,以毫秒为单位
uint tempwidth; //在定时器中断时临时记录脉宽值
bit flag; //脉宽显示标志位
uchar tempP1; //临时记录P1数据

void delay(uint z) //简单延时函数
{
 while(z–);
}

void dosend() //发送一个亮灯鸣叫后发送熄灯不鸣叫的函数
{
 yellow=1;
 sound=1;
 senden=1;
 delay(100);
 senden=0;
 delay(9000);
 yellow=0;
 sound=0;
 senden=1;
 delay(100);
 senden=0;
}

void starttimer() //启动定时器函数
{
 tempwidth=0;
 TH0=0xfc;
 TL0=0×18;
 TR0=1;
 flag=0;
}

void inttimer() interrupt 1 //定时0中断函数,每一毫秒tempwidth加一
{
 TH0=0xfc;
 TL0=0×18;
 tempwidth++;
 if(INT_0==1)
 {
  TR0=0;
  width=tempwidth;
  flag=1;
 }
}

void main()  //主函数入口
{
 yellow=0;
 sound=0;
 senden=0;
 P2=num[11];
 P0=wei[0];
 EA=1;
 ET0=1;
 TMOD=0×01;
 while(1)
 {
  while((tempP1=P1)!=0xe0) //判断是否有震动
  {
   starttimer();   //有则立即启动计时器
   switch(tempP1)   //分析P1的值来分析出振动模式
   {
    case 0xe1:
     P2=num[1];P0=wei[2];break;
    case 0xe3:
     P2=num[2];P0=wei[2];dosend();break;
    case 0xe7:
     P2=num[3];P0=wei[2];dosend();break;
    case 0xef:
     P2=num[4];P0=wei[2];dosend();break;
    case 0xff:
     P2=num[5];P0=wei[2];dosend();break;
    default:
     break;
   }
   delay(10000);
   while(!flag);   //等待计算脉宽完成后再显示脉宽
   P2=num[width/100];P0=wei[3];
   delay(50000);
   P2=num[(width/10)%10];P0=wei[4];
   delay(50000);
   P2=num[width%10];P0=wei[5];
   delay(50000);
  }
  P2=num[0];P0=wei[2];
  delay(100);
  P2=num[0];P0=wei[5];
  delay(100);
 }
}

Leave a Reply

click to change 看不清?点击换一张!

备案号:晋ICP备08002207号