本帖最后由 ohy3686 于 2018-1-27 10:36 编辑
【蓝桥杯单片机03】数码管的静态显示 广东职业技术学院 欧浩源 不管是省赛还是国赛,数码管显示是蓝桥杯“单片机设计与开发”赛项必考的内容之一。要掌握数码管显示这个内容需要分为两个步骤:首先弄清楚数码管的静态显示,然后再去掌握数码管的动态显示。至于什么是静态显示,什么是动态显示,不清楚的可以百度一下。
1、关于数码管的基础知识
要把内容正确的显示在数码管上,首先要明确数码管的类型与段码结构。在CT107D单片机综合实训平台上使用的数码管是F3461BH。为什么要看这个型号呢?因为它能告诉你数码管的类型。倒数第2个字母是“B”,说明这个数码管是共阳类型的,如果该字母为“A”则为共阴类型。不同类型的数据管,其段码数组是截然不同的。
在明确数码管类型之后,就可以确定段码数组了,也就是显示内容所对应的值,例如,要在F3461BH上显示数值“7”,那么就要输出的数值为“0xf8”。怎么样才能得到这个段码数组呢?你可以从网上或其他参考资料上获取,也可以自己对于电路图或者测试段码得到。
2、数码管的电路连接
F3461BH是一个4位8段的数码管,其中a、b、c、d、e、f、g、dp引脚分别对应8个段码,该8个引脚通过74HC573锁存器与单片机的P0端口相连。另外有com1~com4四个公共控制脚,该应用为高电平则使能对应位的数码管。两个F3461BH一共有8个com控制引脚,也是通过74HC573锁存器与单片机的P0端口相连的。因此,在操控数码管显示的过程中也离不开74HC138译码器和74HC573锁存器,关于这部分的内容可以参考“【蓝桥杯单片机02】LED的基本控制”。
3、单元实训题目
4、实现源码参考#include "reg52.h"
sbit HC138_A = P2^5;
sbit HC138_B = P2^6;
sbit HC138_C = P2^7;
//F3461BH数码管的段码数组
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 Delay(unsigned int time)
{
while(time--);
while(time--);
}
void Init74HC138(unsigned char n)
{
switch(n)
{
case 4:
HC138_A = 0;
HC138_B = 0;
HC138_C = 1;
break;
case 5:
HC138_A = 1;
HC138_B = 0;
HC138_C = 1;
break;
case 6:
HC138_A = 0;
HC138_B = 1;
HC138_C = 1;
break;
case 7:
HC138_A = 1;
HC138_B = 1;
HC138_C = 1;
break;
case 8:
HC138_A = 0;
HC138_B = 0;
HC138_C = 0;
break;
}
}
void DispaySMG_Bit(unsigned char value, unsigned char pos)
{
char i;
Init74HC138(6);
P0 = (0x01 << pos);
Init74HC138(7);
P0 = value;
}
void DispaySMG_Static()
{
char i,j;
for(i = 0; i < 8; i++)
{
for(j = 0; j < 10; j++)
{
DispaySMG_Bit(SMG_Duanma[j],i);
Delay(60000);
}
}
Init74HC138(6);
P0 = 0xff;
for(i = 0; i < 16; i++)
{
Init74HC138(7);
P0 = SMG_Duanma[i];
Delay(60000);
}
}
main()
{
while(1)
{
DispaySMG_Static();
}
}
|