找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3484|回復(fù): 0
收起左側(cè)

第十屆藍(lán)橋杯NE555模塊 單片機(jī)源程序

[復(fù)制鏈接]
ID:387744 發(fā)表于 2020-3-3 15:57 | 顯示全部樓層 |閱讀模式
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ù)器的管腳
51hei截圖_20200303155451.png 51hei截圖_20200303155613.png

單片機(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)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表