蓝桥杯单片机备战(四)共阳数码管的静态显示

1.共阳数码管原理实现

这是共阳数码管,所谓共阳的意思就是共阳极,每一个LED共用一个阳极,当控制LED的阴极为低电平时被点亮,如下图:

这里com1到com8为共阳口,例:

当com1设置为高电平时(黄色),第一个位置的8个led被激活,此时操作这八个灯的亮灭就能显示一个字符。


(6条消息) 共阳和共阴数码管详细段码(带图)_OMGMac的博客-CSDN博客_共阴极数码管段码

此博客归纳了一些断码(显示不同字符时8个LED灯的亮灭)


(6条消息) 共阳和共阴数码管详细段码(带图)_OMGMac的博客-CSDN博客_共阴极数码管段码

此博客归纳了一些断码


下面是共阳数码管接口的位置:

根据前面的学习,我们知道要首先给M74HC573M1R上电,具体方式请看笔记1、2、3。


2.代码实现

这里我们用到一个unsigned char code类型

这个类型是单片机变成里面独有的,code的作用是告诉单片机,我定义的数据要放在ROM(程序存储区)里面,写入后就不能再更改,对应的还有data是存入RAM的意思。 程序可以简单的分为code(程序)区,和data (数据)区,code区在运行的时候是不可以更改的,data区放全局变量和临时变量,是要不断的改变的,cpu从code区读取指令,对data区的数据进行运算处理。

这么做是为了节约片上的RAM,一般低端的单片机,片上的data空间只有几十个字节,所以只能存在程序空间中。 因为定义的数据是常量,放在DATA或XDATA区中浪费了. 放在RAM区也需要在ROM里占用同样的大小,否则上电时,RAM里指定数据从何而来?反之,放在ROM的数据,只占ROM容量,如果不需要修改,当然放ROM了。故被定位在CODE(就是程序存储器)区内。

#include <reg52.h>  //头文件

unsigned char code SMG_duanma[18] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,
																		 
                                     0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf,0x7f}; // 数码管的断码表
	
void Delay(unsigned long int t) //延时函数
{
    while(t--);
}

void HC138Init(unsigned char n)
{
    switch(n)
    {
        case 4:
            P2 = (P2 & 0x1f) | 0x80;//让Y4输出低电平,此时Y4C为高电平
        break;
        case 5:
            P2 = (P2 & 0x1f) | 0xa0;//让Y5输出低电平,此时Y5C为高电平
        break;
        case 6:
            P2 = (P2 & 0x1f) | 0xc0;//让Y6输出低电平,此时Y6C为高电平
        break;
        case 7:
            P2 = (P2 & 0x1f) | 0xe0;//让Y7输出低电平,此时Y7C为高电平             
        break;                           
    }
}

void showSMG(unsigned char position,unsigned char number)  //字符显示函数
{
	HC138Init(6); // 选通Y6C
	switch(position)
	{
		case 1://第1个位置
			P0 = 0x01;
		break;
		case 2://第2个位置
			P0 = 0x02;
		break;
		case 3://第3个位置
			P0 = 0x04;
		break;
		case 4://第4个位置
			P0 = 0x08;
		break;
		case 5://第5个位置
			P0 = 0x10;
		break;
		case 6://第6个位置
			P0 = 0x20;
		break;
		case 7://第7个位置
			P0 = 0x40;
		break;
		case 8://第8个位置
			P0 = 0x80;
		break;
	}
	HC138Init(7); // 选通Y7C
	if(number == '0')  //下面是显示各个字符
		P0 = SMG_duanma[0];
	else if(number == '1')
		P0 = SMG_duanma[1];
	else if(number == '2')
		P0 = SMG_duanma[2];
	else if(number == '3')
		P0 = SMG_duanma[3];
	else if(number == '4')
		P0 = SMG_duanma[4];
	else if(number == '5')
		P0 = SMG_duanma[5];
	else if(number == '6')
		P0 = SMG_duanma[6];
	else if(number == '7')
		P0 = SMG_duanma[7];
	else if(number == '8')
		P0 = SMG_duanma[8];
	else if(number == '9')
		P0 = SMG_duanma[9];
	else if(number == 'a')
		P0 = SMG_duanma[10];
	else if(number == 'b')
		P0 = SMG_duanma[11];
	else if(number == 'c')
		P0 = SMG_duanma[12];
	else if(number == 'd')
		P0 = SMG_duanma[13];
	else if(number == 'e')
		P0 = SMG_duanma[14];
	else if(number == 'f')
		P0 = SMG_duanma[15];
	else if(number == '-')
		P0 = SMG_duanma[16];
	else if(number == '.')
		P0 = SMG_duanma[17];
	
}

