原创 13.动态数码显示技术三

2007-5-12 23:41 4616 10 10 分类: MCU/ 嵌入式

13.动态数码显示技术三


——LED数码管动态扫描显示“12345”和“HELLO”字样


1.  实验任务<?XML:NAMESPACE PREFIX = O />


如图4.13.1所示,P0端口接动态数码管的字形码笔段,P2端口接动态数码管的数位选择端,P1.7接一个开关,当开关接高电平时,显示“12345”字样;当开关接低电平时,显示“HELLO”字样。


2.  电路原理图


点击看大图


3.  程序设计内容


(1.       动态扫描方法


动态接口采用各数码管循环轮流显示的方法,当循环显示频率较高时,利用人眼的暂留特性,看不出闪烁显示现象,这种显示需要一个接口完成字形码的输出(字形选择),另一接口完成各数码管的轮流点亮(数位选择)。


(2.       在进行数码显示的时候,要对显示单元开辟8个显示缓冲区,每个显示缓冲区装有显示的不同数据即可。


(3.       对于显示的字形码数据我们采用查表方法来完成。


4.  程序框图


点击看大图


5.  汇编源程序


              ORG 00H


START:        JB P1.7,DIR1


               MOV DPTR,#TABLE1


              SJMP DIR


DIR1:         MOV DPTR,#TABLE2


DIR:     MOV R0,#00H


              MOV R1,#01H


NEXT:         MOV A,R0


               MOVC A,@A+DPTR


              MOV P0,A


               MOV A,R1


              MOV P2,A


              LCALL DAY


               INC R0


              RL A


              MOV R1,A


               CJNE R1,#0DFH,NEXT


              SJMP START


DAY:          MOV R6,#4


D1:           MOV R7,#248


               DJNZ R7,$


              DJNZ R6,D1


              RET


TABLE1:       DB 06H,5BH,4FH,66H,6DH


TABLE2:       DB 78H,79H,38H,38H,3FH


              END


6.  C语言源程序


#include <AT89X51.H>


unsigned char code table1[]={0x06,0x5b,0x4f,0x66,0x6d};


unsigned char code table2[]={0x78,0x79,0x38,0x38,0x3f};


unsigned char i;


unsigned char a,b;


unsigned char temp;


void main(void)


{


  while(1)


    {


      temp=0xfe;


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


        {


          if(P1_7==1)


            {


              P0=table1;


            }


            else


              {


                P0=table2;


              }


          P2=temp;


          a=temp<<(i+1);


          b=temp>>(7-i);


          temp=a|b;


     for(a=4;a>0;a--)


          for(b=248;b>0;b--);


        }


    }


}


7. 仿真文件


rar

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
10
关闭 站长推荐上一条 /3 下一条