ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

备战蓝桥杯day3__数码管静态显示

2022-01-21 20:32:11  阅读:158  来源: 互联网

标签:__ P2 char 函数 unsigned day3 蓝桥 数码管 0xc0


一,元件介绍

数码管分共阴和共阳,com端用于控制哪个数码管亮,而a,b,c等控制数码管的段码,共阳数码管及段码对应的端口为低电平时,则亮起,共阴与其相反。

二,代码部分

#include "reg52.h"
#include "intrins.h"
unsigned char code SMG_duanma[18]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80
,0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e,0xbf,0x7f};
void Delay300ms()		//@12.000MHz
{
	unsigned char i, j, k;

	_nop_();
	_nop_();
	i = 14;
	j = 174;
	k = 224;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

void IniHC138(unsigned char n)
{
	switch(n)
	{
		case 4:
			P2=((P2 & 0x1f) | 0x80);
		break;
		case 5:
			P2=((P2 & 0x1f) | 0xa0);
		break;
		case 6:
			P2=((P2 & 0x1f) | 0xc0);
		break;
		case 7:
			P2=((P2 & 0x1f) | 0xe0);
		break;
			
	}
}

void ShowSMG_Bit(unsigned char dat,unsigned char pos)
{
	IniHC138(6);
	P0=0x01 << pos;
	IniHC138(7);
	P0=dat;
}
void SMG_Static()
{
	unsigned char i;
	for(i=0;i<8;i++)
	{ 
		unsigned char j;
		for(j=0;j<10;j++)
	{	
		ShowSMG_Bit(SMG_duanma[j],i);
		Delay300ms();
	}
	}
	for(i=0;i<16;i++)
	{
		IniHC138(6);
		P0=0xff;
		IniHC138(7);
		P0=SMG_duanma[i];
		Delay300ms();
		
	}
}
void main()
{
	while(1)
	{
		SMG_Static();
	}
}

这里我们引用了<intrins>这个头文件,是因为这次的Delay函数使用了_nop_函数,这次的Delay函数是直接从STC-isp直接拷贝过来的,要让每个数码管依次显示0~9,我们我们需要有单片机相应数码管的段码,unsigned char code SMG_duanma[18]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80
,0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e,0xbf,0x7f};

这段代码包含0~g的数码管码段,有便于后面P0的赋值。

首先是ShowSMG_Bit这个函数的功能,它接收2个字符,来决定数码管显示什么数值,数码管移动多少,IniHC138(6)函数打通com端的锁存器,确定数码管的位置,此时P0=00000001<<pos,实现数码管的移动,IniHC138(7)打通数码管灯管的锁存器,决定亮什么数字。

然后是SMG_Static这个函数的功能,主要函数为2for循环嵌套,里面那个for循环实现单个数码管数字显示的改变,记得添加延时函数,不然没有显示效果,外面的for实现数码管的移动。最后一个for循环起到打开所有com端口,所有数码管同时显示0~F的这个效果。

三,总结

由于刚接触51单片机,延迟函数多种多样,没有使用正确的延时函数,导致代码功能没有能实现。花了很多时间在排错上面,加油!

标签:__,P2,char,函数,unsigned,day3,蓝桥,数码管,0xc0
来源: https://blog.csdn.net/weixin_58931449/article/details/122608629

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有