首页天道酬勤,

,

张世龙 05-13 01:48 85次浏览

轻松学习PIC的数字代码篇PIC单片机学习系列教程

那么,通过前期的学习,我们已经了解和熟悉了ICD2模拟刻录机和增强型PIC实验板的使用方法和学习方式。 学习了用单片机控制发光管、继电器、蜂鸣器、按钮等资源的方法,体会到了学习板的易用性和易用性。 我想自己一次编程一个发光管点亮的时候,对初学者来说一定很兴奋,很有成就感。 现在趁热打铁,再进一步,一起学习数码管的原理和使用方法吧。 这次实验将更加生动。

七个管道广泛用于家电和工业控制,如显示温度、数量、重量、日期、时间等,具有显示醒目、直观的优点。 在典型的人机对话框中,输入设备以密钥为中心,而输出设备以数码管和液晶屏为中心。 代码管作为非常常见的显示设备被应用,可以在各种设备上看到。 例如,图1是显示某个数字标题时的效果图。 因为对价格和亮度等条件敏感,基本上适用于只要求数字显示量的情况,所以多用于数据显示、定时控制等。 常见的数字代码实物如图2所示。

图1数码管显示效果图

图2数码管实物图

首先,让我们先调查一下理论知识。 图1中有8位数字管道,这些数字管道如何显示1、2、3、4……的数字呢? 别着急,一起慢慢学习吧。

代码管实际上由7个发光管组成的“8”字形构成,加上小数点后为8个。 这些段分别用字母a、b、c、d、e、f、g和dp表示。 向数码管的特定段施加电压后,这些特定段会发光,成为我们看得见的字体。 例如,如果显示“2”字,则必须是a亮b亮g亮e亮f不亮c不亮dp不亮。

7段数码管的段排列和内部结构如图3所示:

图3数码管结构图

为了应对驱动方式的不同,即各显示段中的低电平还是高电平的点亮,数码管分为公共阳极和公共阴极两种类型。 “公共阳极”是指8个LED的阳极相连构成公共端,同样,“公共阴极”是指8个LED的阴极相连构成公共端。 其内部LED的连接方法请参照图4。

图4数码管的内部结构图

正如以上原理所说明的那样,我们已经了解了数码管的工作原理,但是拿到数码管后,要正确应用它还不知道怎么做。 例如,现在要求在数码管上显示“5”,该怎么办呢? 首先,你需要理解一件事。 数字管道不识别“5”。 当然,我也没有认识到其他数字。 所以,绝对不要说“在数码管上写‘5’就行了”。 数字只是符号,对人来说是的。 对于单片机来说,单片机也只是通过LED以我们约定的方式显示内部结果。 这个“约定”是数字应该如何显示。例如,需要显示的数字0到9应该如图5所示。

图5显示了数字效果图

假设使用了共阴极数码管。 然后,对照图3和图4,看看“5”是如何显示的。 首先,关于数字代码,可知为了显示数字“5”,需要点亮a、c、d、f、g的段。 在知道这些段需要点亮后,让我们来看看增强型PIC实验板上数码管的控制电路。 因为我们需要考虑如何将软件和硬件结合起来编程。

图6数字编码电路原理图

图6中的a、b、c、d、e、f、g、DP分别连接到单片机的RC端口,控制显示数字的形状。 Q3、Q4、Q5、Q6、Q7、Q8这6个晶体管是芯片选择用晶体管,用于接通或断开某一系统的数字晶体管,RA1、RA0、RA3、RA2、RA5、RA4 通过控制这些晶体管的基极电平来打开或关闭数字晶体管的显示,即“启用能量”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

p>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”这些数字。

图7 数码管实验演示图

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

, ,