0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

第6章 中断与数码管动态显示(6.1 6.2)

137933yu 来源:137933yu 作者:137933yu 2025-12-08 17:03 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

中断是单片机系统重点中的重点,因为有了中断,单片机就具备了快速协调多模块工作的能力,可以完成复杂的任务。本章将首先带领大家学习一些必要的C语言基础知识,然后讲解数码管动态显示的原理,并最终借助于中断系统来完成实用的数码管显示程序。
6.1C语言的数组
6.1.1数组的基本概念
第4章已经学过变量的基本类型,比如char、int等等。这种类型描述的都是单个具有特定意义的数据,当要处理拥有同类意义但是却包含很多个数据的时候,就可以用到数组了,比如数码管的真值表,就是用一个数组来表达的。
从概念上讲,数组是具有相同数据类型的有序数据的组合,一般来讲,数组定义后满足以下三个条件。
1、具有相同的数据类型;
2、具有相同的名字;
3、在存储器中是被连续存放的。
比如上节课定义的数码管真值表,如果把关键字code去掉,数组元素将被保存在RAM中,在程序中可读可写,同时也可以在中括号里边标明这个数组所包含的元素个数,比如:
unsigned char LedChar[16] = {
0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
};
在这个数组中的每个值都称之为数组的一个元素,这些元素都具备相同的数据类型就是unsigned char型,它们有一个共同的名字LedChar,不管放到RAM中还是FLASH中,都是存放在一块连续的存储空间里的。
有一点要特别注意,这个数组一共有16(中括号里面的数值)个元素,但是数组的单个元素的表达方式——下标是从0开始,因此实际上上边这个数组的首个元素LedChar[0]的值是0xC0,而LedChar[15]的值是0x8E,下标从0到15一共是16个元素。
LedChar这个数组只有一个下标,称之为一维数组,还有两个下标和多个下标的,称之为二维数组和多维数组。比如unsigned char a[2][3];表示这是一个2行3列的二维数组。在大多数情况下使用的是一维数组,对于初学来说,先来研究一维数组,多维数组等遇到了再了解。
6.1.2数组的声明
一维数组的声明格式如下:
数据类型 数组名 [数组长度];
1、数组的数据类型声明的是该数组的每个元素的类型,即一个数组中的元素具有相同的数据类型。
2、数组名的声明要符合C语言固定的标识符的声明要求,只能由字母、数字、下划线这三种符号组成,且第一个字符只能是字母或者下划线。
3、方括号中的数组长度是一个常量或常量表达式,并且必须是正整数。
6.1.3数组的初始化
数组在进行声明的同时可以进行初始化操作,格式如下:
数据类型 数组名 [数组长度] = {初值列表};
以上节课用的数码管的真值表为例来讲解注意事项。
unsigned char LedChar[16] = {
0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
};
1、初值列表里的数据之间要用逗号隔开;
2、初值列表里的初值的数量必须等于或小于数组长度,当小于数组长度时,数组的后边没有赋初值的元素由系统自动赋值为0。
3、若给数组的所有元素都赋初值,那么可以省略数组的长度。
4、系统为数组分配连续的存储单元的时候,数组元素的相对次序由下标来决定,就是说LedChar[0]、LedChar[1]……LedChar[15]是按照顺序紧挨着依次排下来的。
6.1.4数组的使用和赋值
在C语言程序中,是不能一次使用整个数组的,只能使用数组的单个元素。一个数组元素相当于一个变量,使用数组元素的时候与使用相同数据类型的变量的方法是一样的。比如LedChar这个数组,如果没加code关键字,那么它可读可写,可以写成a = LedChar[0]这样来把数组的一个元素的值送个a这个变量,也可以写成LedChar[0] = a这样把a这个变量的值送给数组中的一个元素,以下三点要注意:
1、引用数组的时候,那个方括号里的数字代表的是数组元素的下标,而数组初始化的时候方括号里的数字代表的是这个数组中元素的总数。
2、数组元素的方括号里的下标可以是整型常数,整型变量或者表达式,而数组初始化的时候方括号里的数字必须是常数不能是变量。
3、数组整体赋值只能在初始化的时候进行,程序执行代码中只能对单个元素赋值。
6.2if语句
if语句前边程序已用过多次,本小节系统的介绍一下,方便后边的深入学习。if语句有两个关键字:if和else,把这两个关键字翻译一下就是:“如果”和“否则”。if语句一共有三种格式,分别来看。
1、if语句的默认形式:
if (条件表达式)
{
语句1;
}
其执行过程是,if(即如果)条件表达式的值为“真”,则执行语句1;如果条件表达式的值为“假”,则不执行语句1。
这里要提醒一点,C语言一个分号表示一条语句的结束,因此如果if后边只有一条执行语句的时候,可以省略大括号,但是如果有多条执行语句的话,必须加上大括号。
那么
if (sec >= 16)
{
sec = 0;
}
当sec的值大于或等于16的时候,括号里的值才是“真”,就执行sec=0这一句,当sec的值小于16时,括号里就为“假”,就不执行这一句。
2、if...else语句
有些情况下,除了要在括号里条件满足时执行相应的语句外,在不满足该条件的时候,也要执行一些另外的语句,这时候就用到了if...else语句,它的基本语法形式是:
if (条件表达式)
{
语句1;
}
else
{
语句2;
}
比如上一章的最后一段程序也可以写成:
P0 = LedChar[sec];
if (sec >= 15)
{
sec = 0;
}
else
{
sec++;
}
这个程序可以修改后下载到单片机里验证一下,程序逻辑自己动脑筋分析,注意条件表达式内16到15的变化,想一下为什么,这里就不多解释了。
3、if....else if语句
if...esle语句是一个二选一的语句,或者执行if分支后的语句,或者执行else分支后的语句。还有一种多选一的用法就是if...else if语句。他的基本语法格式是:
if (条件表达式1) {语句1;}
else if (条件表达式2) {语句2;}
else if (条件表达式3) {语句3;}
... ...
else {语句n;}
执行过程是:依次判断条件表达式的值,当出现某个值为“真”时,则执行相对应的语句,然后跳出整个if的语句块,执行“语句n”后面的程序;如果所有的表达式都为“假”,则执行else分支的“语句n”后,再执行“语句n”后边的程序。
if语句在C语言编程中使用频率很高,用法也不复杂,所以必须要熟练掌握。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数码管
    +关注

    关注

    32

    文章

    1895

    浏览量

    94584
  • 中断
    +关注

    关注

    5

    文章

    922

    浏览量

    43966
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    ChromeLED CDTX40系列数码管显示模块技术解析

    ChromeLED CDTX40系列数码管显示模块技术解析 在电子设备的设计中,数码管显示模块是一种常见且重要的组件,它能直观地显示各种数字
    的头像 发表于 05-17 10:05 266次阅读

    ChromeLED CDSx12系列数码管产品详解

    ChromeLED CDSx12系列数码管产品详解 在电子设计领域,数码管是一种常见且重要的显示元件。今天我们要详细介绍ChromeLED公司的CDSx12系列数码管,涵盖其封装尺寸、
    的头像 发表于 05-17 09:15 136次阅读

    数字时钟LED驱动数显屏驱动原厂VK1668点阵数码管显示芯片

    驱动IC、LED芯片、LED驱动器、数码管显示驱动、LED显示驱动、LED数显驱动原厂、LED数显驱动芯片、LED驱动IC、点阵LED显示驱动、LED屏驱动IC、数显驱动芯片、
    发表于 05-09 10:18

    Proteus8 professional 仿真中 7SEG-MPX4-CA 四位数码管不亮

    = 1;// 允许T0中断 TR0 = 1;// 启动T0 EA = 1; // 全局中断使能 } // 数码管显示函数(动态扫描,
    发表于 05-04 09:46

    大电流数码管驱动LED显示驱动芯片血压计LED驱动VK16K33A

    ; LDO稳压IC; 水位检测IC) LED驱动、LED屏驱动、数显驱动IC、LED芯片、LED驱动器、数码管显示驱动、LED显示驱动、LED数显驱动原厂、LED数显驱动芯片、LED驱动IC、点阵LED
    发表于 04-29 11:20

    LED芯片点阵LED驱动点阵数码管显示芯片 VK1616

    显驱动IC、LED芯片、LED驱动器、数码管显示驱动、LED显示驱动、LED数显驱动原厂、LED数显驱动芯片、LED驱动IC、点阵LED显示驱动、LED屏驱动IC、数显驱动芯片、
    发表于 04-29 09:07

    数码管 选型手册2025年最新版

    数码管具有高亮度、多种颜色、宽视角、简单驱动、长寿命、抗震抗冲击、节能环保和成本低等特点。适用于电子设备、工业控制和家用电器等领域的数字显示,提供清晰、均匀的显示效果,易于集成和控制。
    发表于 12-30 11:34 1次下载

    【EASY EAI Nano-TB(RV1126B)开发板试用】+串行数码管显示驱动

    在开发板上,为用户预留了3个GPIO引脚以便测试和使用,见图1所示。 图1预留的GPIO资源 这3个GPIO引脚的位置见图2所示,用它可驱动串行数码管显示模块来实现显示功能。 图2 引脚位置 为此
    发表于 12-24 19:03

    6 中断数码管动态显示(6.5 6.6)

    6.5单片机中断系统 6.5.1中断的产生背景 请设想这样一个场景:此刻我正在厨房用煤气烧一壶水,而烧开一壶水刚好需要10分钟,我是一个主体,烧水是一个目的,而且我只能时时刻刻在这里烧水,因为一旦水
    的头像 发表于 12-09 17:43 805次阅读
    <b class='flag-5'>第</b><b class='flag-5'>6</b><b class='flag-5'>章</b> <b class='flag-5'>中断</b>与<b class='flag-5'>数码管</b><b class='flag-5'>动态显示</b>(6.5 6.6)

    5 定时器与数码管基础(5.3)

    5-2所示。 图5-2 数码管原理图 这是比较常见的数码管的原理图,Kingst51开发板子上一共有6数码管。前边有了LED小灯的学习,数码管
    的头像 发表于 12-02 15:57 1698次阅读
    <b class='flag-5'>第</b>5<b class='flag-5'>章</b> 定时器与<b class='flag-5'>数码管</b>基础(5.3)

    【瑞萨RA6E2】ADC数据采集与数码管显示

    概述 项目简介 本报告基于瑞萨RA6E2评估板,实现了一个完整的ADC数据采集与显示系统。通过板载ADC通道采集模拟信号,将采集到的数字量通过动态扫描方式在4位数码管上实时
    发表于 11-27 00:52

    原厂 FZH114C  一款LED(发光二极数码管、点阵屏)驱动控制专用芯片

    :驱动6数码管,每位数码管7段(a-g)。8段×5位:驱动5位数码管,每位数码管8段(含小数点DP)。亮度调节:段驱动电流8级可调(建议≥
    发表于 11-19 14:43

    FZH114  LED(发光二极数码管、点阵屏)驱动控制专用芯片,集成数字通讯电路、 解码电路、数据锁存器、震荡器

    显示、LED点阵屏、机顶盒显示等。 工业控制设备:需要多位数码管或LED点阵显示的场景。 注意事项 段驱动电流:建议设置为2/8及以上,以确保LED正常点亮。 共阴设计:仅适用于共阴
    发表于 11-19 11:13

    级联动态扫描显示数码管问题

    GD32F103C8T6 硬件SPI连接移位寄存器74HC595级联,动态扫描显示五位数码管 是否需要电平转换芯片TXB0104 数码管选择
    发表于 10-07 20:36

    【应用】工业现场的“智能显示管家”:亿佰特EID051-1xx系列 Modbus数码管解析

    数码管。亿佰特新推出的EID051-1xx系列Modbus数码管,以多种核心优势,成为工业现场的一大助力。一.什么是Modbus数码管?Modbus数码管是一种通过R
    的头像 发表于 07-17 19:34 926次阅读
    【应用】工业现场的“智能<b class='flag-5'>显示</b>管家”:亿佰特EID051-1xx系列 Modbus<b class='flag-5'>数码管</b>解析