蓝桥杯——数码管静态显示

一、原理部分

前面的原理和蜂鸣器差不多,不懂的可以参考如何控制蜂鸣器
下面讲解数码管部分的原理

蓝桥杯——数码管静态显示_第1张图片
数码管内部是8个小的LED按照一定顺序排列而成的,按照从低位到高位的顺序我们依次命名为a b c d e f g dp(小数点) 共8段,对应关系如上图。
例如要让共阴极数码管显示0,则要让abcdef为1,即对应的段码为 0011 1111 转化为16进制则为0x3f。如果为共阳极数码管则对0x3f取反即可。
蓝桥杯——数码管静态显示_第2张图片
上图为数码管部分原理图

二、代码部分

实验平台:CT107D
实验芯片:stc15f2k60s2
实验现象:8个数码管同时显示一样的数字,数字为0-9循环,频率为0.5ms。
代码如下

#include "stc15f2k60s2.h"
#include "intrins.h"
sbit buzz = P0^6;		 //位定义蜂鸣器
unsigned char display[] = {
     0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//定义0-9对应段选数组
void Delay500ms()		//延时0.5ms函数
{
     
	unsigned char i, j, k;

	_nop_();
	_nop_();
	i = 22;
	j = 3;
	k = 227;
	do
	{
     
		do
		{
     
			while (--k);
		} while (--j);
	} while (--i);
}

void close_buzz()	//蜂鸣器上电默认高电平,所以关闭蜂鸣器
{
     
	 P2=0xa0;
	 buzz = 0;
	 P2=0x00;
}

void main()
{
     	  
		unsigned char i;
		close_buzz();
		while(1)
		{
     	
			for(i=0;i<10;i++)
			{
     
				P2 = 0xe0; //打开段选锁存器
				P0 = ~display[i];//数组定义为共阴极的段码,开发板上的为共阳极于是取反
				P2 = 0x00;//关闭锁存器	
				
				Delay500ms();
			}								
		}
}

你可能感兴趣的:(蓝桥杯,单片机)