目录
1课程设计目的及题目分析............................................2 1.1设计题目........................................................2 1.2设计要求........................................................2 1.3课题分析........................................................2 2 51系列单片机......................................................3 2.1 51单片机简介....................................................3 2.2管脚说明.......................................................3 2.3振荡器特性.....................................................5 2.4芯片擦除........................................................5 3实现原理..........................................................6 3.1点阵LCD的显示原理...............................................7 3.2原理图..........................................................7 3.3指令表..........................................................7 3.4引脚特性........................................................9 3.5 LCD接线图.......................................................9 3.6取模...........................................................10 4程序流程图.......................................................11 5主要源程序及注释.................................................12 6程序调试及结果分析...............................................21 6.1调试过程.......................................................21 6.2调试过程出现的问题以及解决方法.................................21 6.3结论...........................................................21 7心得体会.........................................................22 8参考文献.........................................................23 9附录.............................................................24
1
1课程设计的目的及课题分析
1.1设计题目
1液晶显示(汇编语言)
1.2设计要求
1用指定的字模软件实现。
2能实现中文、英文、数字显示。
1.3课题分析
本实验仪采用的液晶显示屏内置控制器为SED1520,点阵为122x32,需要两片SED1520组成,由E1、E2分别选通,以控制显示屏左右两边的屏。图形液晶显示模块有两种连接方式。一种为直接访问方式,一种为间接控制方式。本实验仪采用直接访问方式。
直接控制方式就是将液晶显示模块的接口作为存储器或I/O设备直接挂在计算机总线上。计算机通过地址译码控制E1、E2选通;读/写操作信号R/W由地址线A1控制;数据/命令存储器选择信号A0由地址线A0控制。实验电路图如下图所示。
地址映射如下(地址中的X由LCD CS决定,可参见地址译码部分说明) 0X00H 0X01H 0X02H 0X03H 0X04H 0X05H 0X06H 0X07H 写E1 写E1数读E1状读E1数写E2指写E2数读E2状读E2数指令 据 态 据 令 据 态 据 间接控制方式是计算机通过自身的或系统的并行接口与液晶显示模块连接,如8031的P1口和P3口,8255的并行接口芯片。计算机通过对该并行接口输出状态的编程操作,完成对液晶显示模块所需时序的操作和数据的传输。这种间接控制方式的电路简单,控制时序通过编程来实现。
2
2 51系列单片机
2.1 51单片机简介
ATC51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。
图1 51系列单片机
主要特性: 与MCS-51 兼容
4K字节可编程闪烁存储器 寿命:1000写/擦循环 数据保留时间:10年 全静态工作:0Hz-24Hz 三级程序存储器锁定 128*8位内部RAM 32可编程I/O线
两个16位定时器/计数器 5个中断源
可编程串行通道
低功耗的闲置和掉电模式 片内振荡器和时钟电路
2.2管脚说明
VCC:供电电压。
GND:接地。
P0 口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
3
P1 口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 P3口也可作为ATC51的一些特殊功能口,如下表所示: 口管脚 备选功能
P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断0) P3.3 /INT1(外部中断1) P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入)
P3.6 /WR(外部数据存储器写选通) P3.7 /RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个 ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
4
/EA /VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。
2.3振荡器特性
XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。
2.4芯片擦除
整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms 来完成。在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。
此外,ATC51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU停止工作。但RAM,定时器,计数器,串口和中断系统仍在工作。在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。
5
3实现原理
3.1点阵LCD的显示原理
在数字电路中,所有的数据都是以0和1保存的,对LCD控制器进行不同的数据操作,可以得到不同的结果。对于显示英文操作,由于英文字母种类很少,只需要8位即可。而对于中文,常用却有6000以上,于是我们的DOS前辈想了一个办法,就是将ASCII表的高128个很少用到的数值以两个为一组来表示汉字,即汉字的内码。而剩下的低128位则留给英文字符使用,即英文的内码。 字模虽然也是一组数字,但它的意义却与数字的意义有了根本的变化,它是用数字的各位信息来记载英文或汉字的形状,如数字的'0'在字模的记载方式如图1所示:
0 0 1 1 1 0 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0x38 0x44 0x44 0x44 0x44 0x44 0x38 0x00
图2 “0”字模图
而中文的“你”在字模中的记载却如图2所示:
图3“你” 字模
6
3.2原理图
3.3指令表
7
8
3.4引脚特性
3.5 LCD接线图
9
3.6取模
在编写软件代码之前必须要先掌握汉字取模的方法。要得到上表中的文字,我们可以借助取模软件来完成。目前点阵LCD的取模软件有很多,我们以本开发板配套的取模软件为例来介绍一下汉字的取模方法。打开取模软件出现如下显示界面:
如输入“王”字如下所示
10
4程序流程图
11
5 主要的源程序及注释
PD1 EQU 60 ; ;模块参数 COLUMN EQU 30H PAGE1 EQU 31H ;;页地址寄存器 CODE1 EQU 32H ;;字符代码寄存器 COUNT EQU 33H ;;计数器
COM EQU 20H ;;指令寄存器 DAT EQU 21H ;;数据寄存器 CWADD1 EQU 0fa00H ;;写指令代码地址(E1) CRADD1 EQU 0fa80H ;;读状态字地址(E1) DWADD1 EQU 0fa40H ;;写显示数据地址(E1) DRADD1 EQU 0fac0H ;;读显示数据地址(E1) CWADD2 EQU 0f800H ;;写指令代码地址(E2) CRADD2 EQU 0f880H ;;读状态字地址(E2) DWADD2 EQU 0f840H ;;写显示数据地址(E2) DRADD2 EQU 0f8c0H ;;读显示数据地址(E2) ORG 0000H MOV SP,#60H LCALL INT ;;调用初始化子程序 LCALL CLEAR ;;调用清屏子程序 MOV PD1,#3DH ;;
MOV PAGE1,#02H ;;页地址寄存器置初值 MOV COLUMN,#0H ;;列地址寄存器置初值 MOV CODE1,#00H ;;字符代码寄存器置初值 LCALL CCW_PR ;;显示“电” MOV PAGE1,#02H MOV COLUMN,#0fH MOV CODE1,#01H
LCALL CCW_PR ;;显示“气” MOV PAGE1,#02H MOV COLUMN,#1eH MOV CODE1,#02H
LCALL CCW_PR ;;显示“专” MOV PAGE1,#2H MOV COLUMN,#2dH MOV CODE1,#03H
LCALL CCW_PR ;;显示“10” MOV PAGE1,#2H MOV COLUMN,#61 MOV CODE1,#04H
LCALL CCW_PR ;;显示“02”
12
MOV PAGE1,#2H MOV COLUMN,#76 MOV CODE1,#05H
LCALL CCW_PR ;;显示“班” MOV PAGE1,#2H MOV COLUMN,#91 MOV CODE1,#06H
LCALL CCW_PR ;;显示“王” MOV PAGE1,#2H MOV COLUMN,#106 MOV CODE1,#07H
LCALL CCW_PR MOV PD1,#3DH MOV PAGE1,#00H ; MOV COLUMN,#0H MOV CODE1,#08H ; LCALL CCW_PR MOV PAGE1,#00H MOV COLUMN,#0fH MOV CODE1,#09H
LCALL CCW_PR MOV PAGE1,#00H MOV COLUMN,#1eH MOV CODE1,#0aH
LCALL CCW_PR MOV PAGE1,#00H MOV COLUMN,#45 MOV CODE1,#0bh
LCALL CCW_PR MOV PAGE1,#00H MOV COLUMN,#60 MOV CODE1,#0ch
LCALL CCW_PR MOV PAGE1,#00H MOV COLUMN,#75 MOV CODE1,#0dh
LCALL CCW_PR MOV R2,#250
GOOD:ACALL DELY DJNZ R2,GOOD
MOV SP,#60H
LCALL INT LCALL CLEAR MOV PD1,#3DH
;显示“凯” ;
;页地址寄存器置初值 ;;列地址寄存器置初值
;字符代码寄存器置初值 ;显示“20” ;显示“10” ;显示“28” ;显示“22” ;显示“06” ;显示“4” ;调用初始化子程序 ;;调用清屏子程序 ;
13
;; ;;;;;;; ;
MOV PAGE1,#02H ;;页地址寄存器置初值 MOV COLUMN,#0H ;;列地址寄存器置初值 MOV CODE1,#00H ;;字符代码寄存器置初值 LCALL CCW_PR ;;显示“电” MOV PAGE1,#02H MOV COLUMN,#0fH MOV CODE1,#01H
LCALL CCW_PR ;;显示“气” MOV PAGE1,#02H MOV COLUMN,#1eH MOV CODE1,#02H
LCALL CCW_PR ;;显示“专” MOV PAGE1,#2H MOV COLUMN,#2dH MOV CODE1,#03H
LCALL CCW_PR ;;显示“10” MOV PAGE1,#2H MOV COLUMN,#61 MOV CODE1,#04H
LCALL CCW_PR ;;显示“02” MOV PAGE1,#2H MOV COLUMN,#76 MOV CODE1,#05H
LCALL CCW_PR ;;显示“班” MOV PAGE1,#2H MOV COLUMN,#91 MOV CODE1,#06H
LCALL CCW_PR ;;显示“王” MOV PAGE1,#2H MOV COLUMN,#106 MOV CODE1,#07H
LCALL CCW_PR ;;显示“凯” MOV R2,#250
GOOD1:ACALL DELY DJNZ R2,GOOD1
MOV SP,#60H
LCALL INT ;;调用初始化子程序 LCALL CLEAR ;;调用清屏子程序 MOV PAGE1,#0H MOV COLUMN,#61
MOV PD1,#3DH ;;
MOV PAGE1,#00H ;;页地址寄存器置初值 MOV COLUMN,#0H ;;列地址寄存器置初值
MOV CODE1,#08H ;;字符代码寄存器置初值
14
LCALL CCW_PR ;;显示“20” MOV PAGE1,#00H MOV COLUMN,#0fH MOV CODE1,#09H
LCALL CCW_PR ;;显示“10” MOV PAGE1,#00H MOV COLUMN,#1eH MOV CODE1,#0aH
LCALL CCW_PR ;;显示“28” MOV PAGE1,#00H MOV COLUMN,#45 MOV CODE1,#0bh
LCALL CCW_PR MOV PAGE1,#00H MOV COLUMN,#60 MOV CODE1,#0ch
LCALL CCW_PR MOV PAGE1,#00H MOV COLUMN,#75 MOV CODE1,#0dh
LCALL CCW_PR SJMP $
CCW_PR: MOV DPTR,#CCATB MOV A,CODE1 MOV B,#20H MUL AB ADD A,DPL MOV DPL,A MOV A,B ADDC A,DPH MOV DPH,A
PUSH COLUMN PUSH COLUMN MOV CODE1,#00H CCW_1: MOV COUNT,#10H MOV A,PAGE1 ANL A,#03H
ORL A,#0B8H MOV COM,A LCALL PR0 LCALL PR3
POP COLUMN MOV A,COLUMN CLR C
;显示“22” ;显示“06” ;显示“9” ;;确定字符字模块首地址 ;;取代码
;;字模块宽度为32个字节 ;;代码X32 ;字符字模块首地址=字模库首地址+代码X32 ;;列地址入栈 ;;列地址入栈
;;代码寄存器借用为间址寄存器 ;;计数器设定为16 ;;读页地址寄存器 ;;“或” 页地址设置代码 ;写页地址设置指令 ;;取列地址值 ;读列地址寄存器 15
;;; ; ; ;
SUBB A,#PD1 ;;列地址-模块参数
JC CCW_2 ;;<0为左半屏显示区域(E1) MOV COLUMN,A ;;≥0为右半屏显示区域(E2) MOV A,PAGE1
SETB ACC.3 ;;设置区域标志位 MOV PAGE1,A ;;“0”为E1,“1”为E2 CCW_2: MOV COM,COLUMN ;;设置列地址值
MOV A,PAGE1 ;;判区域标志以确定设置哪个控制器 JNB ACC.3,CCW_3 LCALL PR3 ;;区域E2 LJMP CCW_4 CCW_3: LCALL PR0 ;;区域E1
CCW_4: MOV A,CODE1 ;;取间址寄存器值 MOVC A,@A+DPTR ;;取汉字字模数据 MOV DAT,A ;;写数据 MOV A,PAGE1
JNB ACC.3,CCW_5 LCALL PR4 ;;区域E2 LJMP CCW_6
CCW_5: LCALL PR1 ;;区域E1
CCW_6: INC CODE1 ;;间址寄存器加1 INC COLUMN ;;列地址寄存器加1
MOV A,COLUMN ;;判列地址是否超出区域范围 CJNE A,#PD1,CCW_7
CCW_7: JC CCW_8 ;;未超出则继续
MOV A,PAGE1 ;;超出则判是否在区域E2 JB ACC.3,CCW_8 ;;在区域E2则退出
SETB ACC.3 ;;在区域E1则修改成区域E2 MOV PAGE1,A
MOV COM,#00H ;;设置区域E2列地址为“0” LCALL PR3
CCW_8: DJNZ COUNT,CCW_4 ;;当页循环
MOV A,PAGE1 ;;读页地址寄存器 JB ACC.7,CCW_9 ;;判完成标志D7位,“1”则完成退出 INC A ;;否则页地址加“1” SETB ACC.7 CLR ACC.3 MOV PAGE1,A
MOV CODE1,#10H ;;间接寄存器设置为16 LJMP CCW_1 ;;大循环 CCW_9: RET
ccAtB: db 00h,0F8h,48h,48h,48h,48h,0FFh,48h db 48h,48h,48h,0FCh,08h,00h,00h,00h db 00h,07h,02h,02h,02h,02h,3Fh,42h
16
db 42h,42h,42h,47h,40h,70h,00h,00h db 40h,20h,58h,47h,54h,54h,54h,54h db 54h,54h,0D4h,14h,06h,04h,00h,00h db 00h,00h,00h,00h,00h,00h,00h,00h db 00h,00h,1Fh,20h,40h,80h,70h,00h db 40h,40h,48h,48h,48h,0C8h,78h,4Fh db 48h,48h,48h,4Ch,48h,60h,40h,00h db 00h,00h,00h,00h,02h,23h,22h,42h db 62h,92h,0Ah,06h,02h,00h,00h,00h DB 000H,000H,042H,07FH,040H,000H,000H,000H ; “1”DB 000H,03EH,051H,049H,045H,03EH,000H,000H ; “0”DB 000H,000H,000H,000H,000H,000H,000H,000H ; “ ”DB 000H,000H,000H,000H,000H,000H,000H,000H ; “ ”B 000H,03EH,051H,049H,045H,03EH,000H,000H ; “0”DB 000H,042H,061H,051H,049H,046H,000H,000H ; “2”DB 000H,000H,000H,000H,000H,000H,000H,000H ; “ ”DB 000H,000H,000H,000H,000H,000H,000H,000H ; “ ”db 84h,84h,0FCh,84h,06h,0F4h,00h,0FFh db 00h,84h,84h,0FCh,84h,86h,04h,00h db 20h,60h,3Fh,10h,92h,41h,38h,07h db 40h,40h,40h,7Fh,40h,60h,40h,00h db 82h, 82h, 82h, 82h,0C3h, 82h, 00h, 00h db 40h, 40h, 40h, 40h, 40h, 40h, 40h, 7Fh db 40h, 40h, 40h, 40h, 40h, 60h, 40h, 00h db 00h, 7Eh, 42h, 22h, 22h, 12h, 97h, 40h db 30h, 0Fh, 00h, 00h, 3Fh, 40h, 70h, 00h 0H,000H ; “2”DB 000H,03EH,051H,049H,045H,03EH,000H,000H ; “0”DB 000H,000H,000H,000H,000H,000H,000H,000H ; “ ”DB 000H,000H,000H,000H,000H,000H,000H,000H ; “ ”DB 000H,000H,042H,07FH,040H,000H,000H,000H ; “1”,03EH,051H,049H,045H,03EH,000H,000H ; “0”17
----01 ----00 ----00 ----02 ----02 ----00 ----01 ----00
D
db 00h, 82h, 82h, 82h, 82h, 82h, 82h,0FEh
db 40h, 5Eh, 50h, 50h, 5Fh, 50h,0F0h, 5Eh db 00h,0FEh, 02h, 02h,0FFh, 02h, 00h, 00h
DB 000H,042H,061H,051H,049H,046H,00
DB 000H
DB 000H,000H,000H,000H,000H,000H,000H,000H ; “ ” DB 000H,000H,000H,000H,000H,000H,000H,000H ; “ ”
DB 000H,042H,061H,051H,049H,046H,000H,000H ; “2”----02 DB 000H,036H,049H,049H,049H,036H,000H,000H ; “8”----08 DB 000H,000H,000H,000H,000H,000H,000H,000H ; “ ” DB 000H,000H,000H,000H,000H,000H,000H,000H ; “ ”
DB 000H,042H,061H,051H,049H,046H,000H,000H ; “2”----02 DB 000H,042H,061H,051H,049H,046H,000H,000H ; “2”----02 DB 000H,000H,000H,000H,000H,000H,000H,000H ; “ ” DB 000H,000H,000H,000H,000H,000H,000H,000H ; “ ”
DB 000H,03EH,051H,049H,045H,03EH,000H,000H ; “0”----00 DB 000H,03CH,04AH,049H,049H,030H,000H,000H ; “6”----06 DB 000H,000H,000H,000H,000H,000H,000H,000H ; “ ” DB 000H,000H,000H,000H,000H,000H,000H,000H ; “ ”
DB 000H,006H,049H,049H,029H,01EH,000H,000H ; “9”----09 DB 000H,000H,000H,000H,000H,000H,000H,000H ; “ ” DB 000H,000H,000H,000H,000H,000H,000H,000H ; “ ” DB 000H,000H,000H,000H,000H,000H,000H,000H ; “ ”
INT: MOV COM,#0E2H ;;初始化子程序,复位 LCALL PR0 LCALL PR3
MOV COM,#0A4H ;;关闭休闲状态 LCALL PR0 LCALL PR3
MOV COM,#0A9H ;;设置1/32占空比 LCALL PR0 LCALL PR3
MOV COM,#0A0H ;;正向排序设置 LCALL PR0 LCALL PR3
MOV COM,#0C0H ;;设置显示起始行为第一行 LCALL PR0 LCALL PR3
MOV COM,#0AFH ;;开显示设置 LCALL PR0 LCALL PR3 RET
CLEAR: MOV R4,#00H ;;清屏子程序,页面地址暂存器设置 CLEAR1: MOV A,R4 ;;取页地址值
18
ORL A,#0B8H ;;“或” 页面地址设置代码 MOV COM,A ;;页面地址设置 LCALL PR0 LCALL PR3
MOV COM,#00H ;;列地址设置为“0” LCALL PR0 LCALL PR3
MOV R3,#50H ;;一页清80个字节 CLEAD2: MOV DAT,#00H ;;显示数据为“0” LCALL PR1 LCALL PR4
DJNZ R3,CLEAD2 ;;页内字节清零循环 INC R4 ;;页地址暂存器加1 CJNE R4,#04H,CLEAR1 ;;RAM区清零循环 RET
PR0: PUSH DPL ;;写指令代码子程序(E1) PUSH DPH
MOV DPTR,#CRADD1 PR01: MOVX A,@DPTR JB ACC.7,PR01 MOV DPTR,#CWADD1 MOV A,COM MOVX @DPTR,A POP DPH POP DPL RET
PR1: PUSH DPL ;;写显示数据子程序(E1) PUSH DPH
MOV DPTR,#CRADD1 PR11: MOVX A,@DPTR JB ACC.7,PR11 MOV DPTR,#DWADD1 MOV A,DAT MOVX @DPTR,A POP DPH POP DPL RET
PR2: PUSH DPL ;;读显示数据子程序(E1) PUSH DPH
MOV DPTR,#CRADD1 PR21: MOVX A,@DPTR JB ACC.7,PR21 MOV DPTR,#DRADD1 MOVX A,@DPTR
19
MOV DAT,A POP DPH POP DPL RET
PR3: PUSH DPL ;;写指令代码子程序(E2) PUSH DPH
MOV DPTR,#CRADD2 PR31: MOVX A,@DPTR JB ACC.7,PR31 MOV DPTR,#CWADD2 MOV A,COM MOVX @DPTR,A POP DPH POP DPL RET
PR4: PUSH DPL ;;写显示数据子程序(E2) PUSH DPH
MOV DPTR,#CRADD2 PR41: MOVX A,@DPTR JB ACC.7,PR41 MOV DPTR,#DWADD2 MOV A,DAT MOVX @DPTR,A POP DPH POP DPL RET
PR5: PUSH DPL ;;读显示数据子程序(E2) PUSH DPH
MOV DPTR,#CRADD2 PR51: MOVX A,@DPTR JB ACC.7,PR21 MOV DPTR,#DRADD2 MOVX A,@DPTR MOV DAT,A POP DPH POP DPL RET
DELY: MOV R0,#0AH loop2:MOV R1,#180 loop1:NOP
DJNZ R1,loop1 DJNZ R0,loop2 RET End
20
6程序调试及结果分析
6.1调试过程
检查硬件线路的连接,将修改后的程序加载到开发工具中,调试程序编译程序,并下载到单片机中运行,液晶屏中将显示“电气专1002班王凯20102822069”一行字依次显示。
6.2调试过程出现的问题以及解决方法
1在取模插入程序后,常出现乱码,而并非是我想要的字样。最后通过设计点阵大小,然后在取模工具中取模解决乱码的问题。
2在显示时不能正确显示所要显示的内容,最后通过调整实验程序而达到预想效果。
3实验过程中发现电脑始终无法与综合试验箱连接,检查后发现下载线接触不良,换一根新的下载线实验结果正常显示。
4实验过程中发现液晶显示频只能显示一部分,经检查后发现是源程序出现错误,修改后正常显示。
5实验过程运行源程序总是出现eroor56,检查后发现是没有重建目标文件导致,返回按正确操作步骤进行即可。
6实验过程中,运行源程序一遍后关掉软件再运行时,无法连接,原因没有按正常的步骤断开试验箱,需关掉实验箱电源,再打开软件,重新操作即可。
7实验过程发现不管怎么样运行,LCD都无法显示,经检查后发现是实验箱后面的数据接口损坏,重新换台试验箱即可。
6.3结论
整个程序实现了基本显示功能,但是还有一些方面做得不够好或者有待改进:程序结构不清晰,有部分过于繁琐,是对程序语言还不够了解所造成,此次实验只是实现LCD最简单的显示,但是实验过程中遇到的困难层出不穷,由于自身能力有限,在编写程序中漏洞百出,好在经过几天的努力,克服了各种困难,成功完成实验结果的显示。
21
7心得体会
此次实验虽然只是实现LCD简单功能的显示,但是对综合知识的考验很强,老师刚公布课程设计课题时,我们都无从下手,以往在课程所学知识此时不知如何运用,以往在课程总认为老师所讲只是肤浅,听课索然无味,认为自己都能听懂,这本课程也就学好了,但是这次课程设计却对我们基础知识进行了检验,也证实了我在这门功课上的不足,说来惭愧,此次实验是通过网络以及自己所学才能大概写出程序,上机进行综合验证时,总是不能正常显示结果,和同学讨论后得知,LCD显示乱码原因是字模获取不规范,要严格根据试验箱LCD的规格正确选择字模提取方式,修改后再次输入,进行验证后,正确显示实验结果,当看到显示结果后,十分开心,努力总算没有白费,虽然实验过程总是遇到各种困难,但是通过我们小组同学的共同努力,成功将困难克服,此次实验不仅是对我们专业知识的一次考核,也是工业设计单片机的一次合理运用,通过此次课程设计我们才真正明白单片机的运用有多么广泛,我们所学专业知识多么重要,此次课程设计更加坚定了以后我要在单片机上下苦工的决心,将以往的荒唐想法全部抛出脑外,引起对单片机的重视,将单片机的学习放在重中之重,我相信此次课程会为我们以后的学习和工作打下良好的基础,使我们通过实践了解到单片机运用之广泛,工业设计如何将单片机运用到生活领域,以及如何使用软件控制单片机的运行如何将汇编程序拷入单品级里面,使单片机成功的按照所编程序运行,我相信通过我的努力一定可以地编写出属于自己的单片机程序。
22
8参考文献
1.《单片微型计算机与接口技术》李群芳,电子工业出版社(教材)
2.《过程控制系统及仪表》邵森 编(教材)
3.《单片机及应用》李大友 高等教育出版社 (教材)
23
9附录
24
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- 7swz.com 版权所有 赣ICP备2024042798号-8
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务