dspic c语言教程,轻松学PIC之数码管篇 PIC单片机学习系列教程

article/2025/10/25 4:05:34

轻松学PIC之数码管篇 PIC单片机学习系列教程

大家好,通过前一期的学习,我们已经对ICD2仿真烧写器和增强型PIC实验板的使用方法及学习方式有所了解与熟悉,学会了如何用单片机来控制发光管、继电器、蜂鸣器、按键等资源,体会到了学习板的易用性与易学性,当自己一次动手编程点亮一个发光管时,相信对于初学者来说,一定很兴奋,很有成就感吧!现在我们就趁热打铁,再向上跨一步,一起来学习一下数码管的原理及使用方法,这一期实验将会更具生动性。

说到七段数码管,它在家电及工业控制中有着很广泛的应用,例如用来显示温度、数量、重量、日期、时间等等,具有显示醒目、直观的优点。在一般的人机对话中,输入器件一般都是以按键为主,但输出器件则以数码管或LCD为主。数码管作为一种应用十分普遍的显示器件,可以在各种各样的设备上见到,例如图1就是某数字表头显示时候的效果图。它很适合用在对价格、亮度等条件比较敏感,同时基本上只要求显示数字量的时候,所以在数据显示,定时控制等场合用得很多。常见的数码管实物如图2所示。

724b4d0515a0289d1cf60d7a3d41b25c.png

图1 数码管显示效果图

2e58ff1599dee415f3ce8fea8c9d47dd.gif

图2 数码管实物图

首先,我们先对相关理论知识进行一番了解,可以看到图1中有8位数码管,那么这些数码管是怎样来显示1,2,3,4……数字的呢?别着急,我们一起慢慢来学。

数码管实际上是由7个发光管组成“8”字形构成的,加上小数点就是8个。这些段分别由字母a,b,c,d,e,f,g,dp来表示。当数码管特定的段加上电压后,这些特定的段就会发亮,以形成我们眼睛看到的字样了。如:显示一个“2”字,那么应当是a亮b亮g亮e亮d亮f不亮c不亮dp不亮。

7段数码管的段排列和内结构见图3:

a11d6ed64e79cf8c6d1be31720424e22.png

图3 数码管结构图

由于驱动方式的差异,也就是对应在各个显示段是低电平还是高电平点亮,数码管又分成两种类型,即共阳极和共阴极数码管。所谓“共阳极”即是8个LED的阳极连接在一起组成公共端,同理“共阴极”则是8个LED的阴极连接在一起组成公共端,其内部LED的连接方式可以参考图4。

ae1c2fcd7284ad9425ed593b43b1e810.png

图4 数码管内部结构图

虽然通过上文的原理介绍,对数码管的工作原理已经了解,但当我们拿到一个数码管时要正确地应用它还是一时不知如何下手,比如我们现在要求数码管显示“5”,需要怎么办呢?首先我们需要明白一个事情,数码管是不认识“5”的,当然也不认识其它数字,所以千万别说,“给数码管写个“5”就行了”,数字只是种符号,对人来说是这样的,对单片机而言也是,单片机只是通过LED是把内部的结果用我们约定的方式显示出来而已,这个“约定”就是数字该如何在LED上显示的方法。比如我们需要显示的数字0到9如图5所示。

169cf2025ccfb55759fa05fcdf6d1e7b.png

图5 显示数字效果图

假设我们使用共阴极数码管,然后我们对照图3和图4来看看“5”是如何显示出来的。首先对数码管而言,我们要想显示数字“5”,我们可以发现有如下一些段是需要点亮的,即A、C、D、F、G。知道了这些段需要点亮后,现在我们再来看一下增强型PIC实验板上数码管的控制电路,因为我们需要将软件和硬件相结合进行考虑如何来编程。

db362bc5b2bf7b06633c5a35dd652a39.png

图6 数码管电路原理图

图6中的A,B,C,D,E,F,G,DP分别与单片机的RC口相连,用来控制显示数字的形状。Q3、Q4、Q5、Q6、Q7、Q8这6个三极管是用来片选数码管所有,用来打开或关闭某一路数码管,RA1、RA0、RA3、RA2、RA5、RA4分别接在单片机的RA口上,通过控制这些三极管的基极电平来打开或关闭数码管的显示,即起到“使能”作用。如S1端为低电平,则允许相应的数码管显示,显示的字形则由RC口所决定。

我们可以列出表1这样的段码对应关系表,表中为数字“5”共阴段码。

段名称

DP

G

F

E

D

C

B

A

对应段码

