文章目录

  • 前言
  • 一、引入数码管数组
  • 二、设计结构体
  • 三、数据存储
  • 四、显示处理
  • 五、函数的使用
  • 总结

前言

本文主要讲述使用指针及结构体实现三位数码管的显示。


一、引入数码管数组

提示:具体数值需要根据实际数码管共阴/共阳情况进行更改。

const uint8_t Table[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // 32-41
//                         ' ',    0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xFC, 0x60, 0xDA, 0xF2,  // 42-51
//                                            -                 0     1     2     30x66, 0xB6, 0xBE, 0xE0, 0xFE, 0xF6, 0x00, 0x00, 0x00, 0x00,  // 52-61
//                           4,    5,    6,    7,    8,    9,0x00, 0x00, 0x00, 0x00, 0x00, 0x9C, 0x00, 0x9E, 0x8E, 0x00,  // 62-71
//                                             A,    B,    C,    D,    E,    F,    G,0x6E, 0x0c, 0x00, 0x00, 0x1C, 0x00, 0x00, 0xFC, 0xce, 0x00,  // 72-81
//                           H,    I,    J,    K,    L,    M,    N,    O,    P     Q,0xEE, 0xB6, 0x8C, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // 82-91
//                           R,    S,    T,    U,    V,    W,    X,    Y,    Z,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x7a, 0x00,  // 92-101
//                                                         a,    b,    c,    d,    e,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x3A,  // 102-111
//                           f,    g,    h,    i,    j,    k,    l,    m,    n,    o,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // 112-121
//                           p,    q,    r,    s,    t,    u,    v,    w,    x,    y,0x00 };
//                           z,

二、设计结构体

typedef struct
{uint8_t DispH;  uint8_t DispM;uint8_t DispL;uint8_t DispDP;_Bool DispCtrl; // 开关控制
}DISP_SET;DISP_SET S_DISPINFO = {' ', ' ', ' '};   

三、数据存储

/**************************************************
*函数名称:DISP_SET* disp_Set(void)
*函数功能:数码管显示
*入口参数:void
*出口参数:void
**************************************************/
DISP_SET* disp_Set(void)
{return &S_DISPINFO;
}/************************************
* 功能:数码管显示数据,显示小数点
* 参数:无
* 返回值:无
************************************/
void ShowData(uint16_t data)
{uint8_t* p_Disp = (uint8_t*)disp_Set();if(data< 1000){p_Disp->DispH = data/100;p_Disp->DispM = (data/10)%10;p_Disp->DispDP = 1;p_Disp->DispL = data%10;}else{p_Disp->DispH = data/1000;p_Disp->DispM = (data/100)%10;p_Disp->DispDP = 0;p_Disp->DispL = (data/10)%10;}
}/************************************
* 功能:数码管显示数据,不显示小数点
* 参数:无
* 返回值:无
************************************/
void ShowOtherData(char* str)
{uint8_t* p_Disp = (uint8_t*)disp_Set();for(char* p = str; p < str+3; p++, p_Disp++){*p_Disp = *p;}disp_Set()->DispDP = 0;
}

四、显示处理


uint8_t GPIO[8] = {LED_A_GPIO_Port, LED_B_GPIO_Port, LED_C_GPIO_Port, LED_D_GPIO_Port, LED_E_GPIO_Port, LED_F_GPIO_Port, LED_G_GPIO_Port, LED_H_GPIO_Port};
uint8_t Pin[8] = {LED_A_Pin , LED_B_Pin, LED_C_Pin, LED_D_Pin, LED_E_Pin, LED_F_Pin, LED_G_Pin, LED_H_Pin};/**************************************************
*函数名称:void Display_Bit(void)
*函数功能:数码管位选显示:把代码发送到移位寄存器
*入口参数:udata
*出口参数:void
**************************************************/
void Display_Bit(uint8_t udata)
{uint8_t Code;uint8_t n = 0;if(udata < 10){Code = Table['0' - ' ' + udata];}else{Code = Table[udata - ' '];}// 移位寄存器的处理for(n = 0; n < 8; n++){if(Code & 0x80){Gpio_WriteOutputIO(GPIO[n], Pin[n], TRUE);}else{Gpio_WriteOutputIO(GPIO[n], Pin[n], FALSE);}Code <<= 1;}
}/**************************************************
*函数名称:void  Display(void)
*函数功能:显示处理
*入口参数:void
*出口参数:void
**************************************************/
void Display(void)
{static uint8_t s_Bit = 0;if(S_DISPINFO.DispCtrl == DISP_OFF){COM0(FALSE); // 位选COM1(FALSE);COM2(FALSE);}else{if(s_Bit == 0){COM0(FALSE);COM1(FALSE);COM2(FALSE);Display_Bit(_DISPINFO.DispH);COM0(TRUE);s_Bit = 1;}else if(s_Bit == 1){COM0(FALSE);COM1(FALSE);COM2(FALSE);Display_Bit(S_DISPINFO.DispM);if(S_DISPINFO.DispDP){DISP_H(TRUE); // 小数点显示}else{DISP_H(FALSE); // 小数点不显示}COM1(TRUE);s_Bit = 2;}else if(s_Bit == 2){COM0(FALSE);COM1(FALSE);COM2(FALSE);Display_Bit(S_DISPINFO.DispL);  COM2(TRUE);s_Bit = 0;}else{}}
}

五、函数的使用

void Timer_1ms(void)   //定时器中的定时参数处理
{if(++display_time >= 5){display_time = 0;//ShowData(650); //数值显示65.0//ShowData(1250); //数值显示125ShowOtherData("LOC"); // 显示LOCDisplay();   }
}

总结

以上仅为作者实际使用的函数整理,如有错误,欢迎批评指正;若有更好的想法,欢迎留言评论。

【C语言】实现3位数码管显示相关推荐

  1. 单片机c语言数码管显示子程序,单片机C语言之两位数码管动态显示

    <单片机C语言之两位数码管动态显示>由会员分享,可在线阅读,更多相关<单片机C语言之两位数码管动态显示(1页珍藏版)>请在人人文库网上搜索. 1.include #define ...

  2. 两位数码管秒表c语言,两位数码管显示计时器.doc

    两位数码管显示计时器 一.题目 用定时0的方式1实现数码管两位59S循环计时(计时器) 二.思路方案 本实验利用单片机的定时器/计数器定时和计数的原理,通过proteus 仿真软件来实现模拟实现.模拟 ...

  3. 两位数码管30秒倒计时c语言,基于51单片机共阴两位数码管显示倒计时

    <基于51单片机共阴两位数码管显示倒计时>由会员分享,可在线阅读,更多相关<基于51单片机共阴两位数码管显示倒计时(2页珍藏版)>请在人人文库网上搜索. 1.基于51单片机共阴 ...

  4. 单片机8位数码管时钟c语言汇编,基于8051单片机和DS12C8878位数码管显示的时钟.docx...

    基于8051单片机和DS12C8878位数码管显示的时钟 #include #include #define sec XBYTE[0xed00]//秒寄存器地址 #define min XBYTE[0 ...

  5. avr单片机led数码管六位动态显示时分秒c语言程序,AVR单片机8位数码管显示的程序实现(两种方法介绍)...

    描述 本文为大家介绍两个AVR单片机8位数码管显示的程序实现. AVR单片机595驱动8位数码管的显示的电路实现 主程序代码 #include > #include //GCC中的延时函数头文件 ...

  6. STC51入门笔记(郭天祥C语言)---第三节:数码管显示原理及应用实现

    这里是引用 声明:本篇文章只是个人知识盲区.知识弱点.重点部分的归纳总结,望各位大佬不喜勿喷.梳理顺序是按照书籍的实际顺序梳理,转载请注明出处. 作者:sumjess 一.数码管显示原理 我们先来看几 ...

  7. void函数调用时显示不允许使用不完整的_4位数码管显示模块驱动

    TM1637四位数码管模块是一个带时钟点的4位共阳数码管(0.36英寸)的显示模块,驱动芯片为TM1637,驱动方式为IIC,因此只需2根信号线即可使单片机控制4位8段数码管(数码管8级亮度可调). ...

  8. 8255总线实验 编写程序利用8255扩展单片机的IO口,控制8位数码管显示1-8。

    8255总线实验 编写程序利用8255扩展单片机的IO口,控制8位数码管显示1-8. 程序: #include<reg51.h> #include<absacc.h> #def ...

  9. python数码管倒计时程序_树莓派Python编程用1位数码管显示数字倒计时

    用1位数码管显示数字倒计时 概述 上一篇 我们学习了使用 PWM 来控制 LED 的亮度,这次我们学习使用1位数码管显示个位数字倒计时. 通过本节课,我们能学习到: 1位数码管的显示原理 所需硬件 树 ...

  10. 第三篇:动态 8位数码管显示---亚龙236电路

    第三篇:动态8位数码管显示 -亚龙236电路 上一篇中已经实现了数码管的静态显示,如果按照上一篇的思路89s52芯片最多可以驱动4位数码管.这一节我们来看看其它显示更多位数的方案. 目前最常用的是 5 ...

最新文章

  1. 如何设计出优秀的Restful API?
  2. Lucene in action 笔记 analysis篇
  3. 电商扣减库存_以电商为例 | B端产品经理,怎么做好库存系统设计
  4. [YTU]_2626( B 统计程序设计基础课程学生的平均成绩)
  5. 什么是LambdaExpression,如何转换成Func或Action(2)
  6. MySQL-05:pymysql与pycharm设置
  7. weblogic hibernate HqlToken
  8. 文具用品分类html,中国商品分类.doc
  9. WinPE作为启动硬盘
  10. 青蛙换位置excel_吃青蛙:如何在Excel中创建每日交付的sprint消耗图
  11. micropython和python区别-MicroPython简介
  12. SCSI子系统基础学习笔记 - 3. SCSI设备探测
  13. 关于pfx证书和cer证书
  14. 数学中竟然还有这样的定理!
  15. Ratione aspernatur nam dolorem vitae quia.Fumer comme créer passer ailleurs jouer lumière.
  16. Altium Designer(AD20)画PCB时ctrl键、shift键、鼠标按键的妙用
  17. c语言图片加水印,[求助]C语言 bmp文件加上水印
  18. Jetpack-Compose之三附带效应(副作用)
  19. CSS文本样式和CSS3文本效果以及背景
  20. IMAX探索VR产业,欲再造电影业传奇!

热门文章

  1. α-β剪枝算法简单原理说明
  2. 物流信息根服务器,用勤哲Excel服务器实现物流运输管理系统
  3. 第46章 Django完结篇,系统上线
  4. 【HTML+CSS+JavaScript】实现萤火虫闪烁效果
  5. .git文件夹_关于Git使用的(吐血)整理再也不用担心因为电脑故障而失去自己辛苦写下的论文或代码...
  6. 采集软件:自媒体必备神器,你掌握了吗?
  7. 什么是python标识符
  8. Windows下的用户配置文件管理(二)
  9. 微信公众号的主页链接是怎么调出来的?
  10. 计算机用户账户已禁用,Win7的账户已被停用应该怎么办?