单片机入门汇编程序 程序12-5:16×32点阵屏的显示程序,显示内容为汉字“南方公园”

时间:2024.4.5

程序12-516×32点阵屏的显示程序,显示内容为汉字“南方公园”(对应图12-15   

    ORG     00H             ; 起始地址00H

    ; 主程序段

START:

    MOV     A, #00H         ; A=00H

    MOV     P0, A           ; 上半个8×32点阵清0

    MOV     P2, A           ; 下半个8×32点阵清0

    ; 扫描程序段

DISPLAY:

    MOV     R0, #2          ; 需要两屏才能显示完4个字,R0为屏数计数器

    MOV     30H, #00H       ; 30H中存储取显示编码的指针

SCAN_SETS:

    MOV     R1, #00H        ; R1为74154的扫描计数器,初始值为00H

    MOV     R2, #0FFH       ; 每屏停留一段时间,通过R2进行延时

DIS_SETS:

    MOV     R3, #32         ; 每个字有32个字节的数据,R3为显示数据计数器

    MOV     R4, 30H         ; 将取显示编码的指针载入R4中

DIS_CHAR:

    CALL    LOAD            ; 调用显示编码的子程序LOAD

    INC     R1              ; 扫描计数器增加1

    DJNZ    R3, DIS_CHAR    ; 如果没有取完1个字的32个字节的数据则继续取

    MOV     R1, #00         ; 如果取完32个字节,扫描计数器清0

    DJNZ    R2, DIS_SETS    ; 每屏显示之后延时一会儿

    MOV     30H, R4         ; 取显示编码的指针存回30H中

    DJNZ    R0, SCAN_SETS   ; 如果不到两屏,说明4个字没有显示完,继续显示

             

    MOV     R5, #200        ; 如果显示完两屏,延时100ms

    CALL    DELAY           ; 调用延时子程序

    JMP     START           ; 循环

   

    ; 取显示编码的子程序段

LOAD:

    MOV     A, R1           ; 扫描计数器载入A

    MOV     P1, A           ; 从P1口输出,以选中某一列

    MOV     A, R4           ; 取显示编码指针载入A

    MOV     DPTR, #TABLE    ; DPTR寄存器指向TABLE表头

    MOVC    A, @A+DPTR      ; 显示编码载入A

    MOV     P0, A           ; 从P0口输出显示编码,显示汉字的一半

    INC     R4              ; 取显示编码指针增加1

    MOV     A, R4           ; 更新的取显示编码指针载入A

    MOVC    A, @A+DPTR      ; 下一个显示编码载入A

    MOV     P2, A           ; 从P2口输出显示编码,显示汉字的一半

    INC     R4              ; 取显示编码指针增加1

    MOV     R5, #30         ; 延时15ms

    CALL    DELAY              

    MOV     A, #00H         ; A=00H

    MOV     P0, A           ; 清屏幕

    MOV     P2, A              

    RET

DELAY:                          ; 延时子程序

    MOV     R6, #248           

    DJNZ    R6, $              

    DJNZ    R5, DELAY      

    RET                        

    TABLE:

    ;**************  “南”字的编码  **************

    DB  20H, 00H, 20H, 00H, 27H, 0FEH, 24H, 20H

    DB  24H, 0A0H, 26H, 0A0H, 02DH, 0A0H, 0F4H, 0FEH

    DB  24H, 0A0H, 25H, 0A0H, 26H, 0A0H, 24H, 0A4H

      DB  24H, 22H, 67H, 0FCH, 20H, 00H, 00H, 00H

    ;**************  “方”字的编码  **************

    DB  10H, 02H, 10H, 02H, 10H, 04H, 10H, 08H

    DB  10H, 30H, 10H, 0C0H, 9FH, 00H, 52H, 00H

    DB  32H, 04H, 12H, 02H, 12H, 02H, 13H, 0FCH

    DB  10H, 00H, 10H, 00H, 10H, 00H, 00H, 00H

    ;**************  “公”字的编码  **************

    DB  00H, 00H, 00H, 80H, 01H, 04H, 02H, 0EH

    DB  0CH, 14H, 70H, 24H, 21H, 0C4H, 00H, 8CH

    DB  00H, 08H, 70H, 08H, 08H, 28H, 06H, 1EH

    DB  03H, 0CH, 01H, 80H, 01H, 00H, 00H, 00H

    ;**************  “园”字的编码  **************

    DB 00H, 00H, 7FH, 0FFH, 40H, 0AH, 42H, 12H

    DB  52H, 22H, 53H, 0C2H, 52H, 02H, 52H, 02H

    DB  53H, 0E2H, 52H, 12H, 56H, 12H, 42H, 72H

    DB  40H, 02H, 7FH, 0FFH, 00H, 00H, 00H, 00H

    END


第二篇:单片机入门汇编程序 程序15-4:太阳跟随系统


  程序15-4:太阳跟随系统(对应图15-40   

LDR1    EQU     P3.0    ; 定义变量LDR1,光线传感器1输入

LDR2    EQU     P3.5    ; 定义变量LDR2,光线传感器2输入

LIM1    EQU     P1.2    ; 定义变量LIM1,限位开关1

LIM2    EQU     P1.3    ; 定义变量LIM2,限位开关2

SW1     EQU     P1.0    ; 定义变量SW1,开始跟随开关

SW2     EQU     P1.1    ; 定义变量SW2,停止跟随开关

ENA     EQU     P2.5    ; 定义变量ENA,X轴电机使能

ENB     EQU     P2.6    ; 定义变量ENB,Y轴电机使能

MX1     EQU     P2.0    ; 定义变量MX1,X轴电机控制端1

MX2     EQU     P2.1    ; 定义变量MX2,X轴电机控制端2

MY1     EQU     P2.2    ; 定义变量MY1,Y轴电机控制端1

MY2     EQU     P2.3    ; 定义变量MY2,Y轴电机控制端2

    MOTT    EQU     00H     ; 定义变量MOTT

    ORG     00H   

MAIN:  

   MOV     P1,#0FH         ; P1低位作输入端

   MOV     MOTT,#01H       ; MOTT=01H

      

MMINS:

    CALL    MOTORR          ; 调MOTORR子程序

    JB      LIM2,MMINS     

    SETB    ENA             ; 两个电机停止

    SETB    ENB

    CLR     MX1

    CLR     MX2

    CLR     MY1

    CLR     MY2

   

SETB    SW1             ; 等待开始跟随开关被按下

   JB      SW1,$

   NOP

   JNB     SW1,$

       

MMAIN:

SETB    LDR1

   SETB    LDR2

   SETB    LIM1

   SETB    LIM2

   JB      LDR1,SD1        ; 如果光线传感器1为暗,则跳到SD1

   JB      LDR2,SD2        ; 如果光线传感器2为暗,则跳到SD2

   JNB     LIM1,MMAINS    

   JNB     SW2,STOP        ; 判断停止跟随按钮

   JB      LIM2,MMAIN

   SETB    ENA             ; 两个电机停止

    SETB    ENB

    CLR     MX1

    CLR     MX2

    CLR     MY1

    CLR     MY2

   JMP     START_TRACKING

  

STOP:

    CALL    MOTORR

    JB      LIM2,STOP

    JNB     SW2,$

    JMP     MAIN            ; 循环

      

SD1:   

JB      LDR2,SD3        ; 如果光线传感器2为暗,跳到SD3

SD4:   

    JB      LDR1,SD4        ; 旋转直到光线传感器1为亮

    JB      LDR2,SD2        ; 旋转直到光线传感器2为亮

JMP         START_TRACKING

SD2:   

CALL    MOTORL         

    JNB     LIM1,MMAINS

    JB      LDR2,SD2

    JB      LDR1,SD1

    JMP     START_TRACKING

   

SD3:   

SETB    LIM1           

    SETB    LIM2

    JNB     LIM1,MMAINS

    JNB     LDR1,MMAIN

    JNB     LDR2,MMAIN

    JMP     SD3

   

MMAINS:

    CALL    MOTORR

    JB      LIM2,MMAINS

SNM:   

    CALL    DELAY

    JNB     LDR1,SNM

    CALL    DELAY

    JB      LDR2,SNM

    JMP     MMAIN

   

MOTORL:

    MOV     A,MOTT

    CJNE    A,#01H,XC1

    MOV     MOTT,#04H

    CALL    MOTOR_ROTATE

    CALL    DELAY

    RET

XC1:   

DEC         MOTT

    CALL    MOTOR_ROTATE

    CALL    DELAY

    RET

MOTORR:

    MOV     A,MOTT

    CJNE    A,#04H,XC2

    MOV     MOTT,#01H

    CALL    MOTOR_ROTATE

    CALL    DELAY

    RET

XC2:   

INC         MOTT

    CALL    MOTOR_ROTATE

    CALL    DELAY

    RET

           

START_TRACKING:

    JMP     MMAIN

MOTOR_ROTATE:                   ; X轴和Y轴电机组合运动

    MOV     A,MOTT

    CJNE    A,#01H,GB1

    SETB    ENA             ; X轴和Y轴电机正转

    SETB    ENB

    SETB    MX1

    CLR     MX2

    SETB    MY1

    CLR     MY2

    RET

GB1:   

CJNE    A,#02H,GB2

    SETB    ENA             ; X轴电机正转Y轴电机反转

    SETB    ENB

    SETB    MX1

    CLR     MX2

    CLR     MY1

    SETB    MY2

    RET

GB2:   

CJNE    A,#03H,GB3

    SETB    ENA             ; X轴电机反转Y轴电机正转 

    SETB    ENB

    CLR     MX1

    SETB    MX2

    SETB    MY1

    CLR     MY2

    RET

GB3:   

CJNE    A,#04H,GB4     

    SETB    ENA             ; X轴和Y轴电机反转 

    SETB    ENB

    CLR     MX1

    SETB    MX2

    CLR     MY1

    SETB    MY2

GB4:   

RET

DELAY:

    MOV     R0,#45H        

REP2:  

MOV R1,#99H    

REP1:  

NOP

    DJNZ R1,REP1

    DJNZ R0,REP2

    RET 

   END

更多相关推荐:
基于51单片机课程设计报告

课题:基于51单片机的数字温度计设计专业:电气工程及其自动化班级:4学号:***设计日期:20XX/6/3成绩:重庆大学城市科技学院电气学院基于51单片机数字温度计设计报告一、设计目的作用本设计是一款简单实用的…

51单片机课程设计实验报告

51单片机课程设计报告学院:专业班级:姓名:指导教师:设计时间:51单片机课程设计一、设计任务与要求1.任务:制作并调试51单片机学习板2.要求:(1)了解并能识别学习板上的各种元器件,会读元器件标示;(2)会…

51单片机电子时钟课程设计报告

JINGCHUUNIVERSITYOFTECHNOLOGY单片机原理及应用课程设计报告题目电子时钟专业电气工程及其自动化班级20xx级电工2班学号20xx401020xx2姓名王贞指导教师邹云峰提交日期20xx...

51单片机课程设计报告

重庆科技学院学生实习实训总结报告学院电气与信息工程学院专业班级XXXXXX学生姓名XXX学号20xxXXXXXX实习实训地点逸夫科技楼I512报告题目单片机万年历系统设报告报告日期20xx年9月13日指导教师评...

51单片机课程设计报告。

成绩单片机原理及应用课程设计课程名ltlt单片机原理及应用gtgt学部专业学号姓名指导教师日期20xx年06月一设计任务与要求1任务制作并调试51单片机学习板2要求1了解并能识别学习板上的各种元器件会读元器件标...

51单片机课程设计实例

51单片机实做课课程设计报告51单片机设计实例二总原理图及元器件清单21总原理图151单片机实做课课程设计报告22显示部分23声音部分251单片机实做课课程设计报告24按键部分25继电器351单片机实做课课程设...

51单片机万年历课程设计报告

一设计任务1设计任务设计并制作一个数字钟2设计要求显示年月日时分秒及星期信息具有可调整日期和时间功能增加闰年计算功能显示部分由LCD1602完成二方案论证1显示部分显示部分是本次设计的重要部分一般有以下两种方案...

单片机课程设计报告1

单片机原理与接口技术课程设计报告设计题目基于80C51单片机系统实验板的制作与程序设计专业班级姓名指导教师20xx年6月目录第1节引言页码第2节系统主要硬件电路设计页码第3节系统软件设计页码第4节结束语页码参考...

单片机课程设计报告模板

单片机与嵌入式系统作品设计报告题目十六路数字抢答器11微电子班作者郝星元20xx08071027马孝宇20xx08071017沈文理20xx08071049完成日期20xx年12月20日1目录1设计任务311设...

单片机课程设计报告

单片机课程设计报告简易频率计设计学院地信院班级生医1201班姓名刘柏林学号0402120xx6目录摘要第一章频率计设计概述第二章AT89C51单片机及其引脚说明第三章分频电路第四章显示电路第五章系统整体原理图第...

60秒倒计时器-单片机课程设计报告

机电工程学院课程设计报告书题目制作60秒倒计时器专业机电一体化班级机电10307学号10023582学生姓名张洋指导教师黎老师20xx年12月12一设计要求由单片机接收小键盘阵列设定倒计时时间倒计时的范围最大为...

单片机课程设计_定时器控制4只LED滚动闪烁_报告正文

目录1设计目的111设计目的112设计内容和要求113设计思路12软硬件开发平台221ALTIUMDESINGER硬件电路开发平台222KEILUVISION2程序开发平台323PROTEUS仿真软件33设计原...

51单片机课程设计报告(36篇)