1024手机基地看电影,午夜福利视频导航,国产精品福利在线一区,亚洲欧美日韩另类成人,在线观看午夜日本理论片,成年超爽免费网站,国产精品成人免费,精品动作一级毛片,成人免费观看网站,97精品伊人久久大香蕉
標題:
基于51單片機的正弦波頻率測量源程序
[打印本頁]
作者:
lyh8403
時間:
2018-6-3 19:27
標題:
基于51單片機的正弦波頻率測量源程序
單片機源程序如下:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[11] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
long uint pulse=0;//計數輸入的方波的個數;
long uint freq=0;//頻率
uchar temp=0; //臨時變量
uchar f;
void delay_1ms(uint i) //延時函數,約1ms
{
uint x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
void Time0_Init()//定時器和計數器的初始化函數
{
EA=1; //打開全局中斷
TMOD = 0x15;//設定定時器1和計數器0的工作方式為方式1
TH0 = 0xff;//計數器0的初值
TL0 = 0xff;//計數器0的初值
ET0=1; //允許計數器0中斷
TR0=1; //打開計數器0,開始計數
TH1 = 0x3c;//定時器1的初值
TL1 = 0xb0;//定時器1的初值
ET1=1; //允許定時器1中斷
TR1 = 1;//打開定時器1,開始計數
}
void main()
{
Time0_Init(); //初始化定時器和計數器
while(1)
{
P2=0xf7; //以下為數碼管顯示函數
P0=0x00;
P0=table[freq/1000%10];
delay_1ms(2);
P2=0xfb;
P0=0x00;
P0=table[freq/100%10];
delay_1ms(2);
P2=0xfd;
P0=0x00;
P0=table[freq/10%10];
delay_1ms(2);
P2=0xfe;
P0=0x00;
P0=table[freq%10];
delay_1ms(1);
}
}
void ISQ_timer0(void) interrupt 1 //用來計數脈沖數,每一個方波脈沖,計數器進入中斷,脈沖數加一
{
TR0 = 0;
pulse++;
TH0 = 0xff;
TL0 = 0xff;
TR0 = 1;
}
/****************************************************************
用來設定時間,定時器的周期為50ms,當經過20次后,
也即1s后,關斷定時器和計數器,將一秒內計數的脈沖數賦給頻率pulse,
一秒內采集的脈沖數即為輸入方波的頻率
****************************************************************/
void ISQ_time1() interrupt 3
{
TH1 = 0x3c;
TL1 = 0xb0;
temp++;
if(temp==20)
{
TR0 = 0;
TR1 = 0;
temp=0;
freq=202642400/pulse*100/pulse;
pulse=0;//將脈沖數清零,重新計數
TR0 = 1;//打開計數器0,進入下一個循環
TR1 = 1;//打開定時器1,進入下一個循環
}
}
復制代碼
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1