51单片机入门学习(六)


前言

今天学习了静态数码管显示和动态数码管显示,还有C语言的子函数、数组。


一、基本知识

1、数组:
把相同类型的一系列数据统一编制到某一个组别中,可以通过数组名+索引号简单快捷的操作大量数据。
<1>定义数组:
int x[3]; //定义一组变量,3个
int x[]={1,2,3}; //定义一组变量并初始化(注意:对数组的整体赋值只能在定义的时候进行,x[]括号中不写数字的话会自动计算出变量的个数,这里是x[3])
<2>调用数组:
x[0] //引用数组的第0个变量
x[1] //引用数组的第1个变量
x[2] //引用数组的第2个变量
对于有三个变量的数组,引用x[3]时,数组越界,编译器不会报错,但是读出的数值不确定,应避免这种操作。
2、子函数:
将完成某一种功能的程序代码单独抽取出来形成一个模块,在其他函数中可随时调用此模块,以达到代码的复用和优化程序结构的目的。
函数结构:
返回值类型 函数名 (形参/形参列表)
{
函数体
}
函数分为有无参数、有无返回值等类型。
3、共阴极数码管段码表:
在这里插入图片描述
4、数码管动态显示的消影:
在这里插入图片描述
本质上是硬件反应速度不同步,也就是本来的LED灭但是还没完全灭,而且P0、P2端口值的读取还没来得及更新就已经开始显示了。
5.数码管驱动方式:
<1>单片机直接扫描:硬件设备简单,但会耗费大量的单片机CPU时间
<2>专用驱动芯片:内部自带显存、扫描电路,单片机只需告诉它显示什么即可。如TM1640等

二、示例

1.静态数码管显示

参考代码如下:

#include <REGX52.H>

unsigned char NiXieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x6D,0x7D,0x07,0x7F,0x6F};//共阴极数码管

void NieXie(unsigned char Location,Number)
{
	switch(Location)
	{
		case 1:P2_4=1;P2_3=1;P2_2=1;break; //位选。P2_4,P2_3,P2_2分别对应译码器的三位二进制输入,有效位输出低电平,实现指定位置的数码管显示
		case 2:P2_4=1;P2_3=1;P2_2=0;break;
		case 3:P2_4=1;P2_3=0;P2_2=1;break;
		case 4:P2_4=1;P2_3=0;P2_2=0;break;
		case 5:P2_4=0;P2_3=1;P2_2=1;break;
		case 6:P2_4=0;P2_3=1;P2_2=0;break;
		case 7:P2_4=0;P2_3=0;P2_2=1;break;
		case 8:P2_4=0;P2_3=0;P2_2=0;break;
	}
	P0=NiXieTable[Number]; //数码管段选,显示具体数字
}
void main()
{
	NiXie(1,4);
	while(1)
	{
		
	}
}

2.数码管动态显示

四位一体数码管的动态显示,仍然是每个位置数码管依次显示数值,只是依次显示的时间间隔极短,利用人眼在短时间内观察的特点—视觉暂留,实现视觉上的同时显示。
参考代码如下:

void NieXie(unsigned char Location,Number)
{
	switch(Location)
	{
		...
	}
	P0=NiXieTable[Number]; //数码管段选,显示具体数字
	Delay(1);//如果这里没有延迟,数码管显示的亮度会变暗
	P0=0x00;// 实现P0引脚清零。这样在下一个位选语句出现时,P0引脚就不会受到上次段选赋值的影响,即不会在后一位出现上一位的影子。
}
void main()
{
	while(1)
	{
    	NieXie(1,1);
    	NieXie(2,2);
    	NieXie(3,3);	
    }
}

疑问:不明白为什么第四位会有影子?如果不加Delay(1);P0=0x00;这两句的话。
在这里插入图片描述


总结

8.8号,学习51单片机的第6天,学习不到两小时。
希望继续坚持。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值