对应管脚

RC7

RC6

RC5

RC4

RC3

RC2

RC1

RC0

数字5

0

1

1

0

1

1

0

1

0x6d

表1:数码管显示数字“5”的段码表

参照上面的过程,我们又可以列出共阴和共阳数码管0-9十个数字的段码表,如表2所示,在不改变硬件对应关系的前提下,段码表可以通用。

数字

0

1

2

3

4

5

6

7

8

9

共阴

0x3F

0x06

0x5B

0x4F

0x66

0x6D

0x7D

0x07

0x7F

0x6F

共阳

0xC0

0xF9

0xA4

0xB0

0x99

0x92

0x82

0xF8

0x80

0x90

表2:共阴、共阳数码管段码表

现在我们已经了解了整个显示过程,所以我们也就有了写程序的思路:程序中应该有一个变量,每隔一定时间在0-9之间变化,然后按照这个数据去查找段码表,把查到的数据送到RC口,段码值我们参照表2中共阳这一项。

我们使用MPLab IDE软件来进行C语言编程,它是我们的编程环境,同时我们可以通过使用ICD2仿真烧写器和增强型PIC实验板连接进行程序的仿真调试和烧写步骤,具体的操作步骤,我们已经在前几期做了详细的说明和介绍,在此就不再重复说明,读者朋友可以参阅以前的文章或直接登陆我们的网站查看资料。前面,我们已经对硬件原理和软件编写思路进行了了解,现在我们可以输入程序代码进行调试了,我们在MPLab IDE软件中新建工程,加入源程序代码,同时进行芯片型号的选择和配置位的设置,我们实验所用的芯片型号为PIC16F877A。上面理论说了一大堆,我们从这里开始动手喽:)我们的任务是要让六个数码管显示数字“0”——“9”字样,时间间隔为1秒。

#include

const unsigned char display_numb[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xd8,0x80,0x90};

void delay_1ms(void)

{

unsigned int n;

for(n=0;n<50;n++)

{

NOP();

}

}

void delay_ms(unsigned int time)

{

for(;time>0;time--)

{

delay_1ms();

}

}

void main(void)

{

TRISC=0X00;

TRISA=0X00;

while(1)

{

PORTC=display_numb[0];

PORTA=0X00;

delay_ms(1000);

PORTC=display_numb[1];

delay_ms(1000);

PORTC=display_numb[2];

delay_ms(1000);

PORTC=display_numb[3];

delay_ms(1000);

PORTC=display_numb[4];

delay_ms(1000);

PORTC=display_numb[5];

delay_ms(1000);

PORTC=display_numb[6];

delay_ms(1000);

PORTC=display_numb[7];

delay_ms(1000);

PORTC=display_numb[8];

delay_ms(1000);

PORTC=display_numb[9];

delay_ms(1000);

PORTC=display_numb[10];

}

}

程序代码输入后,读者朋友可以使用仿真模块或直接烧入编译好的HEX文件来进行验证,前者模式可以单步执行,同时监控程序变量在运行过程中的变化;后者直接烧入HEX文件,实验板直接脱机运行。输入了这么长一段程序后,作为初学者的读者一定对有些语句会有点疑问,下面我们就来一起结果实际,看一下一些关键程序语句的作用。

#include 语句用来加载PIC库文件, 数组display_numb用来定义数字“0”--“9”的字形码,也就是我们的表2中所罗列的内容。void delay_1ms(void) 是延时1ms的函数,void delay_ms(unsigned int time) 是延时X毫秒的函数,具体为多少毫秒由形参time变量决定,如我们执行函数 delay_ms(1000); 即表示为延时1000毫秒=延时1秒的时间。语句“TRISC=0X00;”用来设置RC口的输入、输出状态,在此我们设置为输出;语句“TRISA=0X00;”用来设置RA口的输入、输出状态,在此我们设置为输出。while(1) 是死循环语句,即周而复始地执行{ }内的语句体,如我们现在的程序中的作用即是不停地执行 delay_ms(x); PORTC=display_numb[x]; 这两类语句,即给RC口送一个字形码,延时1秒钟后,又给RC口赋予一个新的字形码,在我们从实验结果上看来就是数码管在不停地显示“0”——“9”这些数字。

6d9ad3b39631dbd06a4cc8f53f2f40e5.png

图7 数码管实验演示图

