LED点阵字符显示程序
作者:vodsky 日期:5.9 2006 / 0:20

  偶的第一个应用级别汇编程序,通过8051控制LED点阵显示汉字跑动,当在硬件电路上用MEDWIN仿真----

      RUN--西西~~~~那家伙,撒叫成就感,呵呵~~~~~~~~~~~~~~~~~~! (有点自恋哈--)

源程序:


      ORG 0000H
      LJMP START
      ORG 000BH
      AJMP RUNO

      ORG 0040H
RUNO: PUSH PSW            ;
      CLR EA              ;关总中断
      CJNE R1,#00H,RESERVE;中断控制字符是否跑动,R1=0不跑,R1=1跑
      MOV R1,#01H         ;
      AJMP EXITO          ;
RESERVE:MOV R1,#00H       ;
EXITO:MOV R4,#25          ;软件延时1ms
 DEL3:MOV R5,#20          ;
 DEL4:DJNZ R5,DEL4        ;
      DJNZ R4,DEL3        ;
      POP PSW             ;
      SETB EA             ;开总中断
      RETI                ;

DELAY:PUSH PSW            ;
      MOV R4,#25          ;软件延时1ms
 DEL1:MOV R5,#20          ;
 DEL2:DJNZ R5,DEL2        ;
      DJNZ R4,DEL1        ;
      POP PSW             ;
      RET                 ;

      ORG 0100H
START:SETB IT0            ; 外部中断0脉冲触发方式
      MOV IE,#81H         ; 开中断
ALLSTART: MOV DPTR,#BUF   ;字符缓冲区首地址
          MOV B,#00H      ;B用作字符指针
          MOV R0,#00H     ;R0列扫描信号
          MOV R7,#00H     ;R7作结束标志
          MOV R1,#00H     ;R1判断是否跑
          MOV R2,#00H     ;R2计面扫描次数

AGAIN0:   MOV R3,B        ;R3记录面扫描首地址

AGAIN:    SETB P1.7       ;锁译码器
          MOV A,B         ;送P0
          MOVC A,@A+DPTR  ;
          MOV P0,A        ;
          INC B           ;
          MOV A,B         ;送P2
          MOVC A,@A+DPTR  ;
          MOV P2,A        ;
          SETB P1.5       ;开锁存
          CLR P1.5        ;锁存端口0和2

          MOV A,B         ;
          ADD A,#1FH      ;
          MOV B,A         ;
          MOVC A,@A+DPTR  ;

          CJNE A,#80H,NOVER1  ;判断是否到末尾
          MOV P0,#00H         ;若已到末尾则送0000H且置结束标志
          MOV P2,#00H         ;
          MOV R7,#0FFH        ;
          LJMP SCAN           ;

NOVER1:   MOV P0,A            ;送P0
          INC B               ;
          MOV A,B             ;
          MOVC A,@A+DPTR      ;
          MOV P2,A            ;送P2

SCAN:     MOV P1,R0           ;送列扫描信号
          CLR P1.7            ;选通译码器
          LCALL DELAY         ;调延时子程序(每列亮持续时间)
          SETB P1.7           ;锁译码器
          INC R0              ;R0自加


JUDGE:    CJNE R7,#00H,ALLSTART ;若R7不等于00H则结束,一次跑动完成
          CJNE R0,#10H,NOVER2   ;判断一面是否扫描完
          MOV R0,#00H           ;若一面扫描完成则R0计数清零

          CJNE R1,#01H,NOVER4   ;判断字符是否跑动
          CJNE R2,#05H,NOVER3   ;判断面扫描次数
          MOV R2,#00H           ;若面扫描次数达到则R2清零且B向后移重新扫描形成跑动
          MOV A,B               ;
          CLR CY                ;
          SUBB A,#3DH           ;
          MOV B,A               ;
          LJMP AGAIN0           ;

NOVER2:   MOV A,B      ;若一面未扫完,则继续扫描
          CLR CY       ;
          SUBB A,#1FH  ;
          MOV B,A      ;
          LJMP AGAIN   ;

NOVER3:   INC R2       ;R2自加
NOVER4:   MOV B,R3     ;若面扫描次数未到,则送B面首地址且R2自加
          LJMP AGAIN   ;

