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];
}