找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2938|回复: 0
打印 上一主题 下一主题
收起左侧

第十届蓝桥杯NE555模块 单片机源程序

[复制链接]
跳转到指定楼层
楼主
NE555是一种时钟芯片,输出一定频率的脉冲信号。就其模块特性,简单点来说,该模块会根据Rb3电位器的阻值,在SIG脚输出相应的频率的脉冲信号。
第十届竞赛中对该模块设置了考点,要求测量其脉冲信号的频率,测量周期小于1秒。
赛方要求将该模块的输出脚SIGNAL与P34,用一块与比赛无关的短接片接起来(如红外/超声波的)如下图。通过查阅芯片手册,可知P34也是T0计数器的管脚


单片机源程序如下:
#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;//打开LED锁存
        P0 = 0xff;                                                        //初始化
        P2 = P2 & 0X1f;                                        //恢复锁存,避免影响其他位
        
        P2 = (P2 & 0X1f) | 0xa0;//打开蜂鸣器、继电器锁存
        P0 = 0x00;
        P2 = P2 & 0X1f;////恢复锁存,避免影响其他位
        
        P2 = (P2 & 0X1f) | 0xc0;//打开位选锁存
        P0 = 0x00;
        P2 = P2 & 0X1f;//恢复锁存,避免影响其他位
        
        P2 = (P2 & 0X1f) | 0xe0;//打开段选锁存
        P0 = 0xff;
        P2 = P2 & 0X1f;//恢复锁存,避免影响其他位
        
}

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;                //定时器时钟12T模式
           TMOD|=0x06;//8位重装载计数模式2
           TL0=0xff;
           TH0=0xff;//1u中断一次进行计数
           ET0=1;
           TR0=1;
                 TF0 = 0;                //清除TF0标志
            EA=1;
}
void Timer1Init()
{
                //        AUXR &= 0xBF;                //定时器时钟12T模式
            TMOD|=0X10;//  16位
                        TL1=(65536-50000)%256;//给定时器赋初值,定时50ms
                        TH1=(65536-50000)/256;
                        TF1 = 0;                //清除TF1标志
                        TR1 = 1;                //定时器1开始计时
                        ET1 = 1;    //打开定时器1中断
            EA=1;
}


void Timer0() interrupt 1
{
        count_f++;//累计NE555输出信号个数
}
void Timer1() interrupt 3
{
        
        TL1=(65536-50000)%256;//给定时器赋初值,定时50ms
        TH1=(65536-50000)/256;
        count_t++;
        if(count_t==20)//每1秒刷新一次频率数据
        {
                //关闭定时器,取出T0里面的值,再打开进行计数
                  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, 下载次数: 34)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表