51单片机(国信天长单片机实训平台)基于keli的常用程序之 共阳数码管一般静态控制程序设计

文章目录

  • 51单片机(国信天长单片机实训平台)基于keli的常用程序之 共阳数码管一般静态控制程序设计
  • 前言
  • 一、国信长天单片机竞赛实训平台的电路图与分析
    • 1.观察电路图
    • 2.关于数码管段码与显示的关系
  • 二、编写程序步骤
    • 1.主程序
    • 2.数码管代数编码
    • 3.编写延时函数Delay
    • 4.编写关闭外设函数
    • 5.编写138选择函数
    • 6.编写数码管控制函数
    • 7.整合所有函数
  • 总结

前言

实验目的:8个数码管分别单独依次显示0 ~ 9,所有数码管依次显示0 ~ F和- . 。

一、国信长天单片机竞赛实训平台的电路图与分析

国信长天单片机竞赛实训平台电路图

1.观察电路图

通过观察电路图,我们可以发现,数码管由a1~ dp1(h1)和com1~ com8控制,其中com1~ com4,com5 ~ com8分别控制两个四位数码管,a1~ dp1(h1)由个573移位寄存器连接电阻控制,com1~ com8由573寄存器控制,负责控制灯亮的位置,而寄存器分别由138的Y7与Y6控制。

2.关于数码管段码与显示的关系

16进制代码 显示的数字 h g f e d c b a
0xc0 0 1 1 0 0 0 0 0 0
0xf9 1 1 1 1 1 1 0 0 1
0xa4 2 1 0 1 0 0 1 0 0
0xb0 3 1 0 1 1 0 0 0 0
0x99 4 1 0 0 1 1 0 0 1
0x92 5 1 0 0 1 0 0 1 0
0x82 6 1 0 0 0 0 0 1 0
0xf8 7 1 1 1 1 1 0 0 0
0x80 8 1 0 0 0 0 0 0 0
0x90 9 1 0 0 1 0 0 0 0
0x88 A 1 0 0 0 1 0 0 0
0x80 B 1 0 0 0 0 0 0 0
0xc6 C 1 1 0 0 0 1 1 0
x0c0 D 1 1 0 0 0 0 0 0
0x86 E 1 0 0 0 1 1 0 0
0x8e F 1 0 0 0 1 1 1 0
0xbf 1 0 1 1 1 1 1 1
0x7f . 0 1 1 1 1 1 1 1

如图所示,abcdefgh分别控制八个亮的部位,共阳级的意思是后端接阳极(1),接阴极(0)即可触发,则可以得到16进制的16个代数的二进制编码,a为低位,h为高位,改编成16进制编码,及为数码管段码。表格中列取的不代表是全部的,我们可以通过需要亮哪些,给它编码即可。

二、编写程序步骤

1.主程序

一般硬性格式的程序,因为一般都是这个框架,先让整体框架在你脑袋里形成,再一步一步完善。
主程序:

#include "reg52.h"void main(){while(1){ }}

2.数码管代数编码

将段码编写进入数组,调用时方便

unsigned char code smg_daishu[18]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e,0xbf,0x7f};//0123456789 abcdef - .

3.编写延时函数Delay

计算机执行程序的速度非常快,如果不主动添加延时函数让程序被动等待,则肉眼观察不到数码管的变化:

  void delay(unsigned int t){while(t--);while(t--);
}

4.编写关闭外设函数

