【C语言】实现3位数码管显示
文章目录
- 前言
- 一、引入数码管数组
- 二、设计结构体
- 三、数据存储
- 四、显示处理
- 五、函数的使用
- 总结
前言
本文主要讲述使用指针及结构体实现三位数码管的显示。
一、引入数码管数组
提示:具体数值需要根据实际数码管共阴/共阳情况进行更改。
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位数码管显示相关推荐
- 单片机c语言数码管显示子程序,单片机C语言之两位数码管动态显示
<单片机C语言之两位数码管动态显示>由会员分享,可在线阅读,更多相关<单片机C语言之两位数码管动态显示(1页珍藏版)>请在人人文库网上搜索. 1.include #define ...
- 两位数码管秒表c语言,两位数码管显示计时器.doc
两位数码管显示计时器 一.题目 用定时0的方式1实现数码管两位59S循环计时(计时器) 二.思路方案 本实验利用单片机的定时器/计数器定时和计数的原理,通过proteus 仿真软件来实现模拟实现.模拟 ...
- 两位数码管30秒倒计时c语言,基于51单片机共阴两位数码管显示倒计时
<基于51单片机共阴两位数码管显示倒计时>由会员分享,可在线阅读,更多相关<基于51单片机共阴两位数码管显示倒计时(2页珍藏版)>请在人人文库网上搜索. 1.基于51单片机共阴 ...
- 单片机8位数码管时钟c语言汇编,基于8051单片机和DS12C8878位数码管显示的时钟.docx...
基于8051单片机和DS12C8878位数码管显示的时钟 #include #include #define sec XBYTE[0xed00]//秒寄存器地址 #define min XBYTE[0 ...
- avr单片机led数码管六位动态显示时分秒c语言程序,AVR单片机8位数码管显示的程序实现(两种方法介绍)...
描述 本文为大家介绍两个AVR单片机8位数码管显示的程序实现. AVR单片机595驱动8位数码管的显示的电路实现 主程序代码 #include > #include //GCC中的延时函数头文件 ...
- STC51入门笔记(郭天祥C语言)---第三节:数码管显示原理及应用实现
这里是引用 声明:本篇文章只是个人知识盲区.知识弱点.重点部分的归纳总结,望各位大佬不喜勿喷.梳理顺序是按照书籍的实际顺序梳理,转载请注明出处. 作者:sumjess 一.数码管显示原理 我们先来看几 ...
- void函数调用时显示不允许使用不完整的_4位数码管显示模块驱动
TM1637四位数码管模块是一个带时钟点的4位共阳数码管(0.36英寸)的显示模块,驱动芯片为TM1637,驱动方式为IIC,因此只需2根信号线即可使单片机控制4位8段数码管(数码管8级亮度可调). ...
- 8255总线实验 编写程序利用8255扩展单片机的IO口,控制8位数码管显示1-8。
8255总线实验 编写程序利用8255扩展单片机的IO口,控制8位数码管显示1-8. 程序: #include<reg51.h> #include<absacc.h> #def ...
- python数码管倒计时程序_树莓派Python编程用1位数码管显示数字倒计时
用1位数码管显示数字倒计时 概述 上一篇 我们学习了使用 PWM 来控制 LED 的亮度,这次我们学习使用1位数码管显示个位数字倒计时. 通过本节课,我们能学习到: 1位数码管的显示原理 所需硬件 树 ...
- 第三篇:动态 8位数码管显示---亚龙236电路
第三篇:动态8位数码管显示 -亚龙236电路 上一篇中已经实现了数码管的静态显示,如果按照上一篇的思路89s52芯片最多可以驱动4位数码管.这一节我们来看看其它显示更多位数的方案. 目前最常用的是 5 ...
最新文章
- 如何设计出优秀的Restful API?
- Lucene in action 笔记 analysis篇
- 电商扣减库存_以电商为例 | B端产品经理,怎么做好库存系统设计
- [YTU]_2626( B 统计程序设计基础课程学生的平均成绩)
- 什么是LambdaExpression,如何转换成Func或Action(2)
- MySQL-05:pymysql与pycharm设置
- weblogic hibernate HqlToken
- 文具用品分类html,中国商品分类.doc
- WinPE作为启动硬盘
- 青蛙换位置excel_吃青蛙:如何在Excel中创建每日交付的sprint消耗图
- micropython和python区别-MicroPython简介
- SCSI子系统基础学习笔记 - 3. SCSI设备探测
- 关于pfx证书和cer证书
- 数学中竟然还有这样的定理!
- Ratione aspernatur nam dolorem vitae quia.Fumer comme créer passer ailleurs jouer lumière.
- Altium Designer(AD20)画PCB时ctrl键、shift键、鼠标按键的妙用
- c语言图片加水印,[求助]C语言 bmp文件加上水印
- Jetpack-Compose之三附带效应(副作用)
- CSS文本样式和CSS3文本效果以及背景
- IMAX探索VR产业,欲再造电影业传奇!
热门文章
- α-β剪枝算法简单原理说明
- 物流信息根服务器,用勤哲Excel服务器实现物流运输管理系统
- 第46章 Django完结篇,系统上线
- 【HTML+CSS+JavaScript】实现萤火虫闪烁效果
- .git文件夹_关于Git使用的(吐血)整理再也不用担心因为电脑故障而失去自己辛苦写下的论文或代码...
- 采集软件:自媒体必备神器,你掌握了吗?
- 什么是python标识符
- Windows下的用户配置文件管理(二)
- 微信公众号的主页链接是怎么调出来的?
- 计算机用户账户已禁用,Win7的账户已被停用应该怎么办?