蓝桥杯电子类单片机组模块——动态数码管

历年的蓝桥杯单片机组比赛都会考到数码管模块;对于省赛以及国赛来说,动态数码管都是必考模块!

现在来给大家介绍动态数码管的使用方法

1、对数码管进行操作,无需改变跳帽的位置

2、数码管相关原理图如下

在这里插入图片描述

  • 在这里我只展示了数码管显示模块的主要部分。其他是一些门电路,大家可以参照官方给定的PDF。

  • 注意CT017D开发版上的数码管是共阳数码管。

  • 打开段选有关锁存器的代码为:P2=0XE0;打开位选有关锁存器的代码为:P2=0XC0;关闭段选和位选有关锁存器的代码均为:P2=0X00;

  • 动态数码管扫描的一般操作:一、先打开位选锁存器,将0x00送入锁存器中并保存。(消隐)二、打开段选锁存器,将需要的数值送入对应数码管中并保存。三、再次打开位选锁存器,将相应位选代码送入对应锁存器并保存。

3、如下,附上动态数码管扫描代码块。

#include "STC15F2K60S2.h"

#define u8 unsigned char 


 u8 code t_display[]={                   //段选代码,stc—isp可生成,但注意使用时应取反
//   0    1    2    3    4    5    6    7    8    9    A    B    C    D    E    F
    0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,
//black  -     H    J    K    L    N    o   P    U     t    G    Q    r   M    y
    0x00,0x40,0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E,0x78,0x3d,0x67,0x50,0x37,0x6e,
    0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x46};    //0. 1. 2. 3. 4. 5. 6. 7. 8. 9. -1

u8 code T_COM[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};  //位选代码,stc—isp可生成

void Timer0Init(void)		//配置定时器0,1ms中断
{
	AUXR |= 0x80;		
	TMOD &= 0xF0;		
	TL0 = 0xCD;		
	TH0 = 0xD4;		
	TF0 = 0;		
	TR0 = 1;		
	ET0=1;
	EA=1;
}

u8 test_display[8]={0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66};//编辑要进行数码管显示的数组
void main()
{
	P0=~0X00;P2=0X80;P2=0X00; //关闭led外设
	P2=0XA0;P0=0X00;P2=0X00;  //关闭蜂鸣器以及寄存器外设
	Timer0Init();
	while(1)
	{
			//循环执行任务
	}
}

void Timer0()	interrupt 1	//定时器0中断
{
		static int smg_count=0,i=0;
		smg_count++;
		if(smg_count==2)//2ms扫描一次,人眼分辨不出扫描先后
		{
			smg_count=0;
			P2=0XC0;P0=0X00;P2=0X00;//消隐
			P2=0XE0;P0=~test_display[i];P2=0X00;//对第i+1个数码管赋值,注意取非号
			P2=0XC0;P0=T_COM[i];P2=0X00;//选通第i+1个数码管
			
			i++;
			if(i==8){i=0;}//从第八个数码管回到第一个数码管
			
		}
}

祝大家在蓝桥杯比赛中获得优异的成绩!
——南昌大学 电子183刘昊

扫描二维码关注公众号,回复: 9401182 查看本文章
发布了3 篇原创文章 · 获赞 3 · 访问量 83

猜你喜欢

转载自blog.csdn.net/qq_44629819/article/details/104490649