首页 > 其他分享 >蓝桥杯单片机速成2-动态数码管数码管显示

蓝桥杯单片机速成2-动态数码管数码管显示

时间:2024-04-01 21:31:48浏览次数:21  
标签:seg P0 u8 16 蓝桥 数码管 单片机 buf

一、原理图

段选给1是选中 ,该数码管是共阳极的数码管,位选输入0才会电亮一位

二、代码分析


/*************  本地常量声明    **************/
u8 code t_display[]={                       //标准字库
//   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};      //位码

u8 seg_buf[]={16,16,16,16,16,16,16,16};


void seg_set(u8 a,b,c,d,e,f,g,h)//设置数码管,1-8位
{
	seg_buf[0] = a;
	seg_buf[1] = b;
	seg_buf[2] = c;
	seg_buf[3] = d;
	seg_buf[4] = e;
	seg_buf[5] = f;
	seg_buf[6] = g;
	seg_buf[7] = h;
}


void seg_loop()
{
	static u8 i=0;//用来循环选中数码管的段选和位选,注意为静态变量
	P0=0xFF;Y7;Y0;//消隐,先关闭所以的数码管
	P0=T_COM[i];Y6;Y0;//段选,选中第i个数码管
	P0=~t_display[seg_buf[i]];Y7;Y0;//位选,选择输出那一个数据
	if(++i == 8)i=0;//最大值为7
}

void TIME_ISR()  interrupt 1
{
	cnt++;
	seg_loop();//定时器扫描数码管,1ms扫描一次
	cnt %= 1000;
}

u8 seg_buf[]={16,16,16,16,16,16,16,16};

这个数组定义成8个,对应8个数码管,通过修改数组的值来选择字库里面的数据~t_display[seg_buf[i]];Y7;Y0;//位选,选中字库中的第seg_buf[i]个数字,并且取反后赋值给P0口


最上方的字库和位码可以直接在烧录软件中寻找,这里就不解释原理了,直接赋值过来用就行,但是需要注意的是,其中的代码是按照共阴极数码管来写的,所以我们在位选的时候进行了取反操作


使用的时候直接这样写,就会显示1,2,3,4,5,6,7,8

seg_set(1,2,3,4,5,6,7,8);

标签:seg,P0,u8,16,蓝桥,数码管,单片机,buf
From: https://blog.csdn.net/2301_79330491/article/details/137245997

相关文章

  • P8649 [蓝桥杯 2017 省 B] k 倍区间
    importjava.util.*;publicclassMain{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);//读取输入的整数n和kintn=sc.nextInt();//数组长度intk=sc.nextInt();//取模的值......
  • 蓝桥备赛——贪心(2)
    题干 我的代码dic={'*':1,'o':0}s1=input()s2=input()s1=list(s1)s2=list(s2)num1=''num2=''foriins1:#print(i)num1=num1+str(dic[i])forjins2:num2+=str(dic[j])#print(num1)#print(num2)num1=l......
  • C51 单片机(STC89 C52RC)#笔记3
    Task1:基于51核心板设计一个按键计数器。要求:判断KEY1按下,每次按下按键后记录按动次数加1,并且能在数码管上显示,能够从0计数至99。#include<STC89C5xRC.H>voidDelayNums(unsignedintxms) //@11.0592MHz{ while(xms--) { unsignedchari,j; i=2; j=199;......
  • C51 单片机(STC89 C52RC)#笔记2
    Chapter4独立按键输入4.1按键检测原理当按键未按下时,输入芯片引脚的电平为高电平;按键按下时,输入芯片引脚上的电平为低电平。sbitKEY1=P3^2;//位定义P3^2;//判断是否被按下if(0==KEY1){......//按键按下处理}4.2按键软件去抖原理抖动:核心部件为弹性金属弹簧......
  • 基于51单片机智能手腕计步器步数体温检测OLED显示设计20-418
    20-418、51手腕计步器设计-ADXL345-DS18B20-OLED-BELL产品功能描述:本系统由STC89C52单片机+ADXL345加速度传感器+DS18B20温度检测电路+0.96寸OLED液晶显示屏电路+蜂鸣器报警电路+电源电路组成。1、通过ADXL345检测步数,通过DS18B20检测温度。2、0.96寸OLED液晶实时显示步数......
  • 基于STM32单片机智能PID温度控制系统OLED显示设计定制20-408
    20-408、基于STM32智能温度控制系统设计功能:本设计由STM32F103C8T6单片机核心板电路+OLED液晶显示屏电路+DS18B20温度检测电路组成。产品功能描述:1、OLED液晶屏第一列显示目标温度和加热时间。第二列显示实时温度和制冷时间。2、如果当前温度低于目标温度,则系统开始加热,否......
  • 汽车车灯用到的单片机功能
    如果你要入门汽车车灯,首先你要学会哪些单片机功能?最近碰到一个朋友,他从JAVA转行,开始做车灯软件。因为正点原子的单片机资源很全,所以找了一块正点原子的精英开发板作为入门。网上的视频课程很多,看了一段时间教学视频以后,对于基本的时钟、外设、定时器做了了解。列了张清单......
  • [蓝桥杯 2019 省赛 AB] 完全二叉树的权值
    #[蓝桥杯2019省AB]完全二叉树的权值##题目描述给定一棵包含$N$个节点的完全二叉树,树上每个节点都有一个权值,按从上到下、从左到右的顺序依次是$A_1,A_2,\cdotsA_N$,如下图所示:现在小明要把相同深度的节点的权值加在一起,他想知道哪个深度的节点权值之和最大?如果有......
  • 【蓝桥杯】小明要做一个跑步训练。初始时,小明充满体力,体力值计为10000。如果小明跑步,
    【问题描述】小明要做一个跑步训练。初始时,小明充满体力,体力值计为10000。如果小明跑步,每分钟损耗600的体力。如果小明休息,每分钟增加300的体力。体力的损耗和增加都是均匀变化的。小明打算跑一分钟、休息一分钟、再跑一分钟、再休息一分钟……如此循环。如果某个时刻......
  • [蓝桥杯] 管道 java题解
    importjava.util.*;/***管道*其实这道题核心根本不用管管道左边的如何,我们可以把左边当成注水口*/publicclassMain{staticintn;staticint[][]pipes;//阀门安排的地方staticintlen;//管道长度publicstaticvoidmain(String[]a......