void main()
{
 //实现每一个位置从'0'显示到'.'
	while(1)
	{
		int m;
		for(m = 1;m<=8;m++)
		{
			showSMG(m,'0');
			Delay(60000);
			showSMG(m,'1');
			Delay(60000);
			showSMG(m,'2');
			Delay(60000);
			showSMG(m,'3');
			Delay(60000);
			showSMG(m,'4');
			Delay(60000);
			showSMG(m,'5');
			Delay(60000);
			showSMG(m,'6');
			Delay(60000);
			showSMG(m,'7');
			Delay(60000);
			showSMG(m,'8');
			Delay(60000);
			showSMG(m,'9');
			Delay(60000);
			showSMG(m,'a');
			Delay(60000);
			showSMG(m,'b');
			Delay(60000);
			showSMG(m,'c');
			Delay(60000);
			showSMG(m,'d');
			Delay(60000);
			showSMG(m,'e');
			Delay(60000);
			showSMG(m,'f');
			Delay(60000);
			showSMG(m,'-');
			Delay(60000);
			showSMG(m,'.');
			Delay(60000);
		}
	}
}

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 蓝桥杯单片机历年真题pdf是蓝桥杯单片机竞赛的历年真题集合,对于准备参加蓝桥杯单片机竞赛的人来说非常有用。通过前人的经验和历年真题的练习,可以更好地掌握单片机的知识和技能,为竞赛做好充分准备。 蓝桥杯单片机竞赛是国内较有影响力的单片机技能竞赛之一,参赛者可以通过不同层次的初赛、复赛、终赛,展示自己在单片机开发、程序设计、电路搭建等方面的综合素质。在竞赛中,历年真题集合可以帮助参赛者了解竞赛的难度和题型,逐步掌握单片机的电路搭建、编程调试、传感器应用等技巧,从而提升自己在竞赛中的表现。 另外,历年真题集合也可以作为学习单片机的资料,通过逐题分析、学习,深入理解单片机的基本原理和实际应用,掌握单片机程序的设计和编写,提高自己的单片机开发能力。 综上所述,蓝桥杯单片机历年真题pdf的出现,极大地方便了广大单片机爱好者和竞赛选手的学习和备战,更好地推动了单片机技术的发展。 ### 回答2: 蓝桥杯单片机历年真题pdf是指蓝桥杯单片机竞赛历年来的真实考题集合,这些考题主要用于单片机相关竞赛的备考和练习。这个题库包含了各种级别的考题,从初级到高级,涵盖了单片机开发的各个领域的考试内容。 通过学习这些真题,可以更全面地了解单片机竞赛的题型、难度和出题方向,加深对单片机的认识和使用,提高单片机开发的技能水平。同时,这个题库还能帮助竞赛选手熟悉比赛时间、考试规则和注意事项,提高竞技能力,达到更好的比赛成绩。 总之,蓝桥杯单片机历年真题pdf是单片机竞赛学习的重要资源,对于参加单片机竞赛的学生和从事单片机开发的工程师都具有很高的参考价值。 ### 回答3: 蓝桥杯单片机历年真题pdf是一份非常重要的资源,对于参加蓝桥杯单片机比赛的选手来说是必备的资料之一。这份pdf包含了从2007年至今蓝桥杯单片机比赛的所有真题,其中不仅包括竞赛试题和答案,还有对试题的详细分析和解释,对于复习备战考试非常有帮助。 在这份pdf中,可以看到历年来比赛难度逐年提高,试题越来越贴近实际工作中的需求。通过研究历年的试题,可以对比赛的命题方向和难度进行有效的预测和判断,为备战比赛提供有力的参考。 此外,这份pdf还提供了很多考场上非常有用的技巧和策略,如何快速、准确的读题、选择合适的编程方法和数据结构等等,这些都是比赛中取得好成绩的关键因素。 总之,蓝桥杯单片机历年真题pdf是一份非常重要的资料,不仅对于准备参加蓝桥杯单片机比赛的选手来说必不可少,对于学习单片机编程的人来说也是值得一看的资源。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值