2021-07-12

本文介绍了如何使用Keil5进行动态数码管显示的实现过程,包括了解74HC573锁存器的用法、3-8译码器的学习以及共阴极和共阳极数码管的区别。程序中通过控制不同管脚的电平实现数码管位选,利用数组存储数码管字形,并结合延时函数实现动态显示效果,从而达到视觉上的连续显示。
摘要由CSDN通过智能技术生成

keil5实现动态数码管显示

一.尝试静态数码管显示

  1. 学习74h573用法
  2. 操作程序

二.动态数码管显示

  1. 3-8译码器学习
  2. 共阴共阳数码管分辨
  3. 程序编写
    开始:
#include<reg52.h>

sbit displaya=P2^2;//三八译码器所用管脚三个
sbit displayb=P2^3;
sbit displayc=P2^4;
typedef unsigned char u8;//上一篇文章有介绍
typedef unsigned int u16;
void delay(u16 i)//delay函数
{
while(i--);
}
void main()
{
u8 a[]={0x3f,0x06,0x5b ,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//定义一个包含数码管显示形状的数组,其含义分别表示1~f
displaya=0;/三个管脚为低电压,数码管最后一位启用
displayb=0;
displayc=0;
P0=a[0];
while(1);//作用1
}

while(1)作用

动态数码管

#include<reg52.h>

sbit displaya=P2^2;
sbit displayb=P2^3;
sbit displayc=P2^4;
typedef unsigned char u8;
typedef unsigned int u16;
void delay(u16 i)
{
while(i--);
}
void main()
{
u8 a[]={0x3f,0x06,0x5b ,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
u8 i;//同以上
while(1){
for(i=1;i<9;i++)
		{
switch(i)
				{
				case(1):
				displaya=0;displayb=0;displayc=0;break;
				case(2):
				displaya=1;displayb=0;displayc=0;break;
				case(3):
				displaya=0;displayb=1;displayc=0;break;
				case(4):
				displaya=1;displayb=1;displayc=0;break;
				case(5):
				displaya=0;displayb=0;displayc=1;break;
				case(6):
				displaya=1;displayb=0;displayc=1;break;
				case(7):
				displaya=0;displayb=1;displayc=1;break;
				case(8):
				displaya=1;displayb=1;displayc=1;break;
				}//switch语句编辑led的选择
P0=a[i];//选择的led进行显示,只显示到7
delay(100);//延时函数适应视觉暂留效应
P0=0x00;//led回到0值显示,应该是为了清除显示余晖;
		}
		for(i=8;i>0;i--)
		{
switch(i)
				{
				case(1):
				displaya=0;displayb=0;displayc=0;break;
				case(2):
				displaya=1;displayb=0;displayc=0;break;
				case(3):
				displaya=0;displayb=1;displayc=0;break;
				case(4):
				displaya=1;displayb=1;displayc=0;break;
				case(5):
				displaya=0;displayb=0;displayc=1;break;
				case(6):
				displaya=1;displayb=0;displayc=1;break;
				case(7):
				displaya=0;displayb=1;displayc=1;break;
				case(8):
				displaya=1;displayb=1;displayc=1;break;
				}//反向进行
P0=a[i];
delay(100);
P0=0x00;
		}
		
		}//while语句实现的功能类似流水灯
		}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值