51单片机:数码管


前言

数码管原理及代码


一、数码管原理图

数码管显示原理

在这里插入图片描述
多个数码管封装在一起,可分为共阴极和共阳极。所有LED的阴极接在一起为共阴极,所有LED的阳极接在一起为共阳极。显示部分A-G和DP分别为一个LED灯。

数码管表为16进制。以共阴极显示数字0为例,0x3f表示0011 1111。即DP,G为低电平,不亮;FEDCBA为高电平,亮。
共阳极顺序与其相反。

单片机数码管原理图

在这里插入图片描述

  1. C51芯片的P2引脚默认输出高电平。(笔记一:LED点亮)
  2. 开发板上的数码管为共阴极。

U5芯片中默认P24=1 , P23=1 , P22=1, 二进制为111,转换10进制为7。经过U5芯片,即控制左侧7号引脚输出低电平,其他为高电平。同时U5芯片左侧引脚链接8个数码管,即数码管LED8为低电平(数码管为共阴极),其他为高电平。

由于51芯片P2引脚同时控制实验一中8个LED灯的亮灭,当本次实验控制除数码管LED8之外的数码管显示时,同时可以观察到8个LED灯中第3,4,5个LED灯的闪烁。

此时控制C51芯片的P0输出即可控制单个数码管的显示(数码管表)。

二、数码管显示代码

1.静态显示代码

#include "reg52.h"
typedef unsigned int uint;
sbit P22=P2^2;
sbit P23=P2^3;
sbit P24=P2^4;
//数码管表
uint display[] = {0x00,0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
				  0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

void delay(uint i){
	while(i--){
	}
}

void main(){
	/*修改,第二个数码管显示*/
	P22 =0;

	/*默认第一个数码管显示*/
	while(1){
		uint i;
		for( i=0 ; i<17 ; ++i){
			delay(50000);
			P0 = display[i];
			delay(50000);
		}
	}
}

2. 动态显示代码

#include "reg52.h"
typedef unsigned int uint;
sbit P22=P2^2;
sbit P23=P2^3;
sbit P24=P2^4;

uint display[] = {0x00,0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
				  0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

void delay(uint i){
	while(i--){
	}
}

void main(){
	/*数码管显示*/
	while(1){
		uint i;
		for( i=1 ; i<9 ; ++i){
			switch(i){
				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;
			}
			/*控制时延即可控制是流水灯式显示还是全部显示*/
			delay(100);
			P0 = display[i];
			delay(100);
			P0=display[0];
		}
	}
}

3.代码解释

为什么第二个数码管显示是P22=0?

因为P24,P23默认输出高电平,即P24=1,P23=1。当P22=0时,组成的二进制为110,转换为十进制为6。即U5芯片左侧9号引脚输出低电平,即控制LED7数码管的显示。
在控制非LED8数码管显示时,可以顺便观察实验一中LED闪烁

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值