0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

关于数码管的一些知识笔记

CHANBAEK 来源:狂锤硬件 作者: 顾 2023-06-28 11:29 次阅读

“写写关于数码管的一些知识笔记”

图片

01段码

1.共阴数码

图片

2.共阳数码管

图片

02仿真

元件有:80C51、button、7SEG-MPX6-CC(共阴数码管)

数码管:cc是共阴、ca是共阳

图片

03代码结构

晶振频率设置为12MHZ,一条指令的执行时间为10μs。

//*****引入头文件
#include < reg51.h >


//*****声明函数和变量、引脚的定义
#define u8  unsigned char      //8位无符号数
#define u16 unsigned int       //16位无符号数
//*****延时函数的声明
 void Delay();
//*****主函数
void main(){
  while(1){
  }
}


//*****延时函数:1s
void Delay(){
  u16 i,j;
  for(i = 0; i < 1000; i++)
    for(j = 0; j < 100; j++);
}

04写入keil的代码

一、共阴数码管显示0~15。

代码如下:

//*****引入头文件
#include < reg51.h >


//*****声明函数和变量、引脚的定义
#define u8  unsigned char
#define u16 unsigned int


sbit button = P1^4;  //定义引脚P1^4为按钮的控制引脚


//******装有字形码的数组table_cc  --这个是共阴极的
u8 Table_cc[]={
            0x3f,0x06,0x5b,0x4f,
            0x66,0x6d,0x7d,0x07,
            0x7f,0x6f,0x77,0x7c,
            0x39,0x5e,0x79,0x71
};


//*****延时函数的声明
void Delay();


//*****主函数
void main(){
  u8 i;
  P3 = 0x00;   //因为是共阴极数码管,P3连接的是数码管的阴极,得置低电平,共阴数码管才能其效果
  while(1){
    for( i = 0 ; i< 16 ; i++){
        P2 = Table_cc[i];
        Delay();
    }
  }
}


//*****延时函数
void Delay(){
  u16 i,j;
  for(i = 0; i < 1000; i++)
    for(j = 0; j < 100; j++);
}

二、用阳极数码管的字形码通过共阴的数码管显示数字。

【PS:可以将共阴数码管换成共阳数码管,我只是偷懒,不想更换,如果更换了数码管,直接将字形码全部替换掉就行,不用去修改主函数的内容,共阳的主函数和共阴的主函数是一样的】

修改字形码


u8 Table_cc[]={
            0x3f,0x06,0x5b,0x4f,
            0x66,0x6d,0x7d,0x07,
            0x7f,0x6f,0x77,0x7c,
            0x39,0x5e,0x79,0x71
};
更换为
u8 Table_ca[]={
            0xc0,0xf9,0xa4,0xb0,
            0x99,0x92,0x82,0xf8,
            0x80,0x90,0x88,0x83,
            0xc6,0xa1,0x86,0x8e
};

完整代码如下:

#include < reg51.h >


#define u8  unsigned char
#define u16 unsigned int


//*****装有字形码的数组table_ca  --这个是共阳极的
u8 Table_ca[]={
            0xc0,0xf9,0xa4,0xb0,
            0x99,0x92,0x82,0xf8,
            0x80,0x90,0x88,0x83,
            0xc6,0xa1,0x86,0x8e
};
void Delay();


void main(){
  u8 i;
  P3 = 0x00;
  while(1){
    for( i = 0 ; i< 16 ; i++){
        P2 = ~Table_ca[i];  //这里改变了,因为是共阴数码管,使用共阳字形码需要将字形码取反
        Delay();
    }
  }
}
void Delay(){
  u16 i,j;
  for(i = 0; i < 1000; i++)
    for(j = 0; j < 100; j++);
}

05加入按键button控制

由图可知,P1^0和P1^4是线与的关系,只有当P1^0与P1^4都为高电平时,结果才为高电平,如果其中有一个为低电平,结果就为低电平。

那么我们怎么样才能判断按键是否按下呢?

答案是:我们将其中一个引脚置为低电平,另外一个置为高电平,如果按键按下了,置为高电平的引脚会输出低电平。

//在初始化前,得先定义控制引脚
sbit Key = P1^4;

首先是将P1^0置为低电平,P1^4置为高电平

// 在main函数里面加上这句话
  P1 = 0x10;    //按键控制初始化

完整代码如下:

#include < reg51.h >


#define u8  unsigned char
#define u16 unsigned int


sbit Key = P1^4;


u8 Table_cc[]={
            0x3f,0x06,0x5b,0x4f,
            0x66,0x6d,0x7d,0x07,
            0x7f,0x6f,0x77,0x7c,
            0x39,0x5e,0x79,0x71
};


void main(){
  P3 = 0x00;
  P1 = 0x10;
  while(1){
   if(Key == 0){
      P2=Table_cc[1];
    }
  }
}

