STC8H8K点亮数码管

1.数码管

数码管分为共阴数码管和共阳数码管,我用的是共阴数码管,所以在此仅介绍共阴的,大家如果需要共阳数码管的知识,自己去搜索,网上很多资料。

一位数码管一般由8段构成,含7段数码和一段小数点。数码管根据其内部结构,如图所示。

数码管相当于8个(7段和点号)发光二极管连接在一起,共阴极就是8个二极管的阴极连接在一起,二极管要亮必需正偏,就是阴极接低电平,阳极接高电平,所以共阴极数码管段选加高电平该段才能亮。

例如数码管要显示0,那么就需要点亮a,b,c,d,e,f。而g,dp不需要点亮。根据内部结构图可知二进制显示就是0011 1111。那么其相对应的就是0x3f。依次类推,可以得出其他的数,当然了,这部分在网上都有现成的,小伙伴们只需要用的时候去搜一下即可。

2.数码管显示

 这是我写的一个位选的代码,因为我用的是ULN2803去驱动数码管,所以我是这么写的,当当然了,之前有的用74LS138去驱动,不过这个好像现在基本不用了。现在应该有其他的去驱动。

switch(Location)
	{
		case 1:P10=1;P11=0;P13=0;P14=0;break;
		case 2:P10=0;P11=1;P13=0;P14=0;break;
		case 3:P10=0;P11=0;P13=1;P14=0;break;
		case 4:P10=0;P11=0;P13=0;P14=1;break;
	}

整体代码

#include <STC8h.H>
#define uint unsigned int
#define uchar unsigned char
//数码管段选
unsigned char NixieTable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x40};

void Delay(unsigned int xms)
{
	unsigned char i, j;
	while(xms--)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
	}
}

void GpioInit(void)
{
    P0M0 = 0x00; P0M1 = 0x00;
    P1M0 = 0x00; P1M1 = 0x00;
	P2M0 = 0x00; P2M1 = 0x00;
    P3M0 = 0x00; P3M1 = 0x00;
    P4M0 = 0x00; P4M1 = 0x00;
    P5M0 = 0x00; P5M1 = 0x00;
}

void Nixie(unsigned char Location,Number)
{
	switch(Location)
	{
		case 1:P10=1;P11=0;P13=0;P14=0;break;
		case 2:P10=0;P11=1;P13=0;P14=0;break;
		case 3:P10=0;P11=0;P13=1;P14=0;break;
		case 4:P10=0;P11=0;P13=0;P14=1;break;
	}
	P2=NixieTable[Number];	//段码输出
	Delay(10);				//显示一段时间
	P2=0x00;                //消影
}

void main()
{
	GpioInit();        /*通用I/O口初始化*/
	while(1)
	{
		Nixie(1,1);		//在数码管的第1位置显示1
		Nixie(2,2);		//在数码管的第2位置显示2
        Nixie(3,3);		//在数码管的第3位置显示3
	    Nixie(4,4);     //在数码管的第4位置显示4
	}
}

 相信大家肯定还有更好的数码管显示方式,这里只是提供我的方法,有不足的地方,希望大家指出。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值