找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 16080|回复: 16
收起左侧

求助:关于最基本的LED的控制

[复制链接]
ID:12437 发表于 2009-5-13 23:44 | 显示全部楼层 |阅读模式
前天在这里买的160元的板子,教程都是C的,我用汇编的,请教高手们一问题:
下面这段程序可以只使8个LED闪烁,但是只要我改动第5行的#00H为其它值,数码管对应的段也会闪起来?如:改为#0FEH时第一个LED闪,但数码管第一个数也闪,是8子没有上面一横。
(这款板的LED共正极端通过了一个晶体管控制基极为低时导通,基极通到了P14,所以有第四句。)
         ORG 0000H
         AJMP MAIN
         ORG 030H
MAIN:MOV P1,#0EFH 
        MOV P0,#00H
        ACALL DEL
        MOV P0,#0FFH
        ACALL DEL
        AJMP MAIN
DEL: MOV R5,#04H
DEL1: MOV R6,#0FFH
DEL2: MOV R7,#0FFH
DEL3: DJNZ R7, DEL3
         DJNZ R6, DEL2
         DJNZ R5, DEL1
         RET
         END
请高手帮忙看看,谢谢。
[此贴子已经被作者于2009-5-14 8:39:04编辑过]
回复

使用道具 举报

ID:12437 发表于 2009-5-14 08:37 | 显示全部楼层

我顶起,那么多高手去那里了?

回复

使用道具 举报

ID:12826 发表于 2009-5-14 15:33 | 显示全部楼层

应该有个跳线帽,给去了。。。

回复

使用道具 举报

ID:12437 发表于 2009-5-14 20:25 | 显示全部楼层

收到货才几天,我没有去掉过跳线帽啊。

回复

使用道具 举报

ID:12793 发表于 2009-5-14 22:40 | 显示全部楼层

我也是初学者,不过我看你这个延时是不是短了?

回复

使用道具 举报

ID:6481 发表于 2009-5-15 00:05 | 显示全部楼层
开发板的8个数码管为2*4 位共阴数码管,它的位选端和段选端都连接在MCU 的P0 端,
再通过74HC573 锁存器直接控制驱动显示
 建议你去看下 附带的资料 里面的
STC51-02A开发板资料-总括和说明.pdf
里面的电路图很清楚
  数码管的段选和位选都是接在P0上的
刚开始程序
       MOV P0,#00H
        ACALL DEL
        MOV P0,#0FFH
那么直接是给P0全0然后全1 不影响74HC573的 数据锁存
后面 改第5条语句
MOV P0,#0FEH
即 MOV P0,11111110B
P0。1为0 对应 选中从左到右第一个数码管  
再改一下程序
MOV P0,#0FH 高4位为0 选中从左到右后4个数码管 同时 段码也只显示A,B,C,D 4位 
P0是数码管和LED 复用的 改变P0的值对这2个都会有影响
  板子买回来 看下电路图 再找找上面用的 芯片的PDF 
    找找示例程序 书上的 网上的 (对应的接口定义需要改一下 比如有的板子用MAX7219 有的用其他的来驱动数码管 )开工吧     
  
 
回复

使用道具 举报

ID:12437 发表于 2009-5-15 13:51 | 显示全部楼层
昨天下午看了原理图搞定了,把P21置低数码管就不亮了。楼上的回复的比较晚,不过比较详细,多谢。
但是两片74HC573的控制端分别是接在P01和P02上,但只要P01为低时,数码管都不亮,但是P01为高时,P02对数码管没影响?请指点。
另外光盘里的KEIL不能使用,重装了两台电脑都不行,后来网上下就解决了,里面的教程都是C的,这些对一个刚入门的来说的确是困难重重啊。

感谢各位关注。
[此贴子已经被作者于2009-5-15 13:52:39编辑过]
回复

使用道具 举报

ID:6481 发表于 2009-5-15 15:17 | 显示全部楼层

既然涉及到数码管部分来了
我把数码管的原理和程序贴出来
希望能更好的帮助你理解
在 《STC51-02A开发板资料-总括和说明.pdf
里很清楚的看到了
P2。0接的是段码控制端
P2。1是位码
74HC573驱动模块和其他数码管驱动又是不同的方式
比如MAX7219 或者74HC245等
 它的主要思路是 要要显示的数据 比如20H-27H单元中的数据
先取20H中的数 查段码表(这个最基本的查表应该没问题了 )
 numtab: db 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H,39H
我们来看段码表
   第一个数 3FH 就是00111111 对应ABCDEFG DP 就是ABCDEF 亮 G 和DP 不亮
那么这就是显示数字0
 第二个数    06H 就是00000110  就是 BC 亮 其他不亮  就是显示数字1
 后面以此类推。。。。。
紧接着  我们要让20H 的值显示到第一个数码管 那么再用
P2。1来选择位码位
实现方法是 先做了一张表
tab: db 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH
    我们看第一个0FEH 就是11111110 就是第一个数码管 
    第二个数      0FDH,就是11111101  就是选中第二个数码管 
    以此类推 。。。。。
 
