蓝桥杯单片机设计与开发笔记(三)__Line_的博客-程序员宝宝

技术标签: 蓝桥杯  51单片机开发  数码管  单片机  

数码管显示几乎是每次蓝桥杯单片机设计与开发组竞赛的必考部分,相对于使用LCD1602作为显示设备,使用数码管来显示能够更好的考察参赛选手的单片机基本功,因为CT107D开发平台的设计使得数码管的显示不仅牵扯到数码管显示的 基本内容,还涉及到74HC573锁存器,74HC02异或门,74HC138译码器,以及中断的知识,所以这是值得我们重视的一个部分。

一、原理分析
根据CT107D的原理图我们可以看出,数码管显示同样涉及到74HC573、74HC138和74HC02,这与上一节中的LED灯、继电器和蜂鸣器的控制大同小异。如下图,蓝色标注为位选控制端口,由锁存器U6来控制,需配置红色标注的Y6C来控制锁存;黄色标注为段选控制端口,由锁存器U7来控制,需配置红色标注的Y7C来控制锁存。

这里写图片描述

而,控制Y6C与Y7C则需要通过74HC18和74HC02来进行控制,如下图,Y6C由Y6和WR共同控制,74HC02是一个4路2输入或非门功能,WR为低电平,要使Y6C为高,则Y6必须为低电平,即74HC138译码器的三个输入端应该为100,即P2^7=1,P2^6=0,P2^5=0。又只需要操作P2口的这三位,不需要配置其他的五位,所以P2端口应该配置为:P2 = ((P2&0x1f)|0xC0)。同理,控制Y7C时P2端口应该置为:P2 = ((P2&0x1f)|0xE0)。
这里写图片描述

二、示例程序
这里采用前后台的编程思想,即使用定时器中断来处理显示部分,作为前台,而逻辑处理与数据采集部分等则在主程序流程中来完成,作为后台。在下面这段程序中,定时器每隔2ms中断一次执行一次显示程序,然后继续执行主程序的任务,我们只要修改需要显示的数组即可实现显示不同的数值,使显示部分模块化,程序显示部分只提供外部接口(数组),不修改显示函数,这样不容易出错,而且能够使显示更方便。

#include "reg52.h"
#define uchar unsigned char
#define uint unsigned int

uchar code tab[] = {
   0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};   //共阳极数码管段选编码数组
uchar dspbuf[] = {
   10,10,10,10,10,10,10,10};   //显示数据的数组
uchar dspcom = 0;   //位选控制变量


void display()  //显示函数
{   
    P2 = ((P2&0x1f)|0xE0);    //段选消隐
    P0 = 0xff;
    P2 &= 0x1f;

    P2 = ((P2&0x1f)|0xC0);   //位选
    P0 = 1<<dspcom;    //共阳极数码管位选
    P2 &= 0x1f;

    P2 = ((P2&0x1f)|0xE0);   //段选
    P0 = tab[dspbuf[dspcom]];
    P2 &= 0x1f;

    if(++dspcom == 8){      //位选编码,循环显示8位
        dspcom = 0;
    }    
}

void main()
{
   TMOD = 0x01;   //定时器0工作方式1
   TH0 = (65536-2000)/256;   //初始化
   TL0 = (65536-2000)%256;
   ET0 = 1;     //开定时器0中断允许位
   EA = 1;      //开总中断
   TR0 = 1;     //开定时器0

   while(1)
   {
      dspbuf[0] = 1;   //要显示不同的数据只需要修改此数组的值即可
      dspbuf[1] = 2;
      dspbuf[2] = 3;
      dspbuf[3] = 4;
      dspbuf[4] = 5;
      dspbuf[5] = 6;
      dspbuf[6] = 7;
      dspbuf[7] = 8;
   }   
}

