小蜜蜂51单片机之共阳数码管的静态显示

关键词:数码管的段选和位选;138译码器

一、知识点

 1、Y6控制段码,Y7控制公共端

二、实验

实验目的:数码管显示值

实验步骤:

S1:数码管0-9段选码排成数组NixieTable[]

S2:138译码器选中Yn端,InitHC138()函数,switch语句分支

S3:数码管在固定位置显示固定值函数,void ShowSMG(void)

void ShowSMG(void)
{
	InitHC138(6);//573锁存器位选使能端打开
	P0=0x01;//com1是阳极,要接1,所以连接它的P0口是0x01
	InitHC138(7);//573锁存器段选使能端打开
	P0=0x82;//段选6.
}

S4:对ShowSMG()优化,使得通过改变参数使得可在不同位显示不同值(疑问)

void ShowSMG_bit(unsigned char dat,unsigned pos)
{
	InitHC138(6);//数码管的位置
	P0=0x01<<pos;//0x01左移1、2...位的含义?
	InitHC138(7);//数码管的内容
	P0=dat;
}

S5:编写数码管静态显示数字(设置循环变量i,j,循环在不同位显示不同值)

void SMG_Static()
{
	unsigned char i,j;
	for(i=0;i<8;i++)
	{
		for(j=0;j<8;j++)
		{
			ShowSMG_bit(NixieTable[j],i);
			Delay(60000);
		}
	}
}

S6:进一步完善码管静态显示数字函数,满足题意

 整体代码:

#include <REGX52.H>

unsigned char code NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//0-9+全空

void Delay(unsigned char t)
{
	while(t--);
	while(t--);
}

void InitHC138(unsigned char n)
{
	switch(n)
	{
		case 4:P2=(P2&0x1F)|0x80;break;//1001 1111  //100->8
		case 5:P2=(P2&0x1F)|0xA0;break;//1011 1111  //101->A
		case 6:P2=(P2&0x1F)|0xC0;break;//1101 1111  //110->C
		case 7:P2=(P2&0x1F)|0xE0;break;//1111 1111  //高三位清零&,|将高三位置值
	}
}

void ShowSMG_bit(unsigned char dat,unsigned pos)
{
	InitHC138(6);//数码管的位置
	P0=0x01<<pos;//0x01左移1、2...位的含义?
	InitHC138(7);//数码管的内容
	P0=dat;
}

void SMG_Static()
{
	unsigned char i,j;
	for(i=0;i<8;i++)
	{
		for(j=0;j<10;j++)
		{
			ShowSMG_bit(NixieTable[j],i);
			Delay(60000);//每个都显示6,依次循环
		}
	}
	for(j=0;j<10;j++)
	{
		InitHC138(6);
		P0=0xFF;
		InitHC138(7);
		P0=NixieTable[j];
		Delay(60000);//延迟一会儿看的更清楚
		Delay(60000);
	}
}

void main()
{
	while(1)
	{
	SMG_Static();
	}
}

感谢B站小蜜蜂老师的教程,本笔记资料及代码均来自教程,仅作为个人复习、整理和学习交流用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值