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

描述

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

数码管

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

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分