这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 物联网技术 » LED数码管动态驱动

共2条 1/1 1 跳转至

LED数码管动态驱动

助工
2008-05-16 16:33:50     打赏

现在让我们用实验板上的两个数码管来做一个循环显示00~99数字的实验,先来完成必要的硬件部分,

数码管有共阴和共阳的区分,单片机都可以进行驱动,但是驱动的方法却不同,并且相应的0~9的显示代码也正好相反。

首先我们来介绍两位共阳数码管的单片机驱动方法,电路如下图:

 

720){this.width=720;this.height=720/tempx*tempy}">

 

720){this.width=720;this.height=720/tempx*tempy}">

网友可以看到:P2.6和P2.7端口分别控制数码管的十位和个位的供电,当相应的端口变成低电平时,驱动相应的三极管会导通,+5V通过IN4148二极管和驱动三极管给数码管相应的位供电,这时只要P0口送出数字的显示代码,数码管就能正常显示数字。

因为要显示两位不同的数字,所以必须用动态扫描的方法来实现,就是先个位显示1毫秒,再十位显示1毫秒,不断循环,这样只要扫描时间小于1/50秒,就会因为人眼的视觉残留效应,看到两位不同的数字稳定显示。

下面我们再介绍一种共阴数码管的单片机驱动方法,电路如下图:

 

720){this.width=720;this.height=720/tempx*tempy}">

网友可以看到:+5V通过1K的排阻直接给数码管的8个段位供电,P2.6和P2.7端口分别控制数码管的十位和个位的供电,当相应的端口变成低电平时,相应的位可以吸入电流。单片机的P0口输出的数据相当于将数码管不要显示的数字段对地短路,这样数码管就会显示需要的数字。

网友可以看到,共阴数码管的硬件更简单,所以在批量生产时,硬件开销小,节省PCB面积,减少焊接工作量,降低综合成本,所以采用共阴数码管更有利于批量生产,现在销售的试验板都是采用共阴数码管了。

以下是用AT89C51实验板的两位数码管显示00~99依次循环的汇编语言程序

 

 

        A_BIT EQU 20H       ;数码管个位数存放内存位置

        B_BIT EQU 21H       ;数码管十位数存放内存位置

        TEMP EQU 22H        ;计数器数值存放内存位置

        

STAR:   MOV TEMP,#0         ;初始化计数器,从0开始

STLOP:  ACALL DISPLAY       ;调用显示子程序

        INC TEMP            ;对计数器加1

        MOV A,TEMP

        CJNE A,#100,NEXT    ;判断计数器是否满100?

        MOV TEMP,#0         ;满100就清零重新开始

NEXT:   LJMP STLOP          ;不满就循环执行

        

        ;显示子程序

DISPLAY:MOV A,TEMP          ;将TEMP中的十六进制数转换成10进制

        MOV B,#10           ;10进制/10=10进制

        DIV AB

        MOV B_BIT,A         ;十位在A

        MOV A_BIT,B         ;个位在B

        

        MOV DPTR,#NUMTAB    ;指定查表启始地址

        MOV R0,#4

DPL1:   MOV R1,#250         ;

DPLOP:  MOV A,A_BIT         ;取个位数

        MOVC A,@A+DPTR      ;查个位数的7段代码

        MOV P0,A            ;送出个位的7段代码

        CLR P2.7            ;开个位显示

        ACALL D1MS          ;显示162微秒

        SETB P2.7           ;关闭个位显示,防止鬼影

        MOV A,B_BIT         ;取十位数

        MOVC A,@A+DPTR      ;查十位数的7段代码

        MOV P0,A            ;送出十位的7段代码

        CLR P2.6            ;开十位显示

        ACALL D1MS          ;显示162微秒

        SETB P2.6           ;关闭十位显示,防止鬼影

        DJNZ R1,DPLOP       ;循环执行250次

        DJNZ R0,DPL1        ;循环执行250X4=1000次

        RET

        

        ;2+2X80=162微秒,延时按12MHZ计算

D1MS:   MOV R7,#80

        DJNZ R7,$

        RET

        

        ;实验板上的7段数码管0~9数字的共阴显示代码

NUMTAB: DB 0CFH,03H,5DH,5BH,93H,0DAH,0DEH,43H,0DFH,0DBH

        

        END

        

        ;如果是共阳数码管的显示代码

NUMTAB: DB 30H,0FCH,0A2H,0A4H,06CH,25H,21H,0BCH,20H,24H




关键词: 数码     动态     驱动     显示    

工程师
2008-05-16 20:36:08     打赏
2楼
学习了。路过

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]