找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4270|回复: 3
收起左侧

单片机汇编语言的点阵显示源码

[复制链接]
ID:301181 发表于 2018-7-13 16:54 | 显示全部楼层 |阅读模式
既有动态显示又有静态显示,没有电原理图,但是很简单,行扫描,上下滚动,单片机型号STC15F2K60S2(打开文件后就可以看到)

单片机源程序如下:
  1.             /*         静态
  2.                 DL    BIT   P1.0;串行输入列信号(数据信号)(低有效)并行输出
  3.             DH    BIT   P1.1;串行输入行信号(行扫描信号)(高有效)并行输出
  4.             STR   BIT   P1.2;RCLK  三态输出锁存器的时钟输入
  5.             CLK   BIT   P1.3;SRCLK        移位寄存器的时钟输入
  6.             FOE   BIT   P1.4;/OE                输出允许控制
  7.             ROWH  EQU   40H;字模信号,高位在前
  8.             ROWL  EQU   41H;
  9.             SELH  EQU   42H;行扫描信号
  10.             SELL  EQU   43H;
  11.             ORG   0000H;
  12.             LJMP  MAIN;
  13.             ORG   0100H
  14. MAIN:  
  15.         MOV   SP,#6FH;
  16.         MOV   R1,#01H;配合字模信号
  17.             MOV   R2,#01H;高字节在后,从01开始
  18.             MOV   R3,#10H;循环16次
  19. LOAD:  
  20.         MOV   DPTR,#DATAH;存储行扫描信号;
  21.         MOV   A,R1;
  22.             MOVC  A,@A+DPTR;
  23.             MOV   SELH,A;存储高字节
  24.             DEC   R1;     指向低字节
  25.             MOV   A,R1;
  26.             MOVC  A,@A+DPTR;
  27.             MOV   SELL,A;  存储低字节
  28.             INC   R1;
  29.             INC   R1;
  30.             INC   R1;指向下一个高字节
  31.             MOV   DPTR,#DATAL;        ;存储字模数据,过程同上
  32.                 MOV            A, R2
  33.                 MOVC    A, @A+DPTR
  34.                 MOV            ROWH, A                               
  35.                 DEC            R2
  36.                 MOV            A, R2
  37.                 MOVC    A, @A+DPTR                       
  38.                 MOV            ROWL, A
  39.                 INC            R2
  40.                 INC            R2
  41.                 INC            R2
  42.                 LCALL        LATCH;运行锁存自程序
  43.                 LCALL        DELAY;延时
  44.                 DJNZ        R3, LOAD;重复执行16次,显示所有行
  45.                 LJMP        MAIN;静态显示
  46. LATCH:
  47.                 CLR                FOE                                ;允许输出
  48.                 CLR                STR                                ;为上升沿将移位寄存器数据锁存入数据寄存器
  49.                 MOV            R4, SELH                                ;        做准备
  50.                 MOV            R5, ROWH                        ;高位行扫描型号和字模信号
  51.                 MOV            R6, #08H                ;高低位分开读,每次读8位       
  52. LATCH1:
  53.                 CLR                CLK                                ;为上升沿读入移位寄存器做准备
  54.                 MOV            A, R4
  55.                 RRC                A                                        ;移出最高位
  56.                 MOV            R4, A
  57.                 MOV            DH, C                        ;由P1.0输出准备进入移位寄存器
  58.                 MOV            A, R5
  59.                 RRC                A
  60.                 MOV            R5, A
  61.                 MOV            DL, C                        ;由P1.1输出准备进入移位寄存器
  62.                 SETB    CLK                                ;CLK上升沿,P1.0和P1.1数据进入移位寄存器
  63.                 DJNZ        R6, LATCH1
  64.                 MOV            R4, SELL
  65.                 MOV          R5, ROWL
  66.                 MOV          R6, #08H
  67. LATCH2:                                                                ;同上
  68.                 CLR                CLK
  69.                 MOV           A, R4
  70.                 RRC                A
  71.                 MOV           R4, A
  72.                 MOV            DH, C
  73.                 MOV          A, R5
  74.                 RRC                A
  75.                 MOV            R5, A
  76.                 MOV            DL, C
  77.                 SETB    CLK
  78.                 DJNZ        R6, LATCH2
  79.                 SETB        STR                                        ;STR上升沿移位寄存器数据所存入数据寄存器
  80.                 RET                                                         ;显示
  81. DELAY:                                                                ;延迟程序
  82.                 MOV            R6, #02H
  83. LOOP1:
  84.                 MOV            R7, #0F8H                ;;估算:1us*2*(1+2*248+2) = 998us ≈ 1ms
  85. LOOP2:
  86.                 DJNZ        R7, LOOP2
  87.                 DJNZ        R6, LOOP1
  88.                 RET
  89. DATAH:                                ;SELECT ROW
  90.         DB        80H, 00H
  91.         DB        40H, 00H
  92.         DB        20H, 00H
  93.         DB        10H, 00H
  94.         DB        08H, 00H
  95.         DB        04H, 00H
  96.         DB        02H, 00H
  97.         DB        01H, 00H
  98.         DB        00H, 80H
  99.         DB        00H, 40H
  100.         DB        00H, 20H
  101.         DB        00H, 10H
  102.         DB        00H, 08H
  103.         DB        00H, 04H
  104.         DB        00H, 02H
  105.         DB        00H, 01H

  106. DATAL:
  107.   /*
  108.    DB; 0B..................,01H;
  109.   DB; 0DDH,6DH,0C1H,6DH,0BFH,6DH,7FH,7DH,00H,01H,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH;;第一个字
  110.    END;
  111.                 */
  112. /*每一列共阴极显示器
  113.   /*每一行七段显示器的笔画
  114.         /*动态显示电路,笔画锁存器控制行信号,位锁存器控制列信号
  115.                                                                                   */
  116.         ;        /*滚动
  117.       DH        BIT                P1.0;
  118.       DL        BIT                P1.1
  119.       STR        BIT                P1.2
  120.       CLK        BIT                P1.3
  121.       FOE        BIT                P1.4
  122.       ROWH        EQU                40H
  123.       ROWL        EQU                41H
  124.       SELH        EQU                42H
  125.       SELL        EQU                43H
  126.       WAIT        EQU                44H                                                ;负责控制滚动速度
  127.                 ORG                0000H
  128.                 LJMP        MAIN
  129.                 ORG                0100H
  130. MAIN:
  131.                 MOV        R0, #01H                                        ;每次重新滚动时初始化
  132. NEXT:
  133.                 MOV        WAIT, #0AH                                ;滚动速度设置,数字越大滚动越慢
  134. ROLL:
  135.                 MOV        A, R0                                        ;变换显示的第一行以完成滚动
  136.                 MOV        R1, #01H                                        ;行扫描信号不变
  137.                 MOV        R2, A
  138.                 MOV        R3, #10H                               
  139. LOAD:
  140.                 MOV        DPTR, #SEL_DATA                ;
  141.                 MOV        A, R1
  142.                 MOVC        A, @A+DPTR
  143.                 MOV        SELH, A                        ;
  144.                 DEC                R1                        ;
  145.                 MOV        A, R1
  146.                 MOVC        A, @A+DPTR
  147.                 MOV        SELL, A                        ;
  148.                 INC                R1                        ;
  149.                 INC                R1
  150.                 INC                R1
  151.                 MOV        DPTR, #ROW_DATA
  152.                 MOV        A, R2
  153.                 MOVC        A, @A+DPTR
  154.                 MOV        ROWH, A
  155.                 DEC                R2
  156.                 MOV        A, R2
  157.                 MOVC        A, @A+DPTR
  158.                 MOV        ROWL, A
  159.                 INC                R2
  160.                 INC                R2
  161.                 INC                R2
  162.                 LCALL        LATCH
  163.                 LCALL        DELAY
  164.                 DJNZ        R3, LOAD
  165.                 ;                                                                        以上与第一部分相同
  166.                 DJNZ        WAIT, ROLL                                        ;循环以延时
  167.                 INC                R0
  168.                 INC                R0                                                        ;R0指向下一行,以实现滚动
  169.                 CJNE                R0, #41H, NEXT                                ;所有字符显示完毕后开始新的一轮        ;根据字符的个数不同而改变
  170.                 ;                                                                        以下与第一部分相同
  171.                 LJMP        MAIN

  172. LATCH:
  173.                 CLR                FOE
  174.                 CLR                STR
  175.                 MOV            R4, SELH
  176.                 MOV          R5, ROWH
  177.                 MOV            R6, #08H
  178. LATCH1:
  179.                 CLR                CLK
  180.                 MOV            A, R4
  181.                 RRC                A
  182.                 MOV          R4, A
  183.                 MOV            DH, C
  184.                 MOV          A, R5
  185.                 RRC                A
  186.                 MOV            R5, A
  187.                 MOV            DL, C
  188.                 SETB        CLK
  189.                 DJNZ        R6, LATCH1
  190.                 ;
  191.                 MOV        R4, SELL
  192.                 MOV        R5, ROWL
  193.                 MOV        R6, #08H
  194. LATCH2:
  195.                 CLR                CLK
  196.                 MOV            A, R4
  197.                 RRC                A
  198.                 MOV            R4, A
  199.                 MOV            DH, C
  200.                 MOV            A, R5
  201.                 RRC                A
  202.                 MOV            R5, A
  203.                 MOV            DL, C
  204.                 SETB        CLK
  205.                 DJNZ        R6, LATCH2;
  206.                 SETB        STR
  207.                 RET               
  208. DELAY:
  209.                 MOV            R6, #02H
  210. LOOP1:
  211.                 MOV            R7, #0F8H
  212. LOOP2:
  213.                 DJNZ        R7, LOOP2
  214.                 DJNZ        R6, LOOP1
  215.                 RET
  216. SEL_DATA:                                ;SELECT ROW
  217.         DB        80H, 00H
  218.         DB        40H, 00H
  219.         DB        20H, 00H
  220.         DB        10H, 00H
  221.         DB        08H, 00H
  222.         DB        04H, 00H
  223.         DB        02H, 00H
  224.         DB        01H, 00H
  225.         DB        00H, 80H
  226.         DB        00H, 40H
  227.         DB        00H, 20H
  228.         DB        00H, 10H
  229.         DB        00H, 08H
  230.         DB        00H, 04H
  231.         DB        00H, 02H
  232.         DB        00H, 01H

  233. ROW_DATA:
  234.      DB; 0B..................,01H;
  235.   DB; 0DDH,6DH,0C1H,6DH,0BFH,6DH,7FH,7DH,00H,01H,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH;;第一个字
  236.   DB; 7FH,0FFH,01H,81H,0BFH,0BDH,0C0H,3DH,0EDH,0BDH,0F5H,81H,0FEH,0EFH,80H,0F7H;
  237.   DB ;0BDH,73H,0BDH,0A8H;...................,73H,80H,0FBH,0FDH,0FFH,0FBH,0FFH;第二个字
  238.    DB ;16个;
  239.   DB ;0DDH,6DH,0C1H,6DH,0BFH,6DH,7FH,7DH,00H,01H,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH;;;第一个字

  240.         END

复制代码

所有资料51hei提供下载:
dianzhen.zip (33.69 KB, 下载次数: 14)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:301181 发表于 2018-7-13 16:55 | 显示全部楼层
在学校课堂上试过,确实可用
回复

使用道具 举报

ID:301181 发表于 2018-7-13 16:56 | 显示全部楼层
动态显示可以是几个字滚动,也可以使一个字,文件中是两个字的滚动显示,具体器件的使用,看单片机型号吧,我忘了
回复

使用道具 举报

ID:635338 发表于 2020-9-21 23:10 | 显示全部楼层
有无原理图?

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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