用 C学习51单片机——记录 2、数码管基本使用

用 C 学习51单片机过程与自我拓展——记录(STC89C52芯片)

前言——其实51并不太难,多看 多写代码,多调试,就一定会有所感悟。
所以我在此留下一些代码以供自己重复记忆,也希望能够帮到你!

Hello!又到周末了,是时候来更新了!🤭

二、数码管(P0口输入)

(1)数码管静态显示

程序说明:使用一位数码管显示数字“3”
程序总结:
1、熟悉使用16进制和二进制
2、 (用二进制数选择,显示的位置和图案)
位选 (选数码管位置):为1—— 关 为0——选它
段选 (选发光二极管):为1——选它 为0——关

#include <reg52.h>
sbit DU = P2^6;//段选
sbit WE = P2^7;//位选
void main()
{
	WE = 0;//其实与程序思路无过大关联,
	DU = 0;//是为了确保使用前关闭,以防一些不可预测的干扰

	WE = 1;	//打开位选锁存器 
    P0 = 0xfd;//选择第二个(左二)数码管  1111 1101
	WE = 0;	//锁住位选锁存器

	DU = 1; //打开段选锁存器
	P0 = 0x4f;//显示数字“3”	  0100 1111
	DU = 0;	//锁住段选锁存器

	while(1);//锁住程序,是程序一直

}

(2)数码管动态显示

解释:动态显示不是指同时显示所有数字,而是指☞单片机用很快的速度一个一个去显示每一位数字,以致于人眼无法区分(人眼具有延时保留图像的特点,闪动得太快,就会有几位数字同时出现的错觉)。

废话不宜过多,上实例 ☞ :

程序总结:
1、与静态显示差不多,只是显示多位数字
2、每显示一位数字后要延时,不延时将因运行过快而看不见数字
(具体看程序注释)

#include <reg52.h>
sbit DU = P2^6;
sbit WE = P2^7;

void delay(unsigned int z)//毫秒级延时
{
	unsigned int x,y;
	for(x=z;x>0;x--)
		for(y=114;y>0;y--);
}
void main()
{
	  while(1)
	{
	/*第一个数字“1”*/
		WE = 1;	//打开位选锁存器 
	    P0 = 0xfe;//选择第一个(左一)数码管  1111 1110
		WE = 0;	//锁住位选锁存器
	
		DU = 1; //打开段选锁存器
		P0 = 0x06;//显示数字“1”	  0000 0110
		DU = 0;	//锁住段选锁存器
		delay(5);//延时,不让刷新过快,如果不延时将无法显示该位数字
	/*第二个数字显示“2”*/
		WE = 1;	//打开位选锁存器 
	    P0 = 0xfd;//选择第二个(左二)数码管  1111 1101
		WE = 0;	//锁住位选锁存器
	
		DU = 1; //打开段选锁存器
		P0 = 0x5b;//显示数字“2”	  0101 1011
		DU = 0;	//锁住段选锁存器
		delay(5);//延时
	/*第三个数字显示“3”*/
		WE = 1;	//打开位选锁存器 
	    P0 = 0xfb;//选择第二个(左二)数码管  1111 1011
		WE = 0;	//锁住位选锁存器
	
		DU = 1; //打开段选锁存器
		P0 = 0x4f;//显示数字“3”	  0100 1111
		DU = 0;	//锁住段选锁存器
		delay(5);//延时,如果都不使用延时将会显示混乱
	}
}

~~ ~~

今天就先到这了,往后再修改添加数码管的使用实例,希望有帮到你!🤭

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值