4-数码管显示

发布时间 2023-12-31 00:48:13作者: Jinx8823

4-1静态数码管显示

LED数码管:

数码管是一种简单、廉价的显示器,是由多个发光二极管封装在一起组成“8”字型的器件

数码管引脚定义:

image-20230704171149262

阴极都连接在一起称为共阴极

image-20230926110504602

阳极都连在一起称为共阳极

image-20230926110626741

stc89c52单片机的中的数码管是共阴极的

电路图分析

74LS138(138译码器)

image-20230819003833855

C是高位,A是低位

000对应0111 1111(LED1为0) 001对应1011 1111

74HC245

image-20230819003811291

双向数据缓冲器

DIR控制信号流通方向

image-20230819004249073

电容104 10 0000=10 1000pF=100nF

image-20230819105525157

假如我要点亮的数字为6,此时要连通的数码管引脚就为acdefg,87658765这一端从下往上就是0111 1101,所以十六进制就为0x7D

代码:

静态数码管显示

实现第3位(LED6)为6

#include <STC89C5xRC.H>

void main()
{
	P24=1;
	P23=0;
	P22=1;//这三位决定哪一个数码管接通,101根据上面的74LS138电路图来看就是LED6
	P0=0x7D;
	while(1)
	{
		
		
	}
}

#include <STC89C5xRC.H>

unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void Nixie(unsigned char location,number)
{
	switch(location)
	{
		case 1:P24=1;P23=1;P22=1;break;
		case 2:P24=1;P23=1;P22=0;break;
		case 3:P24=1;P23=0;P22=1;break;
		case 4:P24=1;P23=0;P22=0;break;
		case 5:P24=0;P23=1;P22=1;break;
		case 6:P24=0;P23=1;P22=0;break;
		case 7:P24=0;P23=0;P22=1;break;
		case 8:P24=0;P23=0;P22=0;break;
	}
	P0=NixieTable[number];
}
void main()
{
	Nixie(5,8);
	while(1)
	{
		
		
	}
}

4.2动态数码管显示

段选,位选概念

其中会产生段选,位选的冲突,所以在段选后要进行请0操作,防止对下一位的位选产生影响

位选:选择要显示哪一个数码管(每一个数码管中有8个段)

段选:要显示数码管当中的哪一个灯管

#include <STC89C5xRC.H>

unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

void Delay(unsigned int xms)		//@11.0592MHz
{
	unsigned char i, j;
	while(xms--)
	{
		i = 2;
		j = 199;
		do
		{
			while (--j);
		} while (--i);
	}
}

void Nixie(unsigned char location,number)
{
	switch(location)
	{
		case 1:P24=1;P23=1;P22=1;break;
		case 2:P24=1;P23=1;P22=0;break;
		case 3:P24=1;P23=0;P22=1;break;
		case 4:P24=1;P23=0;P22=0;break;
		case 5:P24=0;P23=1;P22=1;break;
		case 6:P24=0;P23=1;P22=0;break;
		case 7:P24=0;P23=0;P22=1;break;
		case 8:P24=0;P23=0;P22=0;break;
	}
	P0=NixieTable[number];
	Delay(1);
	P0=0x00;
}

void main()
{
	
	while(1)
	{
		Nixie(1,4);
//		Delay(20);
		Nixie(2,5);
//		Delay(20);
		Nixie(3,6);
//		Delay(20);
	}
}

数码管驱动方式

以上这些代码都是使用单片机直接扫描:硬件设备简单,但会耗费大量的CPU时间

专用芯片驱动:内部自带显存,扫描电路,单片机只需要告诉他显示什么即可(例:TM1640)