利用STC89C52RC单片机开发板实现:使用2位数码管循环显示00-99,每次间隔1s,并且当计数到20时,则蜂鸣器鸣响1次。
程序实现分析:
1、定义数码管位选引脚(P2.4、P2.5、P2.6、P2.7)
2、定义个位、十位显示函数(用来未选第1、2位显示个位、十位上的数字)
3、定义延时函数(使用for循环嵌套实现空语句执行,从而达到延时的效果)
4、定义计数变量,分别计算出个位、十位的数,将其传入到个位、十位显示的函数
5、结合延时函数,实现数字的显示
6、判断计数变量大于99,则重新赋值为0
3、代码实现
(1)导入头文件及引脚定义
#include <reg52.h>
sbit pos1 = P2^4; // 第1为数码管位选控制位
sbit pos2 = P2^5; // 第2为数码管位选控制位
sbit pos3 = P2^6; // 第3为数码管位选控制位
sbit pos4 = P2^7; // 第4为数码管位选控制位
sbit fmq = P2^3; // 蜂鸣器控制位
(2)定义个位、十位显示函数
// 分别对应:0/1/2/3/4/5/6/7/8/9
int code_sz[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
// 宏定义:简写 unsigned int
#define uint unsigned int
// 函数声明
void show_ge(uint x);
void show_shi(uint y);
// 显示个位数字:左起第2位数码管
void show_ge(uint x) // x:计算的个位数的值,对应数组中的索引,从而取到对应的值
{
P0 = 0x00; // P0(段选位)复位
pos1 = 0;
pos2 = 1; // 选择第2位数码管
pos3 = 0;
pos4 = 0;
P0 &