void timer0() interrupt 1   //定时器0中断服务函数
{
   TH0 = (65536-2000)/256;
   TL0 = (65536-2000)%256;
   display();   //2ms显示一次
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u013151320/article/details/51049998

智能推荐

[转]Oracle DB 使用子查询来解决查询_weixin_30517001的博客-程序员宝宝

• 定义子查询• 描述子查询可以解决的问题类型• 列出子查询的类型• 编写单行和多行子查询• 子查询:类型、语法和准则• 单行子查询:– 子查询中的组函数– 带有子查询的HAVING子句• 多行子查询– 使用ALL或ANY运算符• 使用EXISTS运算符• 子查询中的空值使用子查询解决问题谁的薪金高于Abe...

linux服务器运维_码农先锋A的博客-程序员宝宝

这本阿里P8撰写的算法笔记,再次推荐给大家,身边不少朋友学完这本书最后加入大厂: Github 疯传!史上最强悍!阿里大佬「LeetCode刷题手册」开放下载了!no space left on device原因:磁盘满了inode耗尽解决:确认磁盘是否满了: df -h (sh)确认inode是否耗尽: df -i如果inode已经耗尽,则系统不能创建文件确认哪个目录的小文件超量:find / -type d -size +10M: 找出大小大于10M的目录(目录大小越大,表示目

我的物联网项目(十六) 项目工程_关于物联网的工程项目_心灵之火.的博客-程序员宝宝

项目工程总共分三大块。前端系统用的是vue框架,业务系统用的是微服务框架springcloud,运营系统用的是传统的springMVC框架。一 前端系统前端系统主要分为PC端和移动端,分别有商家中心,城市合伙人以及运营平台。二 业务系统业务系统主要按模块划分,最终生成不同的jar包分别部署。三 运营系统主要包括统一接口平台,统一日志平台,统一权限平台,监控平台,调度...

klocwork 2022_鲁初雪的博客-程序员宝宝

klocwork 2022,支持python js等

工厂方法模式_nullZgy的博客-程序员宝宝

工厂方法模式【Factory Method Pattern】女娲补天的故事大家都听说过吧,今天不说这个,说女娲创造人的故事,可不是“造人”的工作,这个词被现代人滥用了。这个故事是说,女娲在补了天后,下到凡间一看,哇塞,风景太优美了,天空是湛蓝的,水是清澈的,空气是清新的,太美丽了,然后就待时间长了就有点寂寞了,没有动物,这些看的到都是静态的东西呀,怎么办?别忘了是神仙呀,没有办不到的事

openstack Installing the Cloud Controller_taosiheng的博客-程序员宝宝

Installing the Cloud ControllerFirst, set up pre-requisites to use the Nova PPA (Personal Packages Archive) provided through https://launchpad.net/. The ‘python-software-properties’ package is

随便推点

Zxing二维码的工具 ZxingUtil_weixin_33670713的博客-程序员宝宝

2019独角兽企业重金招聘Python工程师标准&gt;&gt;&gt; ...

网页设计中的幽灵按钮_幽灵按钮是什么意思_终结者ASDF的博客-程序员宝宝

我不确定我们是否意识到2014年最重大的趋势正在来临。它完全基于所有网站中微小的设计元素——按钮。幽灵按钮——那些透明的、可点击的物体——忽然间就变得无处不在。以狂风暴雨之势席卷正网页设计领域。谁能想到,像按钮这么简单的事物,能够改变我们看待网页设计的方式?什么是幽灵按钮?幽灵按钮有着最简单的扁平外形——正方形、矩形、圆形、菱形——没有填充色,只有一条淡淡的轮廓。除了外框和文字...

树莓派中找不到/dev/video0的解决方案及RaspberryCam的使用_a616735104的博客-程序员宝宝

一、原因  当使用CSI连接的方式将摄像头模块连接树莓派后,在/dev/中找不到video0,因此使用一些第三方库(如Opencv或RaspberryCam)去调用摄像头时,无法调用成功。二、解决方法  使用root权限打开/etc/modules 然后添加一行:bcm2835-v4l2(注意,这里是4l2不是412),然后重启PI。三、效果    四、Ra...

MCU控制板AC7801X/AC784X_atc ac784_weixin_44475354的博客-程序员宝宝

继胎压监测传感器芯片AC511研制成功并实现量产后,四维图再次传来了好消息。日前,四维图旗下全资子公司AutoChips杰发科技对外宣布,其车规级MCU(微控制器)产品线又添重量级新成员——AC7801X这是杰发科技继2018年底量产首颗车规级MCU芯片——AC7811之后,又一颗国产32位Cortex-M0+车规级MCU芯片,旨在进一步拓宽四维图新在国内车身控制领域的市场份额。据介绍,AC7801x系列为车规MCU,符合AEC-Q100规范,适用于汽车电子和高可靠性工业应用,主要用于电控领域。2850

CF808C_binggo1226的博客-程序员宝宝

/*F - Tea Party CodeForces - 808CPolycarp invited all his friends to the tea party to celebrate the holiday. He has n cups, one for each of his n friends, with volumes a1, a2, ..., an. His teapot sto

推荐文章

热门文章

相关标签