数码管的原理与使用我们讲到这里,接下来几期,我们将继续一起学习增强型PIC实验板的其它各部分资源的原理与使用,使你对单片机应用的各方面知识都有所入门与提高。增强型PIC实验板系统资源丰富,可做实验有:6位LED数码管、8路LED、直控键盘、蜂鸣器喇叭、继电器试验、I2C总线接口、SPI总线接口、160X液晶、128X64液晶、红外接收头接口、步进电机驱动接口、AD模/数转换接口、串行时钟芯片DS1302、温度传感器DS18B20接口、RS232串口通讯、外扩展接口以便外接更多的实验资源。


http://chatgpt.dhexx.cn/article/MAY0PBSl.shtml

相关文章

PIC单片机之I/O控制

I/O控制对于单片机而言是最基础最核心的东西&#xff0c;其实单片机除了AD DA 转换之外的事情。其他大部分的事情I/O口都能做的到。I/O控制简单却能千变万化。 单片机在大部分应用中做的事情&#xff0c;莫过于 输入高低电平 &#xff0c;输出高低电平。就是通过这简单的控制电…

PIC单片机入门_中断系统详解

1.中断的基本概念 当单片机正在执行程序时&#xff0c;出现了某些特殊状况&#xff0c;例如定时时间到、有键盘信号输入等&#xff0c;此时CPU须要暂时停止当前的程序&#xff0c;而转去执行处理这些事件的程序&#xff0c;待执行完这些特定的程序之后&#xff0c;再返回到原先…

PIC单片机学习笔记

视频内容来自哔哩哔哩-【单片机】PIC单片机F877A视频教程&#xff08;郭天祥&#xff09; 1、简介 本视频使用的单片机是PIC16F877A &#xff08;公司用的的dsPIC33FJ128GP306&#xff09; dsPIC33——16位单片机 中档产品仅有35条汇编语言——意外之喜 哈佛总线结构、RI…

PIC单片机学习—USART串口

PIC单片机学习—USART串口 最近做了几个项目都用到了PIC单片机&#xff0c;在这几个项目之前我只用到了51单片机和STM32来做控制类的项目&#xff0c;用PIC单片机的时候发现使用的时候和51单片机还是有所区别&#xff0c;有许多小坑需要注意&#xff0c;所以决定写几篇针对新手…

PIC单片机应用开发实践教程(四): MPLAB X IDE Debug

源码基于 PIC16F15355开发板&#xff0c;想了解详情&#xff0c;请点 PIC16F15355开发板 当程序写好后&#xff0c;我们就可以使用在线调试功能&#xff0c;验证代码的正确性。 1、打开工程 File - Open Project &#xff0c;打开我们要调试的工程 2、打开工程属性&#xf…

PIC单片机

PIC芯片所用编译器是MPLAB X IDE&#xff0c;刚开始接触PIC单片机&#xff0c;也是一脸茫然&#xff0c;然后查阅资料逐渐了解、运用编译器&#xff0c;这里我就不说编译器怎么使用了&#xff0c;下面我将以PIC12LF1822芯片为例&#xff0c;简单来说说我见解&#xff0c;分别说…

PIC单片机应用开发实践教程(六): 代码配置器(MCC)

源码基于 PIC16F15355开发板&#xff0c;想了解详情&#xff0c;请点 PIC16F15355开发板 1、简介 MPLAB 代码配置器&#xff08;MPLAB Code Configurator&#xff0c;MCC&#xff09;通过图形用户界面&#xff08;Graphical User Interface&#xff0c;GUI&#xff09;生成驱…

【PIC】单片机基本概述

1. 公司 PIC 单片机是 Microchip&#xff08;微芯&#xff09; 公司的产品&#xff0c;始于1989年。 2. 精简指令集技术 传统的单片机采用复杂指令集&#xff08;Complex Instruction Set Computer, CISC&#xff09;结构&#xff0c;通常有50~110条。而 PIC 采用精简指令集&…

PIC单片机应用开发实践教程(二): 新建工程

源码基于 PIC16F15355开发板&#xff0c;想了解详情&#xff0c;请点 PIC16F15355开发板 1 打开MPLAB X IDE File---New Project Microchip Embedded --- Standalone Project 选择所用MCU对应型号 点击 Finish 后&#xff0c;工程就建好了 2 添加main.c文件 3 添加main.h文件 …

PIC单片机的入门认识(以PIC12为学习目标)

1.学习PIC12针脚定义 针脚1及针脚8可接电源5V和地线。针脚2.3可外接晶振。 针脚4为复位脚&#xff0c;当单片机正常运行时接高电平&#xff0c;若有一个低电平输入&#xff0c;单片机便复位。 针脚5则为单片机的I/O脚&#xff0c;可控制它为输入或输出&#xff0c;输入0&…

