📄 dficld_number4_15.c
字号:
#include<C:\WAVE6000\COMP51V6\REG51.h>
#define GW 0
#define SW 1
#define BW 2
int TIME,PULSE_TIMER;
int TIME1;
int PULSE_NUMBER=0;
void delay(long int s) /*延时函数*/
{
long int j;
for(j=0;j<s;)j++;
}
void xs(unsigned int data1,unsigned char adr) /*在相应位显示相应的数字*/
{
switch(data1) /*数据*/
{case 0:data1=0x02;break;
case 1:data1=0x9e;break;
case 2:data1=0x24;break;
case 3:data1=0x0c;break;
case 4:data1=0x98;break;
case 5:data1=0x48;break;
case 6:data1=0x40;break;
case 7:data1=0x1e;break;
case 8:data1=0x00;break;
case 9:data1=0x08;break;
default :break;
}
switch(adr) /*地址*/
{case 0:P2_4=0;P2_5=1;P2_6=1;break;
case 1:P2_4=1;P2_5=0;P2_6=1;break;
case 2:P2_4=1;P2_5=1;P2_6=0;break;
default :break;
}
P1_6=0;
SBUF=data1;
while(!TI){} /*当八位数字全都移进去后就锁存*/
P1_6=1;
TI=0;
}
void xscx(void) interrupt 1 /*定时器中断服务程序每50S中断一次*/
{unsigned int PULSE_NUMBER1;
unsigned int PULSE_NUMBER2;
unsigned int PULSE_NUMBER3;
TIME++;TIME1++;PULSE_TIMER++;
PULSE_NUMBER1=(PULSE_NUMBER%10)%10;
PULSE_NUMBER2=(PULSE_NUMBER/10)%10;
PULSE_NUMBER3=PULSE_NUMBER/100;
xs(PULSE_NUMBER1,GW); /*在个位上显示数字*/
delay(10);xs(0xff,GW); /*延时期间始终显示该数字,之后隐数字*/
xs(PULSE_NUMBER2,SW); /*在十位上显示数字*/
delay(10);xs(0xff,SW); /*延时期间始终显示该数字,之后隐数字*/
xs(PULSE_NUMBER3,BW); /*在百位上显示数字*/
delay(10);xs(0xff,BW); /*延时期间始终显示该数字,之后隐数字*/
TH0=0xec;TL0=0x78;TR0=1; /*重装初值并启动定时器0*/
}
void pulse(void) interrupt 2 /*脉冲数测量*/
{
PULSE_NUMBER++; /*只有当钱进去后才计数*/
}
void initial(void)
{TIME=0;P1_6=0;
P2_0=1;P2_1=1;P2_2=1;P2_3=1; /*电机停转*/
TH0=0xec; //使溢出时间为5ms,实验出来的数字,
TL0=0x78; //这样才没有闪烁感,同时速度也合适
TMOD=0x01; /*定时/计数器0工作方式为16位定时器*/
SCON=0x00; /*设置串行口中断为工作方式0(八位同步移位寄存器)*/
IT0=1; /*设置外部中断0为脉冲触发方式1,(电平触发方式为0)*/
IT1=1; /*设置外部中断1为脉冲触发方式1,(电平触发方式为0)*/
IP=0X04; /*设置外部中断0为高优先级别(01)*/
IE=0X82; //开总中断允许位,定时计数器1中断允许位
TR0=1; /*使定时器0启动*/
}
void main(void)
{PULSE_NUMBER=555; /*显示测试数字*/
initial();
while(1)
{if(P1_4==0)
{PULSE_NUMBER=0;
TIME=0; /*时间清零*/
P2_0=0;P2_1=0;P2_2=1;P2_3=1; /*电机正转*/
PULSE_TIMER=0;
while(1)
{if(PULSE_TIMER>=20)
IE=0x86;
if((P1_2==0)&&(P1_3==0))
{delay(1);
if((P1_2==0)&&(P1_3==0))
break;
if(TIME>=8000)
break;
}
}
while(1)
{if((P1_2==1)&&(P1_3==1))
{delay(1);
if((P1_2==1)&&(P1_3==1))
{IE=0X82;
TIME1=0;
while(1)
{if(TIME1==10)
break;
}
break;
}
}
}
initial();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -