单片机学习3——数码管

数码管,根据内部结构,可分为共阴极数码管和共阳极数码管。七段发光管加上一个小数点,共计8段。因此,我们对它编程的时候,刚好是用一个字节。

数码管的显示方式:

1)静态显示;

2)动态显示;

cpp 复制代码
#include<reg52.h>

sbit dula = P2^6;
sbit wela = P2^7;

void main()
{
	P0=0x3F;
	dula=1;
	dula=0; 	//锁住段显
	P0=0xFE;
	wela=1;
	wela=0;	    //锁住位显
	while(1);
}

选择仿真:

硬件仿真调试:

我们使用了数组,将共阴极的数码管的真值表,下标正好对应的是数码管的显示数值,这样就不用记真值表了。

cpp 复制代码
#include<reg52.h>
#define uchar unsigned char

sbit dula = P2^6;
sbit wela = P2^7;

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

void main()
{
	P0=0xF0;
	wela=1;
	wela=0;	    //锁住位显
	P0=table[0];
	dula=1;
	dula=0; 	//锁住段显
	while(1);
}

需要掌握锁存器的功能。

让1/3/5位的数码管从0到1循环显示。

cpp 复制代码
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int

sbit dula = P2^6;
sbit wela = P2^7;

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

void delay(uint);

void main()
{
	while(1)
	{
		P0=0xEA;
		wela=1;
		wela=0;	    //锁住位显
		P0=table[0];
		dula=1;
		dula=0; 	//锁住段显0
		delay(1000);
		P0=table[1];
		dula=1;
		dula=0; 	//锁住段显1
		delay(1000);
	}
}

void delay(uint x)
{
	for(i=x;i>0;i--)
	{
	 	for(j=120;j>0;j--);
	}
}

然后是使用for循环语句将所有的数码管都从0到F都进行循环显示。

cpp 复制代码
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int

sbit dula = P2^6;
sbit wela = P2^7;

uchar num=0;

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

void delay(uint);

void main()
{
	while(1)
	{
//		P0=table[0];
//		dula=1;
//		dula=0; 	//锁住段显0
//		delay(1000);
//		P0=table[1];
//		dula=1;
//		dula=0; 	//锁住段显1
//		delay(1000);
		for(num=0;num<16;num++)
		{
			P0=table[num];
			dula=1;
			dula=0;
			P0=0xEA;
			wela=1;
			wela=0;	    //锁住位显
			delay(1000);  //延迟1秒
		}
	}
}

void delay(uint x)
{  
    uint i;
    uint j;
	for(i=x;i>0;i--)
	{
	 	for(j=120;j>0;j--);
	}
}

关键字code,没有加code的时候,定义的变量都放在单片机的RAM中,在程序中可以随意去改变这些变量的值。但是还有一种数据,在程序中使用,却不会改变它的值。定义这种数据的时候,可以加一个code关键字进行下修饰。这个数据会存储到程序空间的Flash中。这样可以大大节省单片机的RAM的使用量。

共阳极数码管的真值表:

bash 复制代码
unsigned char code table[]={
0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8
0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
};
相关推荐
LCG元8 小时前
STM32 定时器编码器接口模式电机测速实战:从 CubeMX 配置到 M 法转速计算与溢出处理
stm32·单片机·嵌入式硬件
星河单片机11 小时前
STM32驱动WaterSensor水位传感器+OLED显示完整原理与实验
stm32·单片机·嵌入式硬件
子文雨11 小时前
基于 uC3845 与 ATtiny13 双芯片架构的 8.4V/2.5Ah 锂电池智能充电器设计
单片机·嵌入式硬件·算法
智购科技无人售货机工厂店14 小时前
2026自动售货机大屏交互设计原则:从信息层级到视觉动线的工程实践~YH
运维·python·单片机·嵌入式硬件·自动化·交互
艾芯微科技17 小时前
SKY13370‑374LF|0.5‑6GHz SPDT 射频开关,WLAN/LTE 射频前端实用器件
网络·单片机·嵌入式硬件·集成测试·51单片机
jianqiang.xue18 小时前
收官:从v0.1到“研发新常态“,一套嵌入式智能体的落地与边界
stm32·单片机·物联网·架构·esp32
天空'之城19 小时前
单片机基础核心知识点汇总(三十)
单片机·嵌入式硬件
笨笨饿19 小时前
#137_死机恢复现场_Armino平台AP系统swd调试
git·python·stm32·单片机·嵌入式硬件·物联网·vim
linnux领域19 小时前
面包板供电“插哪都不亮“?一个暗断点引发的排查——硬件新手三板斧
单片机·嵌入式硬件·esp32·arduino·面包板·硬件入门
学linux的QQ蛋21 小时前
吃透传输层:UDP 无连接、TCP 可靠传输、套接字函数、粘包问题详解
单片机·tcp/ip·udp