功能:
1.启动测频按钮之前,显示88888888; 2.启动测频按钮后,测量 P1.0输出方波的频率。产生的频率是1000; 3.测量时间10S,测量期间显示66666666.方法可以是10S内计数,计数值除以10;
4.10S后显示测频值。 刚做出来不久,因为使用开发板做的但是仿真就不行了,求各位大佬指教。
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit LS138A=P2^2;
sbit LS138B=P2^3;
sbit LS138C=P2^4;
sbit Pulse=P1^0;
sbit key =P1^1;
uint state=0,times=0;
long int mn=0;
uint LedOut[8];
uchar code Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //′˱íÎa LED μÄ×ÖÄ£, 12òõêyÂë1ü 0-9
void display(long int mn); //êyÂë1üÏÔê¾oˉêy//
uchar Key_Scan(); //é¨Ãè¼üÅì//
void display_Delay1ms(uchar ); //ÏÔê¾oˉêy//
/*******************************************************************************
* oˉ êy Ãû :uchar Key_Scan
* oˉêy1|Äü :é¨Ãè¼üÅì
* êä èë : ÎT
* êä 3ö : ÎT
*******************************************************************************/
uchar Key_Scan()
{
uchar keyValue = 0 , m;
if (key!= 0xFF)
{
display_Delay1ms(10);
if (key!= 0xFF)
{
keyValue =key;
m = 0;
while ((m<50) && (key!= 0xFF))
{
display_Delay1ms(10);
m++;
}
}
}
return keyValue;
}
/*******************************************************************************
* oˉ êy Ãû : display(long int mn)
* oˉêy1|Äü : ÏÔê¾êyÂë1ü
* êä èë : ÎT
* êä 3ö : ÎT
*******************************************************************************/
void display(long int mn)
{
uchar i;
for( i=0; i<8; i++)
{
switch(i)
{
case 0:LS138C=0; LS138B=0; LS138A=0; P0 = Disp_Tab[(mn / 10000000)]; break;
case 1:LS138C=0; LS138B=0; LS138A=1; P0 = Disp_Tab[(mn % 10000000) / 1000000]; break;
case 2:LS138C=0; LS138B=1; LS138A=0; P0 = Disp_Tab[(mn % 1000000) / 100000]; break;
case 3:LS138C=0; LS138B=1; LS138A=1; P0 = Disp_Tab[(mn % 100000) / 10000]; break;
case 4:LS138C=1; LS138B=0; LS138A=0; P0 = Disp_Tab[(mn % 10000) / 1000]; break;
case 5:LS138C=1; LS138B=0; LS138A=1; P0 = Disp_Tab[(mn % 1000) / 100]; break;
case 6:LS138C=1; LS138B=1; LS138A=0; P0 = Disp_Tab[(mn % 100) / 10]; break;
case 7:LS138C=1; LS138B=1; LS138A=1; P0 = Disp_Tab[mn % 10]; break;
}
display_Delay1ms(1);
P0 = 0x00; // Ïûó°
}
}
/*******************************************************************************
* oˉ êy Ãû : display_Delay1ms
* oˉêy1|Äü : Ñóê±oˉêy
* êä èë : ÎT
* êä 3ö : ÎT
*******************************************************************************/
void display_Delay1ms(uchar t)
{
uchar x;
for(t;t > 0;t--)
{
for(x=120; x>0; x--);
}
}
/*******************************************************************************
* oˉ êy Ãû : timer1 () interrupt 3
* oˉêy1|Äü : T1ÖD¶Ïoˉêy
* êä èë : ÎT
* êä 3ö : ÎT
*******************************************************************************/
void timer1 () interrupt 3
{
TH1=0x3e; //50ms
TL1=0x12;
times++;
}
/*******************************************************************************
* oˉ êy Ãû : inter0() interrupt 0
* oˉêy1|Äü : ía2¿ÖD¶Ïoˉêy
* êä èë : ÎT
* êä 3ö : ÎT
*******************************************************************************/
void inter0() interrupt 0
{
mn++;
}
/*******************************************************************************
* oˉ êy Ãû : timer0 () interrupt 1
* oˉêy1|Äü : T0ÖD¶Ïoˉêy
* êä èë : ÎT
* êä 3ö : ÎT
*******************************************************************************/
void timer0 () interrupt 1
{
TH0=0xec;
TL0=0xa2;
Pulse=~Pulse;
}
/*******************************************************************************
* oˉ êy Ãû : main
* oˉêy1|Äü : Ö÷oˉêy
*******************************************************************************/
void main()
{
TMOD=0x11; //Ñ¡óüÆêyÄ£ê½oí Ñ¡óÃÄ£ê½1
TH0=0xec; //¸ø¼ÆêyÆ÷×°3õÖμ
TL0=0xa2;
TH1=0x3e;
TL1=0x12; //50ms
ET0=1; //ÔêDíT0ÖD¶Ï
ET1=1; //ÔêDíT1ÖD¶Ï
EA=1; //¿a·¢ËùóDÖD¶Ï
EX0=1; //ÔêDíía2¿ÖD¶Ï0ÖD¶Ï
IT0=1; //μçƽ′¥·¢
Pulse=1;
state=0;
while(1)
{
if(key!=1)
{
times=0;
mn=0;
TR0=1;
TR1=1;
while(times<200)
{
display(66666666);
}
TR0=0;
TR1=0;
state=2;
}
if(state==2)
display(mn/10);
else
display(88888888);
}
}
|