单片机-数码管

数码管

  • 一个数码管的引脚是10个,显示8字需要7小段,另外还有一个小数点,最后还有一个公共端,生产商为了封装统一,单位数码管都封装10个引脚,其中第3脚和第8脚是连接在一起的
    在这里插入图片描述
    又由公共端可分为共阴极和共阳极
    共阴极数码管:发光二极管的阴极全部连接在一起,通常设计电路时将阴极接地;当我们给数码管的任一个阳极加高电平,对应的这个发光二极管就点亮了
    共阳极数码管:发光二极管的阳极全部连接在一起,通常设计电路时将阳极接高电平;当我们给数码管的任一个阴极加低电平,对应的这个发光二极管就点亮了
    用万用表检测数码管的引脚排列
    将数字万用表置于二极管挡,红表笔接在1脚,然后用黑表笔去接触其他各引脚,假设只有当接触到9脚时,数码管的a段发光,而接触其余引脚时则不发光。由此可知,被测数码管为共阴极结构类型,9脚是公共阴极,1脚则是数码管的a段。接下来再检测各段引脚,仍使用数字万用表二极管挡,将黑表笔固定接在9脚,用红表笔依次接2~10引脚时,数码管的其他段先后分别发光,据此便可绘出该数码管的内部结构和引脚排列图。而共阳极需将红、黑表笔对调。
    在这里插入图片描述

数码管静态显示

  • 当多位数码管应用于某一系统时,它们的"位选“是可独立控制的,而“段选“是连接在一起的,我们可以通过位选信号控制哪几个数码管亮,而在同一时刻,位选选通的所有数码管上显示的数字始终都是一样的,因为它们的段选是连接在一起的,所以送入所有数码管的段选信号都是相同的,那么它们显示的数字必定一样,数码管的这种显示方法叫做静态显示
    在这里插入图片描述
    • 在查看原理图时,原理图中标号相同的节点,在实际电路中是物理电气相连的,最上面一排是6个单位数码管,可以看到所有数码管的阳极,即标有a,b,c,d,e,f,g,h的引脚全部连接在一起,然后与下面的U1元件73HC573锁存器的数据输出端相连,锁存器的数据输入端连接单片机的P0口,P0口同时加了上拉电阻。数码管中WEl,WE2,WE3,WE4,WE5,WE6是它们的位选端,每一个数码对应一个位选端,与下面U2元件74HC573的数据输出端的低6位相连,U2的数据输入端也连接到单片机的P0口。两个锁存器的锁存端分别与单片机的P2.6和P2.7相连
    • 共阴极:
     #include <reg52.h>         //52系列单片机头文件
     sbit dula = P2^6;		   //申明U1锁存器的锁存端
     sbit wela = P2^7;		   //申明U2锁存器的锁存端
     void main()			  //主函数
     {
     		wela=1;	      //打开U2锁存器
     		P0=0xFE	;	      //送入位选信号
     		wela=0;		  //关闭U2锁存器
    
     		dula=1;	      //打开U1锁存器
     		P0=0x7F	;	      //送入段选信号
     		dula=0;		  //关闭U1锁存器
     		while(1);		  //程序停止到这里
     	}
    
    • 共阳极:
      #include <reg52.h>         //52系列单片机头文件
      sbit dula = P2^5;		   //申明U1锁存器的锁存端
      sbit wela = P2^6;		   //申明U2锁存器的锁存端
      void main()			  //主函数
      {
       wela=1;	      //打开U2锁存器
      	P0=0x01	;	      //送入位选信号
      	wela=0;		  //关闭U2锁存器
      
      	dula=1;	      //打开U1锁存器
      	P0=0x80	;	      //送入段选信号
      	dula=0;		  //关闭U1锁存器
      	while(1);		  //程序停止到这里
      }	
      
    • 可选择数码管哪位:
      #include<reg52.h>
      #define uint unsigned int 
      #define uchar unsigned char
      sbit dula=P2^6;
      sbit wela=P2^7;
      sbit HC138A = P2^0;
      sbit HC138B = P2^1;
      sbit HC138C = P2^2;
      uchar num;
      void delayms(uint xms){
      uint i,j;
      for(i=xms;i>0;i--)
    	 	for(j=110;j>0;j--);
      }
      uchar code table[]={0x3f, 0x06, 0x5b, 0x4f,0x66, 0x6d, 0x7d, 0x07,0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};
      void main(){
    	 wela=1;  	//打开U2锁存端
     	HC138A = 1;
     	HC138B = 0;
     	HC138C = 0;   //送入位选信号,低电平有效
     	wela=0;
     	while(1){
     		for(num=0;num<16;num++){	  //16个数循环显示
     			dula=1;		//打开U1锁存端
     			P0=table[num];
     			dula=0;
     			delayms(1500);
     			}
       		 }
      	}
    
    • 共阴极数码管编号:

数码管动态显示

  • 使六个共阴极数码管一次显示1~6:
  • 数码管的动态显示又称为数码管的动态扫描显示,即轮流向各位数码管送出字形码和相应的位选,利用发光二极管的余辉和人眼视觉的暂留作用,使人感觉各位数码管在同时显示
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个基于c52单片机数码管倒计时程序: ```c #include <REG52.H> #define uchar unsigned char #define uint unsigned int sbit LSA = P2 ^ 2; // 数码管控制引脚LSA sbit LSB = P2 ^ 3; // 数码管控制引脚LSB sbit LSC = P2 ^ 4; // 数码管控制引脚LSC sbit DIO = P2 ^ 0; // 数码管数据引脚 sbit CLK = P2 ^ 1; // 数码管时钟引脚 uchar code table[] = { // 数码管显示字符表 0x3f, // 0 0x06, // 1 0x5b, // 2 0x4f, // 3 0x66, // 4 0x6d, // 5 0x7d, // 6 0x07, // 7 0x7f, // 8 0x6f, // 9 }; void delay(uint z) // 延时函数 { uint x, y; for (x = z; x > 0; x--) for (y = 110; y > 0; y--); } void display(uchar num) // 数码管显示函数 { uchar i; for (i = 0; i < 8; i++) { CLK = 0; DIO = (num & 0x80); num <<= 1; CLK = 1; } } void main() { uchar i, j; for (i = 9; i > 0; i--) // 倒计时从9开始 { for (j = 99; j > 0; j--) // 一个循环中有100个数码管显示,相当于1秒钟 { LSA = 0; LSB = 0; LSC = 0; // 显示百位数码管 display(~table[i]); delay(2); LSA = 1; LSB = 0; LSC = 0; // 显示十位数码管 display(~table[j / 10]); delay(2); LSA = 0; LSB = 1; LSC = 0; // 显示个位数码管 display(~table[j % 10]); delay(2); } } } ``` 和数码管相比,数码管的显示方式是相反的,即需要通过将数码管引脚电平置为低电平来开启一个数码管的显示。因此,在程序中需要对数码管的显示字符表进行取反,即将每个字符的数码管引脚电平状态取反,才能正确地显示出来。除此之外,程序的其余部分和数码管的倒计时程序是相同的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值