说一下74HC573 的原理PDF上也有  
 OE:output_enable,输出使能;  第 1脚
LE:latch_enable,数据锁存使能,latch是锁存的意思;  第11脚
Dn:第n路输入数据;  2-9 脚
On:第n路输出数据;   19-12脚
我们看这个板子的电路图
2个573片子的 第1脚都是直接接地的 也就是说输出使能一直是打开的
那么我们要控制的就是 LE脚  也就是接在单片机上的 P2。0 和P2。1
来控制数据的锁存
在实际应用的时候是这样做的:
a. OE=0; (573的第1脚直接接地) 
b. 先将数据从单片机的口线上输出到Dn; (从P0送数据)
c. 再将LE从0->1->0 (下降沿锁存)
d. 这时,你所需要输出的数据就锁存在On上了,输入的数据在变化也影响不到输出的数据了

好了  说了这么多文字性的 下面是实验板源程序 编译通过 直接运行
 

;-----------------------------
;单片机内存分配申明!
DUAN        BIT P2.0 
WEI         BIT P2.1
led         bit p1.4
GE_BIT      EQU 30H
SHI_BIT     EQU 31H
XCQ_DATA    EQU  40H ;显存区

;---------------------------
       ORG 0000H
       ljmp main
       org 0020H
;--------------------------------
main:  
       MOV R0,#XCQ_DATA
   MOV a,#20
   mov @r0,a
  
   acall chuli
   acall display
   ajmp main

         
;---------------------
;数据处理子程序
;------------------- 
CHULI:
       mov a,XCQ_DATA
       MOV B,#10
       DIV AB
       MOV GE_BIT,b;个 位存入30H中
       MOV B,#10
       DIV AB
       MOV SHI_BIT,b ;十位存入31H中
       RET
;--------------------------
;数码管显示子程序
;-------------------------
DISPLAY:
       mov r0,#4
dpl1:  mov r1,#250 ;
dplop:

       MOV DPTR ,#NUMTAB
       clr DUAN        
       mov a,SHI_BIT ;取十位数
       MOVC A,@A+DPTR ;查十位数的7段代码
       mov p0,A ;送出十位的7段代码
       SETB DUAN  ;打开锁存 给它一个下降沿
       clr DUAN       ; 这里就是上面的第三步c. 再将LE从0->1->0 (下降沿锁存)
       CLR WEI
       MOV P0,#0DFH
       SETB WEI
       CLR WEI
       lcall DELAY ;

       MOV DPTR ,#NUMTAB
       CLR DUAN
       mov a,GE_BIT ;取个位数
       MOVC A,@A+DPTR ;查个位数的7段代码
       mov p0,A ;送出个位的7段代码
       SETB  DUAN ;   打开锁存 给它一个下降沿
       CLR DUAN
       CLR WEI
       MOV P0,#0BFH
       SETB WEI
       CLR WEI
       lcall DELAY 

       MOV DPTR ,#NUMTAB
       CLR DUAN
       mov a,#11 ;显示C
       MOVC A,@A+DPTR ;
       mov p0,a ;
       SETB DUAN
       clr DUAN ;
       CLR WEI
       MOV P0,#07FH
       SETB WEI
       CLR WEI
       lcall DELAY

       CLR DUAN
       MOV P0,#00H
       SETB DUAN
       CLR DUAN
       lcall DELAY ;
       djnz r1,dplop ;
       djnz r0,dpl1 ;
       ret
;-------------------
;延时程序
;--------------------
DELAY:
       MOV R7,#250
       DJNZ R7,$
       RET
;------------------------------------------------
;实验板上的7段数码管0~9数字的共Y显示代码
;-----------------------------
numtab: db 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H,39H
tab: db 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH
;0 1 2 3 4 5 6 7
       END





 

回复

使用道具 举报

ID:12437 发表于 2009-5-16 14:53 | 显示全部楼层
多谢耗子。
回复

使用道具 举报

ID:6481 发表于 2009-5-19 10:54 | 显示全部楼层

我应该的   加油!

回复

使用道具 举报

ID:1905 发表于 2010-1-22 05:01 | 显示全部楼层
好帖啊,让我学到了不少东西,
回复

使用道具 举报

ID:26266 发表于 2010-10-7 10:21 | 显示全部楼层
不错!!学习中。。。
回复

使用道具 举报

ID:29055 发表于 2011-5-24 02:45 | 显示全部楼层
这个帖子让我学到了 很多东西.
回复

使用道具 举报

ID:31196 发表于 2011-9-21 14:35 | 显示全部楼层
,学到了很多,必须一顶
回复

使用道具 举报

ID:32997 发表于 2011-11-2 18:28 | 显示全部楼层

 

回复

使用道具 举报

ID:51335 发表于 2013-6-28 22:11 | 显示全部楼层
{:soso_e179:}
回复

使用道具 举报

ID:56665 发表于 2013-12-17 10:24 | 显示全部楼层
单片机c程序适合新手学习。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表