; 存放字符十六进制数据
BUF: DB 00H,00H,00H,00H,1FH,0F0H,12H,20H,12H,20H,12H,20H,12H,20H,0FFH,0FCH;
     DB 12H,22H,12H,22H,12H,22H,12H,22H,1FH,0F2H,00H,02H,00H,0EH,00H,00H  ;"电"

     DB 00H,80H,00H,80H,40H,80H,40H,80H,40H,80H,40H,82H,40H,81H,47H,0FEH  ;
     DB 48H,80H,50H,80H,60H,80H,40H,80H,00H,80H,01H,80H,00H,80H,00H,00H   ;"子"

     DB 02H,00H,82H,00H,73H,0FEH,20H,04H,00H,09H,01H,01H,02H,02H,7DH,0C2H ;
     DB 41H,34H,41H,08H,41H,08H,7DH,34H,03H,0C2H,02H,03H,02H,02H,00H,00H  ;"设"

     DB 04H,00H,84H,00H,74H,00H,27H,0FEH,00H,04H,00H,08H,04H,10H,04H,00H  ;
     DB 04H,00H,04H,00H,0FFH,0FFH,04H,00H,04H,00H,04H,00H,04H,00H,00H,00H ;"计"

     DB 00H,02H,00H,04H,00H,08H,00H,10H,00H,60H,0C1H,80H,6EH,00H,18H,00H  ;
     DB 06H,00H,01H,00H,00H,0C0H,00H,20H,00H,18H,00H,0CH,00H,08H,00H,00H  ;"入"

     DB 00H,00H,00H,00H,1FH,0FFH,00H,00H,0E0H,00H,00H,00H,40H,00H,40H,00H ;
     DB 40H,00H,40H,00H,40H,00H,40H,02H,40H,01H,7FH,0FEH,00H,00H,00H,00H  ;"门"

     DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H   ;
     DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,80H,00H   ;

END


Re:LED点阵字符显示程序
作者:gaogaofox(访客)[ Guest ] 日期:4.25 2007 / 10:51
你好,请问你是否有LED显示0-9数字的程序.可否给我一个,我在做毕业设计,很着急!谢谢!我的邮箱:gaogaofox@yahoo.com.cn;QQ:120736080
vodsky reply: gaogaofox,你好!你说的LED显示0-9数字的设计应该是用7段数码管显示吧(用点阵就铺张了),这个以前偶做过(就是实验室的最小系统板),很遗憾,程序早丢了,再说有的话没有硬件电路也不一定能RUN列,建议你还是好好看一下有关单片机书的键盘与显示的部分,直接驱动也好用ZLG7290也行,自己多下点工夫,毕竟是毕业设计嘛,HOHO~~~
个人主页Personal page | 返回Top | 删除Delete | 回复Reply
Re:LED点阵字符显示程序
作者:在做LED点阵(访客)[ Guest ] 日期:1.9 2007 / 15:58
好,谢谢!硬件图可否展示一下?
vodsky reply:

没想到这么多人做这个东东啊~~~不好意思,当时硬件电路只在纸上画了一下,没用PROTEL(觉得有点麻烦),但大概原理还记得,所以画了一个示意图,希望对过路的朋友有所帮助了

汇编程序做如下说明:首先PO口送出字符的某列信号,送两次(每列16个点),每次送出后锁存,然后由译码器选择列信号所对应的列,延时~~~~,则某列就会选通。关译码器,开锁存,送下列信号,锁存,译码,延时,依次重复下一列,16列~~~~则动态的扫描某个字符一遍了。至于如何跑动,大家表达自己的思想就行了                                

最后,偶得指明:此电路与实用电路还是有差距的,字符在跑动时效果不是很好,感觉有些闪,在程序上作了一些努力也没能达到公交车上电子广告牌的效果,后来在网上查了一下相关的设计,自己的硬件电路设计的还是很勉强,所以还希望有做相关设计的朋友多多指教~~~~

 

个人主页Personal page | 返回Top | 删除Delete | 回复Reply

有网站吗?通过GOOGLE ADSENSE开始赚取你的第一笔网络财富!

发表评论Post Comment:

  • 昵称Nick name
  • 密码Password
  • 主页HomePage
  • BlogCup数据读取中,请稍候 [ Loading data,,,]

powered by blogcup.com登入BLOGCUPOblog Inside!