

NE555 (Timer IC)為8腳時基集成電路,NE555是屬于555系列的計時IC的其中的一種型號,555系列IC的接腳功能及運用都是相容的,只是型號不同的因其價格不同其穩定度、省電、可產生的振蕩頻率也不大相同;而555是一個用途很廣且相當普遍的計時IC,只需少數的電阻和電容,便可產生數位電路所需的各種不同頻率之脈波訊號,
主要特點:
1.只需簡單的電阻器、電容器,即可完成特定的振蕩延時作用,其延時范圍極廣,可由幾微秒至幾小時之久,
2.它的操作電源范圍極大,可與TTL,CMOS等邏輯電路配合,也就是它的輸出電平及輸入觸發電平,均能與這些系列邏輯電路的高、低電平匹配,
3.其輸出端的供給電流大,可直接推動多種自動控制的負載,
4.它的計時精確度高、溫度穩定度佳,且價格便宜,

引腳位:
Pin 1 (接地) -地線(或共同接地) ,通常被連接到電路共同接地,
Pin 2 (觸發點) -這個腳位是觸發NE555使其啟動它的時間周期,觸發信號上緣電壓須大于2/3 VCC,下緣須低于1/3 VCC ,
Pin 3 (輸出) -當時間周期開始555的輸出腳位,移至比電源電壓少1.7伏的高電位,周期的結束輸出回到O伏左右的低電位,于高電位時的最大輸出電流大約200 mA ,
Pin 4 (重置) -一個低邏輯電位送至這個腳位時會重置定時器和使輸出回到一個低電位,它通常被接到正電源或忽略不用,
Pin 5 (控制) -這個接腳準許由外部電壓改變觸發和閘限電壓,當計時器經營在穩定或振蕩的運作方式下,這輸入能用來改變或調整輸出頻率,
Pin 6 (重置鎖定) - Pin 6重置鎖定并使輸出呈低態,當這個接腳的電壓從1/3 VCC電壓以下移至2/3 VCC以上時啟動這個動作,
Pin 7 (放電) -這個接腳和主要的輸出接腳有相同的電流輸出能力,當Pin3為低電平時,Pin7對地為低阻態(對地導通),當Pin3為高電平時,Pin7對于為高阻態
Pin 8 (V +) -這是555計時器IC的正電源電壓端,供應電壓的范圍是+4.5伏特(最小值)至+16伏特(最大值),
NE555在藍橋杯單片機省賽中只考過一次,是在第十屆省賽中,要求使用NE555完成對Pinlv的測量和顯示,如下圖所示:

接下來我們要做的就是對第十屆藍橋杯省賽里關于頻率測量這部分做一個單獨的簡單程式設計,
設計內容:
1.按照上圖顯示格式顯示采集到的頻率值顯示在數碼管上;
2.頻率資料顯示使用 6 位數碼管,當顯示的資料長度不足 6 位時,未使用到的數碼管位應熄滅,
說明:頻率測量功能需將競賽板 J3-SIGNAL 引腳與 P34 引腳短接,頻率大小調節通過板子上的RB3來實作,


