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这样赋值。

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

    关注

    32

    文章

    1879

    浏览量

    91045
  • 函数
    +关注

    关注

    3

    文章

    4323

    浏览量

    62516
  • keil
    +关注

    关注

    68

    文章

    1212

    浏览量

    166776
  • 代码
    +关注

    关注

    30

    文章

    4766

    浏览量

    68458
  • 共阴数码管
    +关注

    关注

    0

    文章

    11

    浏览量

    7807
收藏 人收藏

    评论

    相关推荐

    数码管与矩阵键盘联合应用设计

    AMetal 提供了数码管和矩阵键盘联合使用的驱动,其本质上就是数码管驱动和矩阵键盘驱动的简单整合,避免了在多个实例信息中提供一些相同的信息,如数码管实例信息中的位选引脚在和矩阵键盘实
    的头像 发表于 01-19 09:31 7882次阅读
    <b class='flag-5'>数码管</b>与矩阵键盘联合应用设计

    数码管的基本知识

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

    了解数码管的工作原理

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

    数码管显示实验

    数码管显示实验 、实验目的数码管是单片机系统常用的输出显示器件,单个数码管可以显示0~F 和一些简单符号。本实验要求
    发表于 09-28 12:28 1.6w次阅读
    <b class='flag-5'>数码管</b>显示实验

    数码管百科知识

    数码管百科知识  数码管种半导体发光器件,其基本单元是发光二极。   【数码管的分
    发表于 11-06 11:46 2276次阅读

    7数码管基本知识

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

    关于PID一些常用知识

    本文档详细介绍分析了关于PID的一些常用知识
    发表于 08-29 14:22 2次下载

    关于EEPROM读写与数码管显示实验

    关于EEPROM读写与数码管显示实验(嵌入式开发平台图片)-关于EEPROM读写与数码管显示实验,适合感兴趣的学习者学习,可以提高自己的能力,大家可以多交流哈
    发表于 08-04 12:00 9次下载
    <b class='flag-5'>关于</b>EEPROM读写与<b class='flag-5'>数码管</b>显示实验

    蓝桥杯单片机学习之数码管

    这里是我的数码管的学习笔记,欢迎大家起进步数码管的初始化原理参照以下链接(本人写的博客)初始化原理请务必多看下,里面还有
    发表于 11-23 17:21 7次下载
    蓝桥杯单片机学习之<b class='flag-5'>数码管</b>

    单片机零基础入门(8-1)学会单片机数码管,这篇文章就够了,文吃透数码管---数码管如何定义引脚?数码

    单片机零基础入门(8-1)学会单片机数码管,这篇文章就够了,文吃透数码管---数码管如何定义引脚?数码管如何驱动?驱动方式有哪些?单片机中
    发表于 11-25 18:36 38次下载
    单片机零基础入门(8-1)学会单片机<b class='flag-5'>数码管</b>,这篇文章就够了,<b class='flag-5'>一</b>文吃透<b class='flag-5'>数码管</b>---<b class='flag-5'>数码管</b>如何定义引脚?<b class='flag-5'>数码</b>

    单片机零基础入门(8-2)实战:在数码管中实现显示个数字--在数码管指定位置显示个数字----单片机数码管实战

    单片机零基础入门(8-2)实战:在数码管中实现显示个数字--数码管知识的应用、上节回顾:二、本节需求:三、需求分析:四、源代码:
    发表于 01-12 18:19 13次下载
    单片机零基础入门(8-2)实战:在<b class='flag-5'>数码管</b>中实现显示<b class='flag-5'>一</b>个数字--在<b class='flag-5'>数码管</b>指定位置显示<b class='flag-5'>一</b>个数字----单片机<b class='flag-5'>数码管</b>实战

    数码管驱动学习笔记

    电子发烧友网站提供《数码管驱动学习笔记.pdf》资料免费下载
    发表于 11-05 17:28 0次下载

    单片机数码管驱动学习笔记

    51单片机数码管驱动笔记
    发表于 11-06 17:23 1次下载

    数码管笔记

    1.共阴极/共阳极数码管的内部组成结构2..共阴极/共阳极数码管的驱动电路3.数码管显示的字符/段选/位选
    发表于 11-06 17:18 3次下载

    数码管笔记分享

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