|
NE555是一種時(shí)鐘芯片,輸出一定頻率的脈沖信號(hào)。就其模塊特性,簡(jiǎn)單點(diǎn)來(lái)說(shuō),該模塊會(huì)根據(jù)Rb3電位器的阻值,在SIG腳輸出相應(yīng)的頻率的脈沖信號(hào)。
第十屆競(jìng)賽中對(duì)該模塊設(shè)置了考點(diǎn),要求測(cè)量其脈沖信號(hào)的頻率,測(cè)量周期小于1秒。
賽方要求將該模塊的輸出腳SIGNAL與P34,用一塊與比賽無(wú)關(guān)的短接片接起來(lái)(如紅外/超聲波的)如下圖。通過(guò)查閱芯片手冊(cè),可知P34也是T0計(jì)數(shù)器的管腳
單片機(jī)源程序如下:
#include<STC15F2K60S2.H>
typedef unsigned char u8;
typedef unsigned int u16;
u8 code smgduan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
u16 count_t=0,count_f=0,F_Hz=0;
void Smg_Display(u8 wei,u8 duan);
void Delayms(u16 ms);
void Timer0Init();
void Timer1Init();
void Init()
{
P2 = (P2 & 0X1f) | 0x80;//打開(kāi)LED鎖存
P0 = 0xff; //初始化
P2 = P2 & 0X1f; //恢復(fù)鎖存,避免影響其他位
P2 = (P2 & 0X1f) | 0xa0;//打開(kāi)蜂鳴器、繼電器鎖存
P0 = 0x00;
P2 = P2 & 0X1f;////恢復(fù)鎖存,避免影響其他位
P2 = (P2 & 0X1f) | 0xc0;//打開(kāi)位選鎖存
P0 = 0x00;
P2 = P2 & 0X1f;//恢復(fù)鎖存,避免影響其他位
P2 = (P2 & 0X1f) | 0xe0;//打開(kāi)段選鎖存
P0 = 0xff;
P2 = P2 & 0X1f;//恢復(fù)鎖存,避免影響其他位
}
void main()
{
Init();
Timer0Init();
Timer1Init();
while(1)
{
Smg_Display(3,F_Hz/10000);
Smg_Display(4,F_Hz%10000/1000);
Smg_Display(5,F_Hz%1000/100);
Smg_Display(6,F_Hz%100/10);
Smg_Display(7,F_Hz%10);
}
}
void Smg_Display(u8 wei,u8 duan)
{
P2 = (P2 & 0X1f) | 0xe0;//消隱
P0=0XFF;
P2 = P2 & 0X1f;
P2 = (P2 & 0X1f) | 0xc0;//位選
P0 = 0x01<<wei;
P2 = P2 & 0X1f;
P2 = (P2 & 0X1f) | 0xe0;//段選
P0=smgduan[duan];
Delayms(1);//
P0=0XFF;
P2 = P2 & 0X1f;
}
void Delayms(u16 ms)
{
int i,j;
for(i=0;i<ms;i++)
for(j=845;j>0;j--);
}
void Timer0Init()
{
// AUXR &= 0x7F; //定時(shí)器時(shí)鐘12T模式
TMOD|=0x06;//8位重裝載計(jì)數(shù)模式2
TL0=0xff;
TH0=0xff;//1u中斷一次進(jìn)行計(jì)數(shù)
ET0=1;
TR0=1;
TF0 = 0; //清除TF0標(biāo)志
EA=1;
}
void Timer1Init()
{
// AUXR &= 0xBF; //定時(shí)器時(shí)鐘12T模式
TMOD|=0X10;// 16位
TL1=(65536-50000)%256;//給定時(shí)器賦初值,定時(shí)50ms
TH1=(65536-50000)/256;
TF1 = 0; //清除TF1標(biāo)志
TR1 = 1; //定時(shí)器1開(kāi)始計(jì)時(shí)
ET1 = 1; //打開(kāi)定時(shí)器1中斷
EA=1;
}
void Timer0() interrupt 1
{
count_f++;//累計(jì)NE555輸出信號(hào)個(gè)數(shù)
}
void Timer1() interrupt 3
{
TL1=(65536-50000)%256;//給定時(shí)器賦初值,定時(shí)50ms
TH1=(65536-50000)/256;
count_t++;
if(count_t==20)//每1秒刷新一次頻率數(shù)據(jù)
{
//關(guān)閉定時(shí)器,取出T0里面的值,再打開(kāi)進(jìn)行計(jì)數(shù)
ET0=0;
TR0=0;
TR1=0;
F_Hz=count_f;//
TR0=1;
TR1=1;
ET0=1;
count_f=0;
count_t=0;
}
}
全部資料51hei下載地址:
NE555.zip
(24.64 KB, 下載次數(shù): 34)
2020-3-3 15:56 上傳
點(diǎn)擊文件名下載附件
|
評(píng)分
-
查看全部評(píng)分
|