QX------mini51单片机学习------(5)数码管的静态与动态显示

目录

1数码管应用场景

2数码管显示原理

3静态与动态显示

474HC573锁存器工作原理

5上拉电阻的作用

6原理图分析

7实践

1数码管应用场景

2数码管显示原理

 

图(b)左边是共阴极,右边是共阳极 

GND是公共极,可以用万用表测,拿黑脚笔接GND,拿宏脚笔接a,如果a亮了就是共阴极,如果没反应可以换一下

3静态与动态显示

4   74HC573锁存器工作原理

使用锁存器节省硬件资源 

 

 5上拉电阻的作用

 

为什么要接上拉电阻?

开漏:可以输出低电平不能输出高电平,加了上拉电阻就可以两个都输出

G与S有一个正偏D与S才导通,G接正电压,S接地这个情况导通,如果G是0,D与S断开

6原理图分析

 

锁存器io口电流大,用电阻限流一下

视频是锁存器控制数码管,一个是位,一个是段

Q要输出高低电平,OE接地, LE高电平,Q受D的影响

先给LE1,显示位数,再给0,去控制段选

7实践

动态显示:段选并联,动态扫描,利用余晖和视觉暂留,起到数码管同时显示的效果

视频的

#include<reg52.h>
#include<intrins.h>

#define uint unsigned int 
#define uchar unsigned char
	
sbit DU = P2^6;
sbit WE = P2^7;
//code固定table的值,code很大8kram区小
uchar code table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};
void delay(unsigned int xms)		//@12.000MHz
{
	unsigned char i, j;
	while(xms--)
	{
		i = 2;
	j = 239;
	do
	{
		while (--j);
	} while (--i);
	}

	
}

void display(uchar i)
{
	uchar bai,shi,ge;
	bai=i/100;
	shi = i%100/10;
	ge = i%10;
	
	//百位
	P0 = 0xff;
	WE = 1;//打开锁存器(第二次循环时,位选锁存器打开,P0还是第一次循环时的
		//0x5b改变了位选的值,此时打开了别的数码管
	P0=0xfe;//位选给0
	WE = 0;//锁存器锁存
	
	DU = 1;
	P0 = 0x06;//0000 0110 共阴极给1亮
	DU = 0;
		delay(5);
		
	//十位
	P0 = 0xff;
	WE = 1;//打开锁存器
	P0=table[bai];//1111 1101位选给0
	WE = 0;//锁存器锁存
	
		P0 = 0xff;
	DU = 1;
	P0 = table[shi];//0101 1011 共阴极给1亮
	DU = 0;
		delay(5);
		
		//个位
		P0 = 0xff;
	WE = 1;//打开锁存器(第二次循环时,位选锁存器打开,P0还是第一次循环时的
		//0x5b改变了位选的值,此时打开了别的数码管
	P0=0xfb;//位选给0
	WE = 0;//锁存器锁存
	
	DU = 1;
	P0 = table[ge];//0000 0110 共阴极给1亮
	DU = 0;
		delay(5);
	
}

void main()
{
	while(1)
	{
		display(0);
	}
	
	
}

这个是QX-mini51的

#include <REGX52.H>
void Delay(unsigned int xms);
unsigned char NixieTable[]={~0x3f,~0x06,~0x5b,~0x4f,~0x66,~0x6d,~0x7d,~0x07,~0x7f,~0x6f,~0x77,~0x7c,~0x39,~0x5e,~0x79,~0x71,~0x00};

void Nixie(unsigned char location,number){
					switch(location)
					{
						case 1:
							P2=0x0e;
						break;
						case 2:
							P2=0x0d;
						break;
						case 3:
							P2=0x0b;
						break;
						case 4:
							P2=0x07;
						break;
					}
						P0=NixieTable[number];
					Delay(1);
					P0=0xff;
}
void Delay(unsigned int xms)		//@12.000MHz
{
	unsigned char i, j;
	while(xms--)
	{
		i = 2;
	j = 239;
	do
	{
		while (--j);
	} while (--i);
	}

	
}

void main(){
	
	
	while(1){
		Nixie(1,1);
		//Delay(200);
		Nixie(2,2);
		//Delay(200);
		Nixie(3,3);
		//Delay(200);
	}
	
}

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-05-10 07:26:06       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-10 07:26:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-10 07:26:06       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-10 07:26:06       20 阅读

热门阅读

  1. token无感刷新

    2024-05-10 07:26:06       10 阅读
  2. linux centos 安装Anaconda3-5.2.0

    2024-05-10 07:26:06       11 阅读
  3. vue中的async

    2024-05-10 07:26:06       10 阅读
  4. antdesign vue中table表格选中项的清除对勾问题

    2024-05-10 07:26:06       11 阅读
  5. 啰嗦一下开发语言

    2024-05-10 07:26:06       10 阅读
  6. 伪类和伪元素的区别是什么?

    2024-05-10 07:26:06       9 阅读
  7. uniapp vue 获取天气数据

    2024-05-10 07:26:06       10 阅读
  8. 学习Uni-app开发小程序Day6

    2024-05-10 07:26:06       10 阅读
  9. 构建跨平台应用的利器——UniApp

    2024-05-10 07:26:06       11 阅读