#include<stc15f2k60s2.h>
#define uchar unsigned char //定義無符號字符型別uchar
#define uint unsigned int //定義無符號整型型別uint
uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff,0x8e};//數字0~9,“-”,“關”,“F”
uchar yi,er,san,si,wu,liu,qi,ba; //定義字符型變數yi,er,san,si,wu,liu,qi,ba,當作數碼管顯示控制變數
uint fan,fan_send,zheng,zheng_send,trie,pinlv,time;
bit flag=0;
void delayms(int ms); //延時函式
void allinit(); //初始化函式
void display1(uchar yi,uchar er); //第一、二段數碼管函式
void display2(uchar san,uchar si); //第三、四段數碼管函式
void display3(uchar wu,uchar liu); //第五、六段數碼管函式
void display4(uchar qi,uchar ba); //第七、八段數碼管函式
void Timer0Init(void); //5微秒@12.000MHz
void Timer1Init(void); //1毫秒@12.000MHz
void Frequency(); //頻率測量顯示函式
void main()//主函式
{
allinit(); //初始化函式
Timer0Init();
Timer1Init();
yi=1;er=2;san=3;si=4;wu=5;liu=6;qi=7;ba=8;//讓數碼管依次顯示1~8,用來檢驗數碼管顯示函式程式是否有誤
while(1)
{
Frequency(); //頻率測量顯示函式
display1(yi,er); //第一、二段數碼管函式
display2(san,si); //第三、四段數碼管函式
display3(wu,liu); //第五、六段數碼管函式
display4(qi,ba); //第七、八段數碼管函式
}
}
void Frequency() //頻率測量顯示函式
{
yi=12;er=11;san=11;
if(pinlv>=10000){si=pinlv/10000;wu=pinlv%10000/1000;liu=pinlv%1000/100;qi=pinlv%100/10;ba=pinlv%10;}
else if(pinlv>=1000){si=11;wu=pinlv/1000;liu=pinlv%1000/100;qi=pinlv%100/10;ba=pinlv%10;}
else if(pinlv>=100){si=11;wu=11;liu=pinlv/100;qi=pinlv%100/10;ba=pinlv%10;}
else if(pinlv>=10){si=11;wu=11;liu=11;qi=pinlv/10;ba=pinlv%10;}
}
void Timer0Init(void) //5微秒@12.000MHz
{
AUXR |= 0x80; //定時器時鐘1T模式
TMOD &= 0xF0; //設定定時器模式
TL0 = 0xC4; //設定定時初值
TH0 = 0xFF; //設定定時初值
TF0 = 0; //清除TF0標志
// TR0 = 1; //定時器0開始計時
}
void time0() interrupt 1
{
if(P34==0)
{
fan++;
if(flag==0)
{
flag=1;
zheng_send=zheng;
zheng=0;
}
}
else if(P34==1)
{
zheng++;
if(flag==1)
{
flag=0;
fan_send=fan;
fan=0;
}
}
}
void Timer1Init(void) //1毫秒@12.000MHz
{
AUXR |= 0x40; //定時器時鐘1T模式
TMOD &= 0x0F; //設定定時器模式
TL1 = 0x20; //設定定時初值
TH1 = 0xD1; //設定定時初值
TF1 = 0; //清除TF1標志
TR1 = 1; //定時器1開始計時
EA=1;ET1=1;
}
void time1() interrupt 3
{
trie++;
if(trie==969)
{
TR0 = 1;ET0=1;
}
else if(trie==999)
{
TR0 = 0;ET0=0;
trie=0;
time=(zheng_send+fan_send)*5;
pinlv=1000000/time;
}
}
void delayms(int ms)//延時函式
{
uint i,j;
for(i=ms;i>0;i--)
for(j=845;j>0;j--);
}
void allinit()//初始化函式
{
P2=0XA0;P0=0X00; //關閉蜂鳴器繼電器
P2=0X80;P0=0XFF; //關閉所有LED燈
P2=0XC0;P0=0XFF; //選中所有數碼管段選
P2=0XFF;P0=0XFF; //關閉所有數碼管
}
void display1(uchar yi,uchar er)//第一、二段數碼管函式
{
P2=0XC0;P0=0X01; //選中第一個數碼管位選
P2=0XFF;P0=tab[yi]; //讓第一個數碼管顯示yi指向的值
delayms(1); //延時1ms
P2=0XC0;P0=0X02; //選中第二個數碼管位選
P2=0XFF;P0=tab[er]; //讓第一個數碼管顯示er指向的值
delayms(1); //延時1ms
}
void display2(uchar san,uchar si)//第三、四段數碼管函式
{
P2=0XC0;P0=0X04; //選中第s三個數碼管位選
P2=0XFF;P0=tab[san]; //讓第一個數碼管顯示san指向的值
delayms(1); //延時1ms
P2=0XC0;P0=0X08; //選中第四個數碼管位選
P2=0XFF;P0=tab[si]; //讓第一個數碼管顯示si指向的值
delayms(1); //延時1ms
}
void display3(uchar wu,uchar liu)//第五、六段數碼管函式
{
P2=0XC0;P0=0X10; //選中第五個數碼管位選
P2=0XFF;P0=tab[wu]; //讓第一個數碼管顯示wu指向的值
delayms(1); //延時1ms
P2=0XC0;P0=0X20; //選中第六個數碼管位選
P2=0XFF;P0=tab[liu]; //讓第一個數碼管顯示liu指向的值
delayms(1); //延時1ms
}
void display4(uchar qi,uchar ba)//第七、八段數碼管函式
{
P2=0XC0;P0=0X40; //選中第七個數碼管位選
P2=0XFF;P0=tab[qi]; //讓第一個數碼管顯示qi指向的值
delayms(1); //延時1ms
P2=0XC0;P0=0X80; //選中第八個數碼管位選
P2=0XFF;P0=tab[ba]; //讓第一個數碼管顯示ba指向的值
delayms(1); //延時1ms
}
![]()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/278534.html
標籤:其他
