现在的位置: 首页 > 综合 > 正文

数码管动态显示

2013年11月25日 ⁄ 综合 ⁄ 共 1783字 ⁄ 字号 评论关闭

      首先根据位选与段选理念(数码管静态显示一文)编写程序去控制不同数码管显示不同的数字。根据程序控制需要,在调试程序的过程中明白需要了解我们所要的控制对象(数码管)的一些特性。由于我自己拥有的这个单片机非常的简单,只有四个数码管。我的目标是通过编写C语言程序经编译连接后下载到单片机中,使各个灯依次显示数字1,2,3,4.

     基于前一篇“数码管静态显示”,我以相同的控制信号理念去编写程序。发现不能达到预期的目标。为了达到相应的目标,我需要了解控制对象的输入信号特性,再进一步修改程序。

    1.我的单片机上面的数码管是共阴极的,所需的位选信号为低(0)时相应的数码管被选中,反之被关闭。

     2.数码管的编码

        不同电路,数码管的编码可能不同。共阴极和共阳极的数码管编码也可能不同。对与我所拥有的单片机上面的共阴极数码管的编码规律如下

    数码管

用二进制来和数码管内发光二级管一一对应:1 1 1 1  1 1 1 1<-->dp g f e d c b a

当对应的二进制为为高时相应的发光二级管被点亮,显示的数字由被点亮的发光二级管组成。如当二进制数为0 0 0 0 0 1 1 0是数码管显示数字1.其中dp表示小数点的显示。

 

拥有了上述知识后我们就可以编写(修改)程序来实现目标了。

 

1.C语言程序

<p></p>

#include<reg52.h>

#define	uchar 	unsigned char
#define uint	unsigned int

//位选数组
sbit p20=P2^0;
sbit p21=P2^1;
sbit p22=P2^2;
sbit p23=P2^3; 


//加给位选数组的信号
uint P2_nInfo[] = {
	0x7, 0xb, 0xd, 0xe
};

//数码管段选编码数组
uchar code D0_n[] = {
	0x06, 0x5b, 0x4f, 0x66
};

//自定义函数声明
void deaytime(int DeayTime);

void main()
{
	while(1){
		//选中第一个数码管,
		//共阴极数码管低位选有效
		p20	= 0;
		
		//送段选数据
		P0	= D0_n[0];
		
		//调用自定义函数延迟0.5s
		deaytime(500);
		//关闭所选数码管的显示
		p20	= 1;


		p21	= 0;
		P0	= D0_n[1];
		
		deaytime(500);
		p21	= 1;
	}
}

//自动以函数
//使这段代码的执行时间为xms
void deaytime(int DeayTime)
{
	int i, j;
	for(i = DeayTime; i > 0; i--)
		for(j = 110; j > 0; j--);
}

 

2.程序解释

电路图:

         

  (1)对应于了解到的第一个知识点,我们用低电平选中数码管CS4。根据第二个知识点使被选中的数码管显示数字1.

  (2)保持这个状态0.5s(相应知识点在http://blog.csdn.net/misskissc/article/details/8036464,第一个for循环的初始数值为多少就会延迟多少ms)。

  (3)延迟相应的时间之后使显示此数字的数码管关闭(对应位选信号为真)。

  (4)为下一个数码管进行相应的设置。

以上程序运行的结果是CS4数码管显示1,0.5s后CS3数码管显示2, 0.5s后CS4数码管显示1......当做到这一步的时候,同理可得后面的数字3,和4的显示,即可达到最开始的目标。

 

3.总结

  (1)学习的过程分阶段,后一个阶段了解知识的程度要比前一个阶段深。需继续深入。

   (2)在对4个数码管数字显示编程之前,有对此目标进行过设计,但是单片机的扩展数据类型sbit不支持定义数组变量,这让我很恼火,原本一个while循环就可以完成的事情,需要分步来实现(每次位选都需要独占几行代码),不过还好数量不多,作为练习,多敲几行代码也没关系

  (3)芯片上面的引脚“编号”对应的二进制数是一一对应的,如上图中的D0 D1 ...D7,D0对应二进制数的最低位,D1对应二进制的次低位,依次后退。

  (4)共阴极数码管

           位选:    高电平   数码管不被选中,           低电平  数码管被选中

           段选:   高电平   二极管亮,                        低电平   二极管熄

   (5)电路中的锁存器可以记忆先前的状态,指导状态被新输入信号覆盖

 

抱歉!评论已关闭.