首页 > 其他分享 >蓝桥杯之单片机学习(三)——共阳数码管的静态显示

蓝桥杯之单片机学习(三)——共阳数码管的静态显示

时间:2022-12-12 16:07:39浏览次数:46  
标签:P2 Delay 共阳 void P0 unsigned 蓝桥 数码管


文章目录

  • ​​一、训练任务​​
  • ​​二、训练重点​​
  • ​​三、训练准备​​
  • ​​3.1 原理图展示​​
  • ​​3.2 数字对照表​​
  • ​​3.3 数码管分路​​
  • ​​3.4 一些解释​​
  • ​​四、代码实现​​
  • ​​注意事项!!!​​

一、训练任务

在CT107D单片机综合训练平台上,8个数码管分别依次显示0-9的值,然后所有数码管一起同时显示0-F的值,如此往复

二、训练重点

  1. 弄清楚数码管的段码与显示数值之间关系。
  2. 供养数码管的基本控制方法,特别是弄清楚COM端与显示码的关系

三、训练准备

3.1 原理图展示

蓝桥杯之单片机学习(三)——共阳数码管的静态显示_51单片机

3.2 数字对照表

蓝桥杯之单片机学习(三)——共阳数码管的静态显示_数码管_02

3.3 数码管分路

蓝桥杯之单片机学习(三)——共阳数码管的静态显示_原理图_03


蓝桥杯之单片机学习(三)——共阳数码管的静态显示_数码管_04

3.4 一些解释

位码:8个大的数码管(com)
段码:一个数码一个个小段(a-h)
com输入:高电平
段码输入:低电平
即可闪亮
Y6控制位码
Y7控制段码
消影与重影
重影:IO口从高电平到低电平,有一定的残留的电流在里面。

在数码管动态显示实验中,每次送完段选数据后,在送入位选数据之前,需要一句
“P0 = 0xff” ,这条语句的专业名称叫做“消影”
解释如下:
在刚送完段选数据后,P0口仍然保持着上次的段选数据,若不加“P0 = 0xff”这句话,再执行接下来的打开位锁存器命令后,原来保持在P0口的段选数据将立即通过位选锁存器直接加在数码管上,接下来才是再次通过P0口给位选锁存器送入位选数据,虽然这个过程非常短暂,但是在数码管高速显示状态下,我们仍然可以看到数码管出现显示混乱的现象,加上消影之后,在开启位锁存器后,P0口数据全为高电平,所以哪个数码管都不会亮,因此这个消影的动作是很重要的

四、代码实现

#include <reg52.h>

typedef unsigned int uint;
typedef unsigned char uchar;

uchar code SMG_duanma[18] =
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
0x88,0x80,0xc6,0xc0,0x86,0x8e,
0xbf,0x7f};//分别是0-9(对应下标),A-F,“-”,“.”


//配置HC138
void InitHC138(uchar n)
{
switch(n)
{
case 4:
P2 = (P2 & 0X1F) | 0X80;
break;
case 5:
P2 = (P2 & 0X1F) | 0Xa0;
break;
case 6:
P2 = (P2 & 0X1F) | 0Xc0;
break;
case 7:
P2 = (P2 & 0X1F) | 0Xe0;
break;
}
}

//延时
void Delay(unsigned int n)
{
while(n--);
while(n--);
}

void ShowSMG_Bit(unsigned pos, uchar dat)
{

InitHC138(6); //数码管的位置
P0 = 0x01 << pos;

InitHC138(7); //数码管的内容
//Delay(100000000);
//Delay(80000);
P0 = SMG_duanma[dat];
Delay(6000);
Delay(6000);
//P0 = 0xff;// 消影

}

void SMG_Static()
{
uchar i,j;
for(i = 0; i < 8; i++)
{
for(j = 0; j < 10; j++)
{
ShowSMG_Bit(i,j);
}
//Delay(600000);
//Delay(600000);
}
}

void Initsys()
{
InitHC138(5);
P0 = 0X00;
InitHC138(4);
P0 = 0XFF;
}

void main()
{
while(1)
{
Initsys();
SMG_Static();
}
}

注意事项!!!

延时必须unsigned int


标签:P2,Delay,共阳,void,P0,unsigned,蓝桥,数码管
From: https://blog.51cto.com/u_15909950/5930328

相关文章

  • 今日份蓝桥杯训练
    题目:解答:#define_CRT_SECURE_NO_WARNINGS1#include<iostream>#include<string>usingnamespacestd;intmain(){charc;//将数字和字符都考虑进去cin>>c;if(c>=......
  • 洛谷P8767 [蓝桥杯 2021 国 A] 冰山 题解 splay tree
    题目链接:​​https://www.luogu.com.cn/problem/P8767​​鸣谢:这道题的顺利解决得到了​​7KByte​​大佬的大力帮助,在此再次表示感谢。首先,我的想法是这样的:使用一个spl......
  • 蓝桥杯校赛题目以及解析
    题目一输入一个字符串,求它包含多少个单词。单词间以一个或者多个空格分开。第一个单词前,最后一个单词后也可能有0到多个空格。比如:"abc   xyz"包含两个单词,"ab  c......
  • 第五次测试 7段数码管绘制
    7段数码管绘制    请画出,系统时间。具体包括:年,月,日,小时,分,秒代码如下:#coding:utf-8#绘制七段数码管,显示当前时间importtimeimportturtleastt#绘制......
  • 7段数码管绘制
    """7段数码管绘制"""importturtle,datetimedefdrawGap():#绘制数码管间隔turtle.penup()turtle.fd(5)defdrawLine(draw):#绘制单段数码管drawGap(......
  • 7段数码管绘制
    importturtle,datetimedefdrawGap():turtle.penup()turtle.fd(5)defdrawLine(draw):drawGap()turtle.pendown()ifdrawelseturtle.penup(......
  • 7段数码管绘制
    #绘制七段数码管importturtleastimporttimedefdrawGap():#绘制数码管间隔的函数t.penup()t.fd(5)defdrawLine(draw):#单个线段的......
  • Python7段数码管绘制
    #七段数码管绘制importturtleastimporttimeasTdefdrawGap():#绘制数码管的间隔t.penup()t.fd(5)defdrawLine(draw):#绘制单段数码管,draw为True时,则实......
  • Python 7段数码管绘制
    #七段数码管绘制importturtleastimporttimeasTdefdrawGap():#绘制数码管的间隔t.penup()t.fd(5)defdrawLine(draw):#绘制单段数码管,draw为True时,则实......
  • 7段数码管绘制
    代码如下: 1importturtle,datetime23defdrawGap():#绘制数码管间隔4turtle.penup()5turtle.fd(5)67defdrawLine(draw):#绘制单......