一般比赛需要关闭外设,同时防止给电时蜂鸣器乱叫:

 void stop(){P2=(P2&0x1f)|0x80;//关闭led 110P0=0xff;P2&=0x1f;P2=(P2&0x1f)|0xa0;//关闭继电器蜂鸣器 101P0=0;P2&=0x1f;}

关于底下这一行:

P2=(P2&0x1f)|0xa0;

上一篇文章有详细讲解,读者可以去自行阅读。这里是链接【单片机竞赛:LED灯的一般控制】。

5.编写138选择函数

  void HC138(unsigned char n){switch(n){case 6:P2=(P2 & 0x1f) | 0xc0;break;case 7:P2=(P2 & 0x1f) | 0xe0;break;}

因为需要用到Y6与Y7两个端口,所以通过switch选择使用哪种。

6.编写数码管控制函数

 void showsmgb(unsigned char dat,unsigned pos){HC138(6);P0=0x01 << pos;HC138(7);P0=dat;}void shousmga(){unsigned char i,j;for(i=0;i<8;i++){for(j=0;j<10;j++){showsmgb(smg_daishu[j],i);delay(60000);}}for(j=0;j<16;j++){HC138(6);P0=0xff;HC138(7);P0=smg_daishu[j];delay(60000);}}

1.Y6控制位置,Y7控制输入,shousmgb为通过选择HC138的端口,来输出所以需要的输出的东西
2.showsmga第一个for循环嵌套一个for循环,懂得c语言基础的读者很容易了解到,为了从首到尾依次亮,i为位置,j为数据。如有需要了解参寻五毛变向的博客。
3.第二个for循环为全亮,将smg_daishu[j];中的所有数据依次显示。

P0=0x01 << pos;

关于上面一行,这里为什么是左移运算符,因为数码管从左到右亮,其实为从数据的低位到高位,但是计算机中二进制低位在右,所以是左移运算符。

7.整合所有函数

#include "reg52.h"void delay(unsigned int t){while(t--);while(t--);}
unsigned char code smg_daishu[18]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e,0xbf,0x7f};//0123456789 abcdef - .void HC138(unsigned char n){switch(n){case 6:P2=(P2 & 0x1f) | 0xc0;break;case 7:P2=(P2 & 0x1f) | 0xe0;break;}}void showsmgb(unsigned char dat,unsigned pos){HC138(6);P0=0x01 << pos;HC138(7);P0=dat;}void shousmga(){unsigned char i,j;for(i=0;i<8;i++){for(j=0;j<10;j++){showsmgb(smg_daishu[j],i);delay(60000);}}for(j=0;j<16;j++){HC138(6);P0=0xff;HC138(7);P0=smg_daishu[j];delay(60000);}}void stop(){P2=(P2&0x1f)|0x80;P0=0xff;P2&=0x1f;P2=(P2&0x1f)|0xa0;P0=0;P2&=0x1f;}main(){ stop();while(1){shousmga();delay(60000);}}

将所需要循环的放入主函数的for循环中,将关闭外设代码放入主函数中,大功告成。

总结

将数码管所需显示的数据放入数组中存取,是一个良好的编程手法,如需显示其他的也可以这样使用,搞清楚com端与所显示的区别,关于数码管静态编程的部分你就掌握的差不多啦。

【单片机竞赛:共阳数码管静态控制】相关推荐

  1. [蓝桥杯单片机 八位共阳数码管](4)

    [蓝桥杯单片机 共阳数码管] 一.数码管原理图 开发板上的八位数码管为共阳连接,com1–com8分别控制公共端(公共阳极):a–dp分别控制数码管每一位的八个段.它们两又分别被锁存器U6和U7控制着 ...

  2. 51单片机入门—共阳数码管的静态显示

    共阳数码管的静态显示 共阳数码管的原理图 共阳数码管的原理图 数码管的类型 CT107D单片机综合实训平台上使用的数码管是F3461BH,倒数第2个字母是"B",说明这个数码管是共 ...

  3. 51单片机之共阳数码管

    单个共阳数码管静态显示 #include<reg51.h> //包含头文件,一般情况不需要改动, //头文件包含特殊功能寄存器的定义void main (void) {P1=0xc0; / ...

  4. 【蓝桥杯单片机】共阳数码管

    一.电路图 段选 位选 通过Y6选择八个数码管的一个或多个,再通过Y7进行数码管的显示. 段码:共阳数码管 数字1的显示: dp=1 g=1 f=1 e=1 d=1 c=0 b=0 a=1(亮为0,灭 ...

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

    1.共阳数码管原理实现 这是共阳数码管,所谓共阳的意思就是共阳极,每一个LED共用一个阳极,当控制LED的阴极为低电平时被点亮,如下图: 这里com1到com8为共阳口,例: 当com1设置为高电平时 ...

  6. 【蓝桥杯-单片机学习笔记(三)】共阳数码管的静态显示

    一.要求 在CT107D单片机综合训练平台上,8个数码管分别单独依次显示0~9的值,然后所有数码管一起同时显示0~F的值,如此往复. 二.数码管 1.七段数码管 七段数码管,其实内部由8个发光二极管构 ...

  7. 【蓝桥杯—单片机学习笔记(四)】共阳数码管的动态显示

    一.要求 在CT107D单片机训练综合平台上,实现数码管的动态显示,在8位数码管中,前面4位显示年份"2022",接着是2个分隔符"--",最后两位是月份,从1 ...

  8. [蓝桥杯单片机]学习笔记——共阳数码管的静态与动态显示

    一.理论部分 共阳数码管引脚可以分为两个部分,一是段码,一个是位码.段码指的是一个数码管的7个段加dp小数点,一共8个,通过P0控制其亮灭使得数码管显示出不同效果.譬如亮afedcg表示的是6形状.位 ...

  9. 共阳数码管段码表_C51编程7数码管显示原理

    如果将单片机的比喻计算的主机,而按键相当于电脑的输入设备(键盘或者鼠标),那么LED灯可以作为输出设备的显示器:如果8位数据,使用8个LED显示数据表示,相当于是以二进制显示数据,非常不利于阅读. 为 ...

  10. STM32共阳数码管编程分享

    开篇简介 相信玩过单片机的人都不会对数码管感到陌生!这次的分享也是近期在做的一个小项目里面用到的实例,代码均是自编.自测,保质保量?相信对各位初学者能起到快速上手的作用.(主控基于STM32F103Z ...

最新文章

  1. IT Monitor
  2. QT之在QML中使用C++类和对象的两种方式
  3. kafka发送消息至指定分区
  4. python点击屏幕_Python屏幕操作
  5. Lucene.Net 3.0.3如何从TokenStream中获取token对象
  6. 解决计算治理问题,详解微众银行大数据平台中间件Linkis架构和应用
  7. html自动跳转页面,HTML实现页面自动跳转的五种方法
  8. Android应用的几种开发方式
  9. 程序员也需要掌握的常用Linux网络命令汇总
  10. Android系统裁剪:手把手教你如何进行系统裁剪
  11. kotlinx.serialization处理Json解析
  12. 计算机网络 - 概述
  13. 高德地图怎么画圈_高德地图 Javascript API 入门(二)
  14. iis 如何修改网站的默认浏览方式
  15. 多目标跟踪算法JDE在 UA-DETRAC数据集上训练
  16. 如何发布一个本地网站
  17. vivo Hi-Fi+QQ音乐 数字音乐市场的一剂良方
  18. 精美企业官网小程序源码,自带十几款模板适合各个行业 如保险 装修 服装 母婴 教育 旅游 婚庆 幼儿园等
  19. 淘宝网前端开发面试题
  20. 【数据结构】第一章绪论习题加答案

热门文章

  1. 数学建模—一元回归分析
  2. 【无标题】段码液晶驱动芯片VK1621S-1资料介绍
  3. Java使用iText PDF导出PDF文档
  4. python爬取酷狗音乐_python 爬虫 爬取酷狗音乐
  5. python乱码转中文_Python中文乱码问题(转)
  6. 波特率和比特率的联系和区别
  7. Beagleboneblack 中DDS模块驱动源码(AD9833)
  8. 中兴交换机如何查看服务器设备,中兴交换机查看设备序列号
  9. 添加Extension库
  10. Java简易聊天室YYchat