未按下按键前 ,运行效果如下:

图片

为什么我们没有运行前,它就已经有数字显示了呢,因为我们没有初始化,将P2置为低电平。

将主函数修改为:

void main(){
  P3 = 0x00;  //片选
  P1 = 0x10;  //按键初始化
  P2 = 0x00;  //黑屏
  while(1){
   if(Key == 0){
      P2=Table_cc[1];
    }
  }
}

未按下按键前 ,运行效果如下:

图片

按下按键后 ,效果如下:

图片

06题外话

之前的案例是建立在我们的P1端口是没有运行的,是刚刚使用的,刚初始化的,所以我们可以直接将P1赋值为0x10;

但是如果当我们这个P1端口已经在使用中了,我们要在修改P1^0和P1^4的基础下,不变动P1端口的其它引脚的值,那我们应该这样做:

P1 = P1 & 0xfe | 0x10;

& 0xfe 是为了将P1^0置为0,使其它引脚电平不变,而 | 0x10 是为了将P1^4 置为 1,使其它引脚电平不变,由此,P1这样赋值。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数码管
    +关注

    关注

    31

    文章

    1827

    浏览量

    89948
  • 函数
    +关注

    关注

    3

    文章

    3868

    浏览量

    61309
  • keil
    +关注

    关注

    68

    文章

    1196

    浏览量

    165311
  • 代码
    +关注

    关注

    30

    文章

    4555

    浏览量

    66767
  • 共阴数码管
    +关注

    关注

    0

    文章

    11

    浏览量

    7744
收藏 人收藏

    评论

    相关推荐

    关于电脑的一些基础知识

    关于电脑的一些基础知识
    发表于 05-30 16:27

    一些关于电脑的相关知识

    一些关于电脑的相关知识
    发表于 06-01 16:24

    关于数码管的问题

    位右移 }P2口分别接8个7断数码管,低电平动作。P1都是数码管a,b,c,d,e,f,g,dp的公共断,高电平动作。因为PI没有操作所以是高电平,旦P2给哪个数码管通电
    发表于 08-04 11:07

    1.8寸数码管简单时钟

    `在网上找了许多个资料来参考仿造,用的是DS1302,DS12C887组合的,结果都不成功,要不显示乱就是没显示,或许是我不懂单片机的原因,因为我只懂电子方面的一些知识,正在学习中.......本来
    发表于 12-24 00:20

    LED数码管

    ,即可显示出从0到9的系列教字。通常在七段数码管的右下角还有个圆点,以便显示小数点。 在七段LED数码管的基础上再增加一些笔画段,就构成了“米字
    发表于 01-04 01:35

    关于数码管显示、中断以及delay()函数的一些困惑

    本帖最后由 leihanswan 于 2013-7-24 12:26 编辑 今晚编写如下程序,想用中断来实现数码管秒钟显示个数,循环显示。但是发现数码管显示
    发表于 07-24 01:17

    数码管的基本知识

    的电子设备。玻璃中包括个金属丝网制成的阳极和多个阴极大部分数码管阴极的形状为数字中充以低压气体,通常大部分为氖加上一些汞和/或氩给某
    发表于 07-19 09:33

    了解数码管的工作原理

    这里是我的数码管的学习笔记,欢迎大家起进步数码管的初始化原理参照以下链接(本人写的博客)初始化原理请务必多看下,里面还有
    发表于 12-02 07:05

    F3461BH数码管基础知识介绍

    数码管基础知识CT107D单片机综合实训平台上使用的数码管是F3461BH,告诉我们数码管的类型。倒数第2个字母是“B”,说明这个数码管是共
    发表于 12-02 07:08

    数码管如何定义引脚

    单片机零基础入门(8-1)学会单片机数码管,这篇文章就够了,文吃透数码管---数码管如何定义引脚?数码管如何驱动?驱动方式有哪些?单片机中
    发表于 12-08 07:06

    数码管动态扫描显示数字的有关知识

    今天恰好学到了按键这部分!所以结合之前编写数码管动态扫描显示数字的有关知识编了代码实现了个小功能~功能:按下按键,数码管显示的数字加
    发表于 01-06 07:57

    数码管显示的原理

    节学的还是挺久的,180分的视频!其中的中断,定时需要好好理解,不是很明白。三、数码管显示的原理、数码管的静态显示....1. 引脚第二功能....2. 数码管显示
    发表于 01-24 06:12

    数码管相关知识资料分享

    数码管相关知识资料分享
    发表于 11-06 23:21

    7数码管基本知识

    数码管介绍,里面介绍了数码管的基本知识。好东西为什么要20个字来介绍呢?
    发表于 02-23 15:34 5次下载

    数码管笔记分享

    数码管笔记
    的头像 发表于 11-06 13:38 191次阅读
    <b class='flag-5'>数码管</b><b class='flag-5'>笔记</b>分享