八位数码管的使用

八位数码管原理图如下:

 通过原理图,我们可以知道,数码管和led灯存在公用的线路。要使led灯能发亮,P2.3引脚就要置“1”,但是P2.3引脚为“1”时,数码管是不能正常显示的,所以要使数码管正常显示,要对P2.3引脚置“0”。

同时P2.0、P2.1和P2.2引脚对数码管显示也很重要(位置选择),三个引脚的状态(0或1)对应的三位二进制数可以表示0~7(分别对应从左到右的数码管) 。

与led灯一样,只要通过对P0口赋不同的值就可以显示不同的字符。

不同的段(A、B、C、D、E、F、G、DP)对应不同的引脚

A:P0^0        B:P0^1        C:P0^2        D:P0^3        E:P0^4        F:P0^5        

G:P0^6        DP:P0^7

置“0”该段不亮,置“1”该段亮。如想要显示一个“1”,需要B段和C段亮,其他段不亮,所以P0口赋值为0x06。

         DP/P0^7    G/P0^6    F/P0^5    E/P0^4    D/P0^3    C/P0^2    B/P0^1    A/P0^0

二进制    0          0         0         0         0         1         1         0

0x                        0  //前四位转换16进                      6  //后四位转换16进制

 同理要想显示“7”,P0口就赋值为0x07(0000 0111)。

以下显示代码(效果为从左至右显示0~8)

#include <STC15F2K60S2.h>
#define uint unsigned int
#define uchar unsigned char

uint i=0;
uchar duanxuan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f};
uchar weixuan[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};

void Init()
{
    P2M0=0xff;
   	P2M1=0x00;
    P0M0=0xff;
    P0M1=0x00;
}

void Delay(int n)
{
	while(n--);
}

void main()
{
    Init();
	while(1)
	{
		for(i=0;i<8;i++)
		{
			P0=0;
			P2=weixuan[i];
			P0=duanxuan[i];
			Delay(600);
		}
	}
}

 虽然8个数码管都亮了,但并不是同时亮的,而是快速地选择不同的数码管(位选)点亮熄灭,也就是动态扫描。

(若有不足和错误,还请各位斧正)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值