原创 51单片机复习札记之三——数码管显示

2010-7-18 11:01 2613 13 13 分类: MCU/ 嵌入式

开发板上数码管(共阴型)的8位段选和8个数码管的位选都是接在P0口上的,通过两片74HC573进行驱动。两片74HC573的锁存信号分别接到单片机的P2.6和P2.7端。


数码管的显示分静态和动态两种。


在这里,静态显示的原理就是将将要显示的字型码和要显示的数码管的位选信号分别锁存在两片573中。


下面这段代码是静态方式依次显示0~F


#include <reg52.h>


#include "Config.h"


//数码管段选和位选信号


sbit Seg = P2^6;


sbit Bit = P2^7;


//数码管0~F字形码


code uchar LED[] = {0x7B,0x42,0x1F,0x4F,0x66,0x6D,0x7D,0x43,


                            //     0  
1   2   3    4   
5    6    7                                                                           0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x3D,0x35};


                            //    8    9   A    B   
C   D   E   F


 


/********************


函数名称:Delay


函数功能:延时


入口参数:uint t—要延时的毫秒数


返回参数:无


备    注:无


*********************/


void Delay(uint t)


{


       uint
i;


       while(t--)


       {


              for
(i=0;i<125;i++)//12MHz晶振延时约1ms


              {}


       }


}


//********End of Function************


 


void main()


{


       uchar
i = 0;


       while(1)


       {


              Bit
= 1;


              P0
= LED;  


              Bit
= 0;


 


              Seg
= 1;


              P0
= 0xEF;


              Seg
= 0;


 


              i++;


              if(i>15)
i = 0;


              Delay(500);


       }


}


 


所谓动态显示,就是轮流发送几位数码管的段选和位选信号,利用数码管的余辉和人眼的视觉暂留功能,让人觉得这几位数码管在同时显示。


下面这一段代码是动态显示0~3。


#include <reg52.h>


#include "Config.h"


#include <INTRINS.H>


 


//数码管段选和位选信号


sbit Seg = P2^6;


sbit Bit = P2^7;


//数码管0~F字形码


code uchar LED[] = {0x7B,0x42,0x1F,0x4F,0x66,0x6D,0x7D,0x43,


                            //     0  
1   2   3   
4    5    6   
7                                                                           0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x3D,0x35};


                            //    8    9   A    B   
C   D   E   F


 


/********************


函数名称:Delay


函数功能:延时


入口参数:uint t—要延时的毫秒数


返回参数:无


备    注:无


*********************/


void Delay(uint t)


{


       uint
i;


       while(t--)


       {


              for
(i=0;i<125;i++)


              {}


       }


}


//********End of Function************


 


void main()


{


       uchar
i = 0;


       //uchar
j = 0xEF;//左边4位


       uchar
j = 0xFE;      //右边4位


       while(1)


       {


              Bit
= 1;


              P0
= LED;  


              Bit
= 0;


 


              Seg
= 1;


              P0
= j;


              Seg
= 0;


 


              i++;


              if(i
== 4)i = 0;


              /*j
= _crol_(j,1);


              if(j
== 0xFE)j = 0xEF;*/ //左边4位


              j
= _crol_(j,1);


              if(j
== 0xEF)j = 0xFE;   //右边4位


 


              Delay(1);


       }


}
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
13
关闭 站长推荐上一条 /3 下一条