小白跟做江科大51单片机之按键控制蜂鸣器

1.导入相关文件

①Delay.c

void Delay(unsigned char mns)    //@12.000MHz
{
    unsigned char  i, j;
  while(mns)
    {
        i = 2;
        j = 239;
        do
        {
            while (--j);
        } while (--i);
        mns--;
    }
}

②Delay.h

#ifndef _DELAY_H__
#define _DELAY_H__
void Delay(unsigned char mns);
#endif

③key.c

#include <REGX52.H>
#include "Delay.h"

/**
  * @brief  获取独立按键键码
  * @param  无
  * @retval 按下按键的键码,范围:0~4,无按键按下时返回值为0
  */
unsigned char Key()
{
    unsigned char KeyNumber=0;
    
    if(P3_1==0){Delay(20);while(P3_1==0);Delay(20);KeyNumber=1;}
    if(P3_0==0){Delay(20);while(P3_0==0);Delay(20);KeyNumber=2;}
    if(P3_2==0){Delay(20);while(P3_2==0);Delay(20);KeyNumber=3;}
    if(P3_3==0){Delay(20);while(P3_3==0);Delay(20);KeyNumber=4;}
    
    return KeyNumber;
}
④key.h

#ifndef __KEY_H__
#define __KEY_H__

unsigned char Key();

#endif
 

⑤Nixie.c

#include <REGX52.H>
#include "Delay.h"    //包含Delay头文件

//数码管段码表
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

//数码管显示子函数
void Nixie(unsigned char Location,Number)
{
    switch(Location)        //位码输出
    {
        case 1:P2_4=1;P2_3=1;P2_2=1;break;
        case 2:P2_4=1;P2_3=1;P2_2=0;break;
        case 3:P2_4=1;P2_3=0;P2_2=1;break;
        case 4:P2_4=1;P2_3=0;P2_2=0;break;
        case 5:P2_4=0;P2_3=1;P2_2=1;break;
        case 6:P2_4=0;P2_3=1;P2_2=0;break;
        case 7:P2_4=0;P2_3=0;P2_2=1;break;
        case 8:P2_4=0;P2_3=0;P2_2=0;break;
    }
    P0=NixieTable[Number];    //段码输出
}

⑥Nixie.h

#ifndef __NIXIE_H__
#define __NIXIE_H__

void Nixie(unsigned char Location,Number);

#endif
2.查看原理图定义端口

这里标错了,应该是P2_5的端口

3.编写main.c代码

#include <REGX52.H>
#include "Key.h"
#include "Nixie.h"
#include "Delay.h"

sbit Buzzer=P2^5;

unsigned char keynum;

void main()
{
    unsigned int i;
    //默认数码管显示为0
    Nixie(1,0);
    while(1)
    {
        keynum=Key();
        if(keynum)
        {
            Nixie(1,keynum);
            //循环一次Delay(1);1ms,500次就是500ms
            //按下键之后,这段代码会让蜂鸣器以200HZ的频率响500ms
            //如果没有这个for,只会响一声就断
            for(i=0;i<500;i++)
          {
              Buzzer=!Buzzer;
               Delay(1);
          }
        }
    }
}
4.结果

蜂鸣器之按键控制


再做的时候感觉只要四位数字即可,没必要上8位数字,当前这个小试验也用不到8位数字。所以我对Nixie.c文件进行了以下改动:

#include <REGX52.h>
#include "delay.h"

unsigned char shownum[]={0x3F,0x06,0x5B,0x4F,0x66};

void neix_show(unsigned char loc,num)
{
    switch(loc)
    {
        case 1:P2_4=1;P2_3=1;P2_2=1;break;
        case 2:P2_4=1;P2_3=1;P2_2=0;break;
        case 3:P2_4=1;P2_3=0;P2_2=1;break;
        case 4:P2_4=1;P2_3=0;P2_2=0;break;
    }
    P0=shownum[num];
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值