PIC单片机应用开发实践教程(七):PIC16F153xx——时钟使用

源码基于 PIC16F15355开发板&#xff0c;想了解详情&#xff0c;请点 PIC16F15355开发板 PIC16F15355 内部晶振框图如下&#xff0c;从框图中我们知道MCU时钟来源有3个&#xff1a;外部时钟&#xff0c;内部时钟&#xff0c;Timer1 内部时钟源&#xff08;INTERNAL CLOCK SOUR…

PIC单片机入门教程(二)—— 安装集成开发环境(MPLAB X IDE)

PIC单片机入门教程&#xff08;二&#xff09;—— 安装集成开发环境&#xff08;MPLAB X IDE&#xff09; 教程中使用的电脑运行Windows 10 专业版 64位系统 1、下载 MPLAB X IDE v4.05 历史版本&#xff1a;http://www.microchip.com/development-tools/pic-and-dspic-downl…

PIC单片机-Mplab的使用与PIC单片机介绍

内容包括Mplab IDE与Mplab X IDE的使用&#xff0c;触摸功能实践&#xff0c;PIC单片机C与汇编混合编程&#xff0c;PIC单片机介绍等。紫色文字是超链接&#xff0c;点击自动跳转至相关博文。持续更新&#xff0c;原创不易&#xff01; 目录&#xff1a; 一、Mplab IDE的使用…

PIC16F887 实战编程 单片机编程 基础实验教程

文章目录 2 PIC工程建立与仿真3 单片机基础寄存器操作&#xff1a;3.1 IO3.2 模拟输入电压读取3.3 外部中断3.4 定时器中断3.5 串口UART3.6 IIC通信 4 实际项目5 如何阅读代码6 如何把代码放到MPLAB V5.0xc8 v2.0上工作&#xff1f;6.1 短暂的回顾6.2 xc8 v2.0程序结构6.3 移植…

通俗易懂讲PIC单片机:从一窍不通到入门进步

单片机入门不难------谈PIC系列&#xff08;转自矿石收音机论坛---崂山&#xff09;十年前的老帖子&#xff0c;讲得通俗易懂&#xff0c;分享之。 请看图1 这个8条腿的小螃蟹就是我们的第一顿饭&#xff0c;只要把它吃下去&#xff0c;以后的大餐就好办了。第1、8条腿接电源 …

PIC单片机应用开发实践教程(五): 烧录器简介

源码基于 PIC16F15355开发板&#xff0c;想了解详情&#xff0c;请点 PIC16F15355开发板 ​​​​​​​ PIC单片机&#xff0c;无论是8位的10/12/16/18系列&#xff0c;还是16位PIC24/dsPIC33系列&#xff0c;常用的烧录器如下&#xff1a;PICkit3&#xff0c;PICkit4&#…

PIC单片机入门_C语言编程技术

1.为什么也是C语言&#xff1f; 用C 语言来开发单片机系统软件最大的好处是编写代码效率高、软件调试直观、维护升级方便、代码的重复利用率高等&#xff0c;因此C 语言编程在单片机系统设计中越来越广泛的运用。PIC 单片机的软件开发&#xff0c;同样可以用C 语言实现。 Micro…

PIC单片机与PIC单片机C语言编程简介

对于计算机学院与电子学院相关的同学来说&#xff0c;单片机一定不是一个陌生的概念。在大学的学习生涯中&#xff0c;经常用于教学的是MCS-51系列单片机。其实&#xff0c;除了MCS-51单片机外&#xff0c;还有一类单片机——PIC单片机。 PIC单片机&#xff0c;英文名为Periphe…

PIC单片机应用开发实践教程(三): MCU配置位与烧录

1 编译 工程建好并把相应的 .c和.h文件都加载到工程后&#xff0c;如下图 试试编译&#xff0c;如果没有语法错误&#xff0c;编译结果如下 到这里&#xff0c;是不是可以进行烧录了呢&#xff1f;不急&#xff0c;还有很重要的一个步骤&#xff0c;MCU配置位的设置&#xff0…

PIC单片机应用开发实践教程(一):MPLAB X IDE 开发环境安装

源码基于 PIC16F15355开发板&#xff0c;想了解详情&#xff0c;请点 PIC16F15355开发板 1 准备电脑一台 2 下载开发环境 MPLAB-X-IDE 点Download后&#xff0c;自动下载。 3 下载C编译器&#xff08;以8位MCU用的xc8编译器为例&#xff09; MPLAB XC8 Compiler 4 安装MP…