欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
STC12C5A60S2單片機測量頻率為0—1MHZ的程序源碼
[打印本頁]
作者:
YHH(haoge)
時間:
2018-6-6 16:39
標題:
STC12C5A60S2單片機測量頻率為0—1MHZ的程序源碼
分享基于STC12C5A60S2單片機測量頻率為0—1000000Hz源碼,實測頻率500K以上誤差為1—4Hz。
0.png
(8.47 KB, 下載次數: 53)
下載附件
2018-6-7 05:34 上傳
單片機源程序如下:
//****************************************STC12C5A60S2 AD轉換***********************************************//
#include "STC12C5A60S2.h" //頭文件在STC公司主頁上下載
#include "stdio.h"
#include "intrins.h"
bit biaozhi,flag=0;
unsigned char shuzu1[]={"00000000Hz"};
long sum_time=0,out=0;
unsigned int p=0,i;
extern void InT0();
extern void lcd_initial(); //lcd初始化函數聲明
extern void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *point) ;//字符串顯示函數
extern void Timer0Init(void); //50ms@11.0592MHz
void display() //12864顯示函數,顯示頻率
{
shuzu1[0]=out/10000000+0x30;
shuzu1[1]=out/1000000%10+0x30;
shuzu1[2]=out/100000%10+0x30;
shuzu1[3]=out/10000%10+0x30;
shuzu1[4]=out/1000%10+0x30;
shuzu1[5]=out/100%10+0x30;
shuzu1[6]=out/10%10+0x30;
shuzu1[7]=out%10+0x30;
LCD_Write_String(0,3,shuzu1);
}
void HZ50000()
{
p=0;
TL0 = 0x00; //設置定時初值
TH0 = 0x4c; //設置定時初值
TL1 = 0xB0; //設置定時初值
TH1 = 0x3c; //設置定時初值
biaozhi=1; //標志位置1
TR1=1; //定時器1開始計數
TR0=1; //定時器0開始計時
while(biaozhi)//等待1s到來
{
;
}
sum_time=TL1-0xB0+(TH1-0x3c)*256;
out=sum_time;
display();
}
void HZ1M()
{
p=18;
sum_time=0;
TL0 = 0x00; //設置定時初值
TH0 = 0x4c; //設置定時初值
TR0=1; //定時器0開始計時
_nop_();_nop_();_nop_();_nop_();
p++;
biaozhi=1; //標志位置1
TL1 = 0x00; //設置定時初值
TH1 = 0x00; //設置定時初值
TR1=1; //定時器1開始計數
while(biaozhi)//等待50ms到來
{
;
}
sum_time=TH1*256+TL1;
}
void HZ25M()
{
p=18;
sum_time=0;
TL0 = 0xCD; //??????
TH0 = 0xF8; //???????
TR0=1; //定時器0開始計時
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
p++;
biaozhi=1; //標志位置1
TL1 = 0x00; //設置定時初值
TH1 = 0x00; //設置定時初值
TR1=1; //定時器1開始計數
while(biaozhi)//等待2ms到來
{
;
}
sum_time=TH1*256+TL1; //取計數值
}
void delay(unsigned int a) //延時約1ms
{
unsigned int i;
while (--a!=0)
for(i=125;i>0;i--); //1T單片機i=600,若是12T單片機i=125
}
void main()
{
unsigned int s;
P0M0=0; //端口初始化
P0M1=0; //端口初始化
P1M0=0; //端口初始化
P1M1=0; //端口初始化
P2M0=0; //端口初始化
P2M1=0; //端口初始化
InT0(); //外部中斷初始化
Timer0Init();
lcd_initial(); //lcd初始化函數
while(1)
{
if(flag==1)
{
p=18;
TL0 = 0xCD; //定時器0高位寄存器初始值
TH0 = 0xF8; //定時器0高位寄存器初始值,計時2ms
TR0=1; //定時器0開始計時
p++;
biaozhi=1; //標志位置1
TL1 = 0x00; //設置定時初值
TH1 = 0x00; //設置定時初值
TR1=1; //定時器1開始計數
while(biaozhi)//等待2ms到來
{
;
}
sum_time=TH1*256+TL1;
if(sum_time<100)
{
sum_time=0;
HZ50000();
sum_time=0;
}
if(sum_time>99&&sum_time<2000)
{
sum_time=0;
for(s=0;s<20;s++)
{
HZ1M();
out=out+sum_time;
}
if(flag)
display(); //12864顯示函數,顯示頻率
sum_time=0;
}
if(sum_time>1999)
{
sum_time=0;
for(s=0;s<500;s++)
{
HZ25M();
out=out+sum_time;
}
if(flag)
display();
}
p=0;
out=0;
sum_time=0;
}
}
}
void T0InT0() interrupt 0 //定時器T0中斷服務程序
{
delay(20) ;
flag=~flag;
}
void timer0() interrupt 1 //定時器T0中斷服務程序
{
TL0 = 0x00; //設置定時初值
TH0 = 0x4c; //設置定時初值
p++;
if(p==20)
{
TR1=0; //定時器1停止計數
TR0=0; //定時器0停止計時
biaozhi=0;
}
}
復制代碼
所有資料51hei提供下載:
12864顯示測量頻率1MHZ.zip
(63.05 KB, 下載次數: 107)
2018-6-6 16:37 上傳
點擊文件名下載附件
實測可用
下載積分: 黑幣 -5
作者:
baishifanzon
時間:
2019-5-6 12:34
很好的例程,感謝樓主無私的分享
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1