51——数码管

数码管

数码管概述

在这里插入图片描述
共阴极&共阳极(判断用万能表)
在这里插入图片描述
在这里插入图片描述
限流电阻,控制亮度

共阴极数码码表

在这里插入图片描述

74HC573

在这里插入图片描述
Z:高阻态;
输出口Q要想输出高低电平OE脚必须接GND;
LE脚为高时,输出端Q随输入端D的数据而变化;
LE脚为低时,输出端Q数据保持不变,输入端D数据变化不会改变Q的数据;

数码管静态显示代码

LED显示器工作方式有两种:静态显示方式和动态显示方式。静态显示的特点是每个数码管的段选必须接一个8位数据线来保持显示的字形码。当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止

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

#define uint unsigned int
#define uchar unsigned char

sbit DU = P2^6;	//换个名字,不认识^这个符号呢
sbit WE = P2^7;

//void delay(uint z) 	
//{
//	uint x,y;
//	for(x = z; x > 0; x--)
//		for(y = 114; y > 0 ; y--); 		
//}

void main()
{
	WE = 1;//打开位选锁存器
	P0 = 0xfe; //1111 1110 对应WE8~WE1 选中第一个数码管
	WE = 0;//锁存位选数据 数据已经送过去了 输入输出之间断开

	DU = 1;//打开段选锁存器
	P0 = 0x06; //0000 0110
	DU = 0;//锁存

	while(1)
	{
		P0 = 0x01;//显示仍为1 不会改变 因为已经锁存
	}
}

数码管动态显示代码

动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。

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

#define uint unsigned int
#define uchar unsigned char

sbit DU = P2^6;	//换个名字,不认识^这个符号呢
sbit WE = P2^7;

void delay(uint z) 	
{
	uint x,y;
	for(x = z; x > 0; x--)
		for(y = 114; y > 0 ; y--); 		
}

void main()
{
	while(1)
	{
	P0 = 0xff;//清楚断码

	WE = 1;//打开位选锁存器
	P0 = 0xfe; //1111 1110 对应WE8~WE1 选中第一个数码管
	WE = 0;//锁存位选数据 数据已经送过去了 输入输出之间断开

	DU = 1;//打开段选锁存器
	P0 = 0x06; //0000 0110
	DU = 0;//锁存段选数据
	delay(5);


	P0 = 0xff;//清楚断码

	WE = 1;//打开位选锁存器
	P0 = 0xfd; //1111 1101
	WE = 0;//锁存位选数据 

	DU = 1;//打开段选锁存器
	P0 = 0x5b; //0101 1011
	DU = 0;//锁存
	delay(5);
	
	P0 = 0xff;//清楚断码

	WE = 1;//打开位选锁存器
	P0 = 0xfb; //1111 1011
	WE = 0;//锁存位选数据 

	DU = 1;//打开段选锁存器
	P0 = 0x4f; 
	DU = 0;//锁存
	delay(5);
	}
}

函数 数码管显示任意三位数值代码

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

#define uint unsigned int
#define uchar unsigned char

sbit DU = P2^6;	
sbit WE = P2^7;

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴极数码管段选表0~9,用于给P0口赋值时进制转换
//code表示存放rom区(容量大),table不能重新赋值,不加code的话在ram区,可重新赋值

void delay(uint z) 	
{
	uint x,y;
	for(x = z; x > 0; x--)
		for(y = 114; y > 0 ; y--); 		
}

void display(uchar i)//0~255 显示函数
{
	uchar bai,shi,ge;
	bai = i / 100;
	shi = i % 100 / 10;
	ge = i % 10;

	//第一位数码管
	P0 = 0xff;//清楚断码
	WE = 1;//打开位选锁存器
	P0 = 0xfe; //1111 1110 
	WE = 0;//锁存位选数据

	DU = 1;//打开段选锁存器
	P0 = table[bai]; 
	DU = 0;//锁存段选数据
	delay(5);

	//第二位数码管
	P0 = 0xff;//清楚断码
	WE = 1;//打开位选锁存器
	P0 = 0xfd; //1111 1101
	WE = 0;//锁存位选数据 

	DU = 1;//打开段选锁存器
	P0 = table[shi]; //0101 1011
	DU = 0;//锁存
	delay(5);

	P0 = 0xff;//清楚断码
	WE = 1;//打开位选锁存器
	P0 = 0xfb; //1111 1011
	WE = 0;//锁存位选数据 

	DU = 1;//打开段选锁存器
	P0 = table[ge]; 
	DU = 0;//锁存
	delay(5);		
}

void main()
{
	while(1)
	{
	display(211);//改变此处数值即可改变数码管显示的数值
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值