【蓝桥杯单片机03】数码管的静态显示
【蓝桥杯单片机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; //数码管的段码数组 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(); } }
【广东职业技术学院 欧浩源】: ohy3686@foxmail.com 【小蜜蜂笔记网】:www.xmf393.com
【微信号】:gzyohy 【抖音号】:ohy3686