蓝桥杯单片机学习之数码管

这里是我的数码管的学习笔记,欢迎大家一起进步

数码管的初始化原理参照以下链接
(本人写的博客)初始化原理
请务必多看一下,里面还有关于P0口的一些信息
那么看一下原理图,了解一下数码管的工作原理
在这里插入图片描述
可以看到我所画的大致示意图,也就是Y6C控制com一系列引脚来选择要显示的数码管
然后选择哪个灯管亮的是Y7C控制的abcdefg。
也就是说,先用Y6C位选数码管,Y7C位选亮的数码管

比如Y6C开启,P0=0xff,也就是选中所有的数码管展示
然后Y7C开启,P01=0;所有的数码管的a管亮,也就是全是最上面的灯管亮。

数码管也分为共阴极数码管,和共阳极数码管,如图:
在这里插入图片描述
我们的蓝桥杯的数码管是共阳极的数码管,所以得控制abcdefgdp的口输出为零,他才会亮
所以很明显,也就是选中之后,通过P0口控制abcdefg来显示数字,比如显示“1”,就是bc亮也就是P02,P03=0;
但是这样每次要展示都要看一下怎么设计是不是太麻烦了,我们蓝桥杯的资料里面又这么一份资料是直接提供了0-9的数字显示的十六进制表示数
如图
在这里插入图片描述
啊,说这么多是不是觉得我有点罗里吧嗦的?
好,下面是实践,我们先来设计个程序,让所有数码管先直接显示1:

#include "reg52.h"
void main(){
	P2=0xa0;P0=0x00;
	P2=0xc0;P0=0xff;//位选状态,选中所有数码管
	P2=0xff;P0=0xc0;//Y7为L,选择abcdefg展示
}

在这里插入图片描述
大概就是这样。
下一步呢,我们来实现一下从0到9的隔一秒轮换展示

#include "reg52.h"
unsigned int code tab[10]={	
	0xc0,
	0xf9,
	0xa4,
	0xb0,
	0x99,
	0x92,
	0x82,
	0xf8,
	0x80,
	0x90
};//利用数组保存各个数字的位置方便我们直接使用
void delayms(int ms){
	unsigned int i;
	while(ms--){
		for(i=0;i<628;i++);
	}
}//延时函数
void main(){
	unsigned int i;
	P2=0xa0;P0=0x00;//关闭继电器关闭蜂鸣器
	P2=0xc0;P0=0xff;//选中所有数码管
	P2=0xff;
	i=0;
	while(1){
		P0=tab[i%10]//想一想为什么取余;
		delayms(1000);
		i++;
	}//循环交换数字
}

以下视频效果

抱歉自己的视频传不上去,请自行复制代码,烧录查看效果

现在就是利用我之前写的定时器的博客的知识来实现一下,这个程序:
这里是我的定时器笔记

#include "reg52.h"
sfr AUXR =0x8E;
unsigned int tt;
unsigned int i;
unsigned int code tab[10]={	
	0xc0,
	0xf9,
	0xa4,
	0xb0,
	0x99,
	0x92,
	0x82,
	0xf8,
	0x80,
	0x90
};
void delayms(int ms){
	unsigned int j;
	while(ms--){
		for(j=0;j<628;j++);
	}
}
void Timer0Init(void)		//1ms@12.000MHz
{
	AUXR |= 0x80;
	TMOD &= 0xF0;	
	TL0 = 0x20;
	TH0 = 0xD1;
	TF0 = 0;
	TR0 = 1;
	ET0 = 1;
	EA = 1;
}
void Timer() interrupt 1{
	tt++;
	if(tt==1000){
		i++;
		tt=0;
	}
}
void main(){
	P2=0xa0;P0=0x00;
	P2=0xc0;P0=0xff;
	P2=0xff;
	i=0;
	Timer0Init();
	while(1){
		P0=tab[i%10];
	}
}

两个效果是一样的,不过下面的定时器1秒更精准一些


好了我的数码管的笔记到这就没了,下一个笔记是动态数码管

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值