1
第一章 微控制器应用系统综合
的目的意义
1.1 设计目的
通过课程设计进一步锻炼同学们在微型计算机应用方面的实际工作能力。计
算机科学在应用上得到飞速发展,因此,学习这方面的知识必须紧密联系实际:
掌握这方面的知识更要强调解决实际问题的能力。同学们要着重学会面对一个实
际问题,如何去自己收集资料,如何自己去学习新的知识,如何自己去制定解决
问题的
并通过实践不断地去分析和解决前进道路上的一切问题,最终到达胜
利的彼岸。
本实验是设计单片机重量检测与显示电路,对 5种以上不同单价的商品进行
键盘参数设置,称量,计价和显示。这个课题与我们现实生活联系密切,具有很
大的实际用途。做好本实验对我们今后学习和生活具有重要意义。
1.2 课程在教学计划中的地位和作用
《微控制器应用系统综合设计》课程是测控技术专业本科生必修的一
门技术基础课程。通过该课程的学习使学生对单片机有一个全面的了解、掌握常
规芯片的使用方法、掌握简单微型计算机应用系统软硬的设计方法。为了使我们
微机应用课程设计目标更明确,要求更具体,学生收获更大,我们特编写课程设
计任务书,学生可根据本人的爱好任选其中一个课题,要求独立完成课题,写出
课程设计
,设计出电路原理图,说明工作原理,画出电路板图,编写程序
及程序流程图。希望同学认真阅读本任务书,认真查阅资料与上机调试,圆满完
成课程设计。
2
第二章 电子计价称软硬件设计任务
2.12.12.12.1 设计内容及要求
设计单片机称重测量检测,处理与显示电路,对五种不同单价的商品进行
键盘参数设置,称量,计价和显示。由 A/D0809 把输入的 0—5V的电压转换,
当电压为 5V时,对应的重量为 500 克,进行数值转换,并在 LCD 液晶显示器
上显示商品的克数,程序设置了五种不同单价的商品,由键盘输入 0—4显示不
同商品的单价,并显示总的价钱,显示三位数。
2.2 课程设计的要求
1.利用现有的硬件电路,构成单片机称重检测,处理与显示系统。
2.编写程序,实现称量和计价显示的功能。
3.设计出原理图,说明工作原理,画出程序流程图。
3
第三章 总体
3.13.13.13.1 设计思想
实验需要设计一个系统可以对 5 种以上不同的商品进行键盘参数设
置,称量,计价和显示。可以把系统分为以下几个模块,分别进行编写程
序,调试。
(1)8279可编程键盘,输入 0—4时,通过比较键值,使程序跳到不
同的子程序,在子程序中进行 A/D采样,设定单价,经过数值转换与乘法
程序,将重量和价钱转换成十进制数,调用显示程序。执行完返回判断有
无键按下。
(2)A/D采样部分,给 A/D0 通道输入一个 0---5V 的电压,将转换
成 0—FF输出,对应 0—500G,把 A/D采样值存入内部寄存器 51H中,
经过数值转换成十进制数,调用 LCD显示程序显示。当质量大于 500 克
时,转到报警程序。
(3)LCD液晶显示,分三个区分别显示单价,重量,价钱,并且都
分为三位显示。
(4)实验中还需要用到双字节与单字节乘法及十六进制转十进制报
警等子程序。
4
P0.0-p0.7
8031
/RD
/WR
RESET
3
7
3
1
3
8
IN0 D0—D7
ADC0809
/RD
/WR
CLK
0—5V
T4
74LS02
D0—D7
8279
/RD SL2
/WR SL1
RESET SL0
74L
S13
8
D0-D7
C/D
/CE
LCD
/RD
/WR
/RESET FS
图 3.1 硬件系统结构图
5
第四章 硬件设计
4.1 硬件设计概要
本次设计主要用到的芯片有 8088、ADC0809 模数转换器 、可编程键盘显示
8279、LCD 液晶显示共同完成这个课题。A/D 实现数据的采集和转换,可编程键盘
显示 8279 实现键盘输入编号显示不同商品的单价,LCD 液晶显示器显示单价,重
量以及三位价钱。8088 实现各个芯片之间的连接。
4.2 所用到的芯片及其各自功能说明
4.2.1 芯片列表
AT89C528 位单片机
ADC0809 模数转换器
可编程键盘显示 8279
LCD 液晶器
4.2.2 AT89C528 位单片机
AT89C52 是 一个低电压,高性能 CMOS 8 位单片机,片内含 8k bytes 的
可反复擦写的 Flash 只读程序存储器和 256 bytes 的随机存取数据存储器
(RAM),器件采用 ATMEL 公司的高密度、非易失性存储技术生产,兼容
MCS-51 指令系统,片内置通用 8位中央 处理器和 Flash 存储单元,功能强大
的 AT89C52 单片机可提供许多较复杂系统控制应用场合。
4.2.3 ADC0809 的功能简介
ADC0809 是 8 位逐次逼近式单片 A/D 转换芯片,可对 8路 0~5V 的输入模
拟电压信号分时进行转换。它内部包括 8路模拟开关,以及地址锁存译码器,有
三条地址输入线。该芯片还有便于和微机数据总线相连的三台输出锁存器。
ADC0809 的内部结构为:ADC0809 是 CMOS 单片型逐次逼近式 A/D 转换器,
它由 8路模拟开关、地址锁存译码器、比较器、8位开关树型 A/D 转换器、逐次
逼近寄存器、三态输出锁存器等其他一些电路组成。其内部原理图如下:
6
图 4.1
ADC0809 芯片管脚功能如下:
IN0~IN7:8 路模拟量输入通道。
ADDA~ADDC:地址线用于选择模拟量输入通道。
ALE:地址锁存允许信号。
START:转换启动信。
D0~D7:数据输线 。
OE:输出允许信号,低电平允许转换结果输出。
EOC:A/D 转换结束信号,当转换结束时,此端口输出一个高电平。
CLOCK:时钟信号输入引脚,通常使用 500KHz。
EOC:转换结束信号,为 0代表正在转换,1代表转换结束。
REF(-)、REF(+):基准电压。
Vcc:+5V 电压。
GND:接地。
ADC0809 的管脚图如下:
N 位
寄存器
N位D/A
位置控制逻辑
模拟量输入
DONE
启动
A
B
7
图 4.2
4.2.4 可编程键盘显示 8279
8279 是可编程的键盘,显示接口芯片.它既具有按键处理功能,又具有
自动显示功能,在单片机系统中应用很广泛.8279 内部有键盘 FIFO(先进先
出堆栈)/传感器,双重功能的 8*8=64B RAM,键盘控制部分可控制 8*8=64 个
按键或 8*8 阵列方式的传感器.该芯片能自动消抖并具有双键锁定保护功
能.
(1)数据线
DB0→DB7 是双向三态数据总线,在接口电路中与系统数据总线相连,用以传
送 CPU 和 8279 之间的数据和命令.
(2)地址线
/CS=0选中8279,当A0=1时,为命令字及状态字地址;当A0=0时,为片内数据
地址,故 8279 芯片占用 2个端口地址.
(3)控制线
CLK:8279 的时钟输入线.
IRQ:中断请求输出线,高电平有效.
/RD,/WR:读,写输入控制线.
SL0---SL3:扫描输出线,用来作为扫描键盘和显示的代码输出或直接输出线.
8
RL0---RL7:回复输入线,它们是键盘或传感器矩阵的信号输入线.
SHIFT:来自外部键盘或传感器矩阵的输入信号,它是 8279 键盘数据的次高
位即 D6 位的
状态,该位状态控制键盘上/下档功能.在传感器方式和选通方式中,该引脚
无用.
CNTL/S:控制/选通输入线,高电平有效.键盘方式时,键盘数据最高位(D7)的
信号输
入到该引脚,以扩充键功能;选通方式时,当该引脚信号上升沿到时,把
RL0---RL7 的数
据存入 FIFO RAM 中.
OUTA0---OUTA3:通常作为显示信号的高 4位输出线.
OUTB0---OUTB3:通常作为显示信号的低 4位输出线.
/BD:显示熄灭输出线,低电平有效.当/BD=0 时将显示全熄灭.
图 4.3 8279引脚及引线功能
4.2.5 LCD 液晶器
T6963C液晶显示控制器多用于中小规模的液晶显示器件,常被装配
在图形液晶显示模块上,以内藏控制器型图形液晶显示模块的形式出
现。
一、T6963C的特点
9
(1) T6963C是点阵式液晶图形显示控制器,它能直接与 80系列的 8位微处
理器接口;
(2) T6963C的字符字体可由硬件或软件设置,其字体有 4种:5×8、6×8、
7×8、8×8;
(3) T6963C的占空比可从 1/16到 1/128;
(4) T6963C可以图形方式、文本方式及图形和文本合成方式进行显示,
以及文本方式下的特征显示,还可以实现图形拷贝操作等等;
(5) T6963C 具有内部字符发生器 CGROM,共有 128 个字符,T6963C
可管理 64K显示缓冲区及字符发生器 CGRAM。并允许MPU随时访
问显示缓冲区,甚至可以进行位操作。
二、T6963C的引脚说明及其功能
T6963C的 QFP封装共有 67个引脚(见图三),各引脚说明如下:
(1) D0--D7:T6963C与MPU接口的数据总线,三态;
(2) /RD, /WR:读、写选通信号,低电平有效,输入信号;
(3) /CE:T6963C的片选信号,低电平有效;
(4) C/D:通道选择信号,1为指令通道,0为数据通道;
(5)/RESET, /HALT:/RESET为低电平有效的复位信号,它将行、列计
数器和显示寄存器清零,关显示;/HALT具有/RESET的基本功能,还将
中止内部时钟振荡器的工作;
以上引脚为 T6963C与MPU接口的引脚。
10
图 4.4 T6963C管脚外形图
(6) DUAL, SDSEL:
DUAL = 1为单屏结构,DUAL = 0为双屏结构;
SDSEL = 0 为一位串行数据传输方式,SDSEL = 1 为二位并行数据传输
方式;
(7) MD2, MD3:设置显示窗口长度,从而确定了列数据传输个数的最
大值,其组合逻辑关系如下:
表 4.1
MD3 1 1 0 0
MD2 1 0 1 0
每行字符
数
32 40 64 80
当 DUAL = 0时,以上设置中的字符行和总行数增至原来的 2倍,其
它都不变,这种情况下的液晶屏结构为双屏结构;
(9) FS1,FS0:显示字符的字体选择
表 4.2
FS1 1 1 0 0
FS0 1 0 1 0
字体 5×8 6×8 7×8 8×8
(10) XI,XO:振荡时钟引脚;
(11) ad0-ad15:输出信号,显示缓冲区 16位地址总线;
(12) d0-d7:三态,显示缓冲区 8位数据总线;
(13) r/w:输出,显示缓冲区读、写控制信号;
(14) /ce:输出,显示缓冲区片选信号,低电平有效;
(15) /ce0,/ce1:输出,DUAL = 1时的存储器片选信号;
(16) T1,T2,CH,CH2:用来检测 T6963C 工作使用情况,T1,T2 作为
测试信号输入端,CH,CH2作为输出端;
(17) HOD,HSCP,ED,LP,CDATA,FR为 T6963C驱动部信号
11
连线
AD0809接线:
1.把 A/D区 0809的 0通道 IN0用插针接至W1的中心抽头 V01插孔(0-5V)。
2.0809的 CLK插孔与分频输出端 T4相连。
3.把 VREF 端接到为+5V。
4.连好 74LS02
5.将 A/D区 D0-D7 用排线与 BUS1区 XD0-XD7相连。
扩展键盘接线:
1.将 DVCC实验系统上 J8 插座与键盘显示板用扁平电缆相连。
2.将 KEY区 D0—D7 用 8芯排线连到 BUS2区 XD0—XD7上。
3.将 KEY区WR、RD、ALE 分别连到 BUS3区 XWR、XRD、ALE 上。
4.KEY区 A0 连到 BUS1 区 XA0 上。
5.KEY区 RST连到MP区 SP上。
6.KEY区 KCS连到 SELET 区的 Y3上。
LCD液晶显示器连线:
1.液晶板 C/D 连主机 XA0,液晶板/CS连主机 Y0
2.液晶板 D0---D7 连主机 XD0---XD7
3.液晶板 / RESET 连主机 /RST,液晶板/WR 连主机 XWR,液晶板/RD
连主机 XRD
4.液晶板 FS 接地。
12
13
第五章 软件设计
5.15.15.15.1 流程图及其说明
开始
8279初始化
显示器显示 P
有键按下吗?
计算键值散转
商品 2 商品 3 商品 4 商品 5商品 1
A/D采样 A/D采样 A/D采样 A/D采样 A/D采样
调 乘 法
及 转 换
子程序
调 显 示
子程序
调 乘 法
及 转 换
子程序
调 乘 法
及 转 换
子程序
调 乘 法
及 转 换
子程序
调 乘 法
及 转 换
子程序
调 显 示
子程序
调 显 示
子程序
调 显 示
子程序
调 显 示
子程序
,Y
N
图 5.1 主程序流程图
14
开始
A/D 采样值转化为相应的十六进制数
转化为十进制数
转化为十进制数
调 LCD 显示子程序
乘单价,调乘法子程序
调 LCD 显示子程序
返回
图 5.2 乘法及数值转换子程序
15
设置显示指针地址,写控制字
设置自动写方式,分区,字体,字数
一行显示完,改变指针地址指向下一行
全部显示完,等待下一次设置
调清屏子程序
开 始
图 5.3 LCD液晶显示子程序
5.2源程序及其说明
ORG 0000H
DAT1 EQU 30H ;第一参数存放地址
DAT2 EQU 31H ;第二参数存放地址/数据存放地址
COM EQU 32H ;指令代码存放地址
C_ADD EQU 8001H ;指令通道地址(片选 Y1端口地址 8000H开始)
D_ADD EQU 8000H ;数据通道地址
S_ADD_H EQU 33H ;LCD显示指针地址高位
S_ADD_L EQU 34H ;LCD显示指针地址低位
S_ADD_HF EQU 35H ;LCD显示指针地址高位备份
S_ADD_LF EQU 36H ;LCD显示指针地址低位备份
SEL_FONT EQU 37H ;LCD字体选者,16X16则为#16H,8X16则为#8H
WORD_NUM EQU 38H ;已经显示的字数
ATTR EQU 39H ;字符属性码(低四位有效)
CODED EQU 40H ;字符代码
CGR_NUM EQU 41H ;CGRAM显示程序显示的字数
HA7S: MOV SP,#60H
MOV DPTR,#0B001H
16
MOVA,#00H
MOVX @DPTR,A
MOVA,#32H
MOVX @DPTR,A
MOVA,#0DFH
MOVX @DPTR,A
HA7S1 MOVXA,@DPTR
JBACC.7,HA7S1
MOV DPTR,#0B000H
MOVA,#0C8H
MOVX @DPTR,A
INC DPTR
MOVA,#80H
MOVX @DPTR,A
HA7S2: MOV 42H,#80H
MOV 43H,#40H
HA7S3: MOV DPTR,#0B001H
MOVXA,@DPTR
ANLA,#07H
CJNEA,#00H,HA7S4
AJMP HA7S3
HA7S4: MOV DPTR,#0B000H
MOVXA,@DPTR
MOV B,A
MOV R1,#00H
MOV DPTR,#KEYTAB
HA7S5:MOVA,#00H
MOVCA,@A+DPTR
CJNEA,B,HA7S6
AJMP HA7SA
HA7S6:INC DPTR
INC R1
MOVA,R1
JNBACC.2,HA7S5
AJMP HA7S2
HA7SA: CJNEA,#0C1H,L1
MOVA,42H
MOV DPTR,#0B001H
MOVX @DPTR,A
MOVA,R1
MOV R0,43H
MOV@R0,A
INC 43H
MOV DPTR,#CDATA
17
MOVCA,@A+DPTR
MOV DPTR,#0B000H
MOVX @DPTR,A
LJMP LOOP0
L1: CJNEA,#0C8H,L2
MOVA,42H
MOV DPTR,#0B001H
MOVX @DPTR,A
MOVA,R1
MOV R0,43H
MOV@R0,A
INC 43H
MOV DPTR,#CDATA
MOVCA,@A+DPTR
MOV DPTR,#0B000H
MOVX @DPTR,A
LJMP LOOP1
L2: CJNEA,#0C9H,L3
MOVA,42H
MOV DPTR,#0B001H
MOVX @DPTR,A
MOVA,R1
MOV R0,43H
MOV@R0,A
INC 43H
MOV DPTR,#CDATA
MOVCA,@A+DPTR
MOV DPTR,#0B000H
MOVX @DPTR,A
LJMP LOOP2
L3: CJNEA,#0D0H,L4
MOVA,42H
MOV DPTR,#0B001H
MOVX @DPTR,A
MOVA,R1
MOV R0,43H
MOV@R0,A
INC 43H
MOV DPTR,#CDATA
MOVCA,@A+DPTR
MOV DPTR,#0B000H
MOVX @DPTR,A
LJMP LOOP3
L4: CJNEA,#0D8H,L5
18
MOVA,42H
MOV DPTR,#0B001H
MOVX @DPTR,A
MOVA,R1
MOV R0,43H
MOV@R0,A
INC 43H
MOV DPTR,#CDATA
MOVCA,@A+DPTR
MOV DPTR,#0B000H
MOVX @DPTR,A
LJMP LOOP4
L5: LJMP HA7S
KEYTAB: DB 0C1H,0C8H,0C9H,0D0H,0D8H,0E0H,0C2H,0CAH,0D1H,0D9H
DB 0DAH,0C3H,0CBH,0D2H,0D3H,0DBH
CDATA: DB 0CH,9FH,4AH,0BH,99H,29H,28H,8FH,08H,09H,88H,38H
DB 6CH,1AH,68H,0E8H
LOOP0: MOVA,#00H
MOV DPTR,#9000H ;A/D通道 Y1
MOVX @DPTR,A
MOV R7,#0FFH
H55S: DJNZ R7,H55S
MOVXA,@DPTR
MOV 51H,A
LCALL COMP
LCALL DMUL
LCALL CONT2
LCALLMAIN
MOV R5,#0CH
PP0: MOV R4,#12H
LCALL DDMUL
LCALL CONT0
LJMPMAIN ;显示
LJMP XIAN1
LOOP1: MOVA,#00H
MOV DPTR,#9000H ;A/D通道 Y1
MOVX @DPTR,A
MOV R7,#0FFH
H55S1: DJNZ R7,H55S1
MOVXA,@DPTR
MOV 51H,A
LCALL COMP
19
LCALL DMUL
LCALL CONT2
LCALLMAIN
MOV R5,#9FH
PP1: MOV R4,#0FH
LCALL DDMUL
LCALL CONT0
LJMPMAIN
LJMP XIAN1
LOOP2: MOVA,#00H
MOV DPTR,#9000H ;A/D通道 Y1
MOVX @DPTR,A
MOV R7,#0FFH
H55S2: DJNZ R7,H55S2
MOVXA,@DPTR
MOV 51H,A
LCALL COMP
LCALL DMUL
LCALL CONT2
LCALLMAIN
MOV R5,#4AH
PP2: MOV R4,#0CH
LCALL DDMUL
LCALL CONT0
LJMPMAIN
LJMP XIAN1
LOOP3: MOVA,#00H
MOV DPTR,#9000H ;A/D通道 Y1
MOVX @DPTR,A
MOV R7,#0FFH
H55S3: DJNZ R7,H55S3
MOVXA,@DPTR
MOV 51H,A
LCALL COMP
LCALL DMUL
LCALL CONT2
LCALLMAIN
MOV R5,#0BH
PP3: MOV R4,#08H
LCALL DDMUL
LCALL CONT0
LJMPMAIN
20
LJMP XIAN1
LOOP4: MOVA,#00H
MOV DPTR,#9000H ;A/D通道 Y1
MOVX @DPTR,A
MOV R7,#0FFH
H55S4: DJNZ R7,H55S4
MOVXA,@DPTR
MOV 51H,A
LCALL COMP
LCALL DMUL
LCALL CONT2
LCALLMAIN
MOV R5,#99H
PP4: MOV R4,#05H
LCALL DDMUL
LCALL CONT0
LJMPMAIN
LJMP XIAN1
XIAN1: MOV R6,#80H
DISPC1: MOVA,r6
MOV DPTR,#0B001H
MOVX @DPTR,A
MOVA,R5
MOV DPTR,#0B000H
MOVX @DPTR,A
MOV R2,#20H
LCALL DELAY4
MOVA,#0FFH
MOVX @DPTR,A ;关显示
INC R6
LJMP ha7s2
dELAY4: PUSH 02H
DELAY5: PUSH 02H
DELAY6: PUSH 02H
DELAY7: DJNZ R2,DELAY7
POP 02H
DJNZ R2,DELAY6
POP 02H
DJNZ R2,DELAY5
POP 02H
DJNZ R2,DELAY4
21
RET
;/////////////128X64液晶显示程序//////////////////
MAIN:
MOV SP,#60H
LCALL INT_LCD ;液晶初始化
MOVWORD_NUM,#00H ;实现字数清零
LCALL CLEAR ;清屏
;-----------------------------显示方式一
;在第一区显示,128X64液晶显示模块可人为分为四个区,每个区大小为 128X16
;区一显示完毕
;----------------------------显示方式二
;在区二显示,以单个字循环方式显示“测控技术实验室”,16X16 字体,一般用
于汉字显示
MOV S_ADD_H,#01H ;设置第一个字的显示起始地址高位
MOV S_ADD_L,#01H ;低位
MOV SEL_FONT,#16H ;采用 16X16字体
MOV DPTR,#TAB0 ;danjia
MOV R7,#02H ;显示字的个数
ER: LCALL SHOW_A_WORD
DJNZ R7,ER
MOV S_ADD_H,#01H ;设置第一个字的显示起始地址高位
MOV S_ADD_L,#06H ;低位
MOV SEL_FONT,#08H ;采用 8X16字体
MOV DPTR,#TAB03 ;显示 0
SSS2: LCALL SHOW_A_WORD
MOV S_ADD_H,#01H ;设置第一个字的显示起始地址高位
MOV S_ADD_L,#07H ;低位
MOV SEL_FONT,#08H ;采用 8X16字体
MOV DPTR,#TAB3
SSS1: LCALL SHOW_A_WORD ;显示小数点
MOV S_ADD_H,#01H ;设置第一个字的显示起始地址高位
MOV S_ADD_L,#08H ;低位
MOV SEL_FONT,#08H ;采用 8X16字体
MOVA,4FH ;显示的字从 4F中读取
ANLA,#0F0H ;取 4F高位
22
SWAPA
ACALL BIAO
ER2: LCALL SHOW_A_WORD ;显示千位
MOV S_ADD_H,#01H ;设置第一个字的显示起始地址高位
MOV S_ADD_L,#09H ;低位
MOV SEL_FONT,#08H ;采用 8X16字体
MOVA,4FH ;显示的字从 4F中读取
ANLA,#0FH ;取 4F低位
ACALL BIAO
ER1: LCALL SHOW_A_WORD
MOV S_ADD_H,#01H ;设置第一个字的显示起始地址高位
MOV S_ADD_L,#0AH ;低位
MOV SEL_FONT,#08H ;采用 8X16字体
MOV DPTR,#TAB05 ;Y/G
MOV R7,#03H ;显示字的个数
ER3: LCALL SHOW_A_WORD
DJNZ R7,ER3
;----------------------------显示方式三
;在区三显示,以单个字循环方式显示“GOOD”,8X16字体,一般用于数字和字母
的显示
MOV S_ADD_H,#02H ;设置一个字的显示起始地址高位
MOV S_ADD_L,#01H ;低位
MOV SEL_FONT,#16H ;采用 8X16字体
MOV DPTR,#TAB01 ;zhongliang
MOV R7,#02H ;显示字的个数
SAN: LCALL SHOW_A_WORD
DJNZ R7,SAN
MOV S_ADD_H,#02H ;设置第一个字的显示起始地址高位
MOV S_ADD_L,#0BH ;低位
MOV SEL_FONT,#08H ;采用 8X16字体
MOV DPTR,#TAB
;显示字的个数 : g
SAN1: LCALL SHOW_A_WORD
MOV S_ADD_H,#02H ;设置第一个字的显示起始地址高位
MOV S_ADD_L,#06H ;低位
MOV SEL_FONT,#08H
MOVA,46H ;显示的字从 46中读取
ANLA,#0FH ;取 46低位
;SWAPA
23
ACALL BIAO
SAN2: LCALL SHOW_A_WORD ;显示
MOV S_ADD_H,#02H ;设置第一个字的显示起始地址高位
MOV S_ADD_L,#07H ;低位
MOV SEL_FONT,#08H ;采用 8X16字体
MOVA,47 ;显示的字从 47中读取
ANLA,#0F0H ;取 47低位
SWAPA
ACALL BIAO
SAN3: LCALL SHOW_A_WORD ;显示
MOV S_ADD_H,#02H ;设置第一个字的显示起始地址高位
MOV S_ADD_L,#08H ;低位
MOV SEL_FONT,#08H ;采用 8X16字体
MOVA,47H ;显示的字从 47中读取
ANLA,#0FH ;取 47高位
ACALL BIAO
SAN5: LCALL SHOW_A_WORD ;显示
;----------------------------显示方式四
MOV S_ADD_H,#03H ;设置第一个字的显示起始地址高位
MOV S_ADD_L,#01H ;低位
MOV SEL_FONT,#16H ;采用 16X16字体
MOV DPTR,#TAB02 ;jiaqian
MOV R7,#02H ;显示字的个数
ER4: LCALL SHOW_A_WORD
DJNZ R7,ER4
MOV S_ADD_H,#03H ;设置第一个字的显示起始地址高位
MOV S_ADD_L,#06H ;低位
MOV SEL_FONT,#08H ;采用 8X16字体
MOVA,4CH ;显示的字从 4C中读取
ANLA,#0F0H ;取 4C高位
SWAPA
ACALL BIAO
SAN7: LCALL SHOW_A_WORD ;显示千位
MOV S_ADD_H,#03H
MOV S_ADD_L,#07H
MOV SEL_FONT,#08H
MOVA,4CH ;显示的字从 4C中读取
ANLA,#0FH ;取 4C低位
ACALL BIAO
24
SAN8: LCALL SHOW_A_WORD
MOV S_ADD_H,#03H ;设置第一个字的显示起始地址高位
MOV S_ADD_L,#08H ;低位
MOV SEL_FONT,#08H ;采用 8X16字体
MOV DPTR,#TAB3
SSS: LCALL SHOW_A_WORD 显示小数点
MOV S_ADD_H,#03H ;设置第一个字的显示起始地址高位
MOV S_ADD_L,#09H ;低位
MOV SEL_FONT,#08H ;采用 8X16字体
MOVA,4DH ;显示的字从 4D中读取
ANLA,#0F0H ;取 4D高位
SWAPA
ACALL BIAO
SAN6: LCALL SHOW_A_WORD
MOV S_ADD_H,#03H ;设置第一个字的显示起始地址高位
MOV S_ADD_L,#0AH ;低位
MOV SEL_FONT,#16H ;采用 16X16字体
MOV DPTR,#TAB04 ;元
MOV R7,#01H ;显示字的个数
ER9: LCALL SHOW_A_WORD
DJNZ R7,ER9
LJMP HA7S
;----------------------------延时子程序
DELAY:
MOV R7,#01H
DY1:MOV R2,#0FH
DY11:DJNZ R2,DY11
DJNZ R7,DY1
RET
;----------------------------清屏子程序
CLEAR:
MOV DAT1,#00H ;GRAPHIC HOMEADDRESS
MOV DAT2,#00H
MOV COM,#24H
LCALL PR1 ;设置起始地址指针
MOV COM,#0B0H ;设置自动写方式
LCALL PR12
MOV R0,#00H ;分四个区清屏,每个区 256个字节
MOV R1,#04H ;有四个区
CLEARG:
25
CLRA
MOV DPTR,#8000H
MOVX @DPTR,A
DJNZ R0,CLEARG ;清 256个字节
DJNZ R1,CLEARG
MOV COM,#0B2H ;设置自动写结束指令
LCALL PR12
MOV DAT1,#00H ;TEXT HOMEADDRESS
MOV DAT2,#10H
MOV COM,#24H
LCALL PR1
MOV COM,#0B0H ;设置自动写方式
LCALL PR12
MOV R0,#80H ;16COLUMNS*8LINES=128=80H
CLEART:
MOVA,#00H
MOV DPTR,#8000H
MOVX @DPTR,A
DJNZ R0,CLEART ;
MOV COM,#0B2H ;设置自动写结束指令
LCALL PR12
RET
;--------------------------显示一个 16X16或 8X16 的字体子程序
;要求-调用该程序前要将被显示的字的字码表地址送 DPTR,显示指针
;地址送 S_ADD_H显示地址高位,S_ADD_L显示地址低位
;SEL_FONT 显示字体控制,#16H为 16X16,#8H为 8X16
;[S_ADD_HF显示地址高位备份,S_ADD_LF 显示地址低位备份]
;[WORD_NUM已经显示的字数]
SHOW_A_WORD: ;16x16或 8x16显示程序
SETB 0D4H
PUSH DPH ;;开始循环的第一个字符的地址设置
PUSH DPL
MOV DAT1,S_ADD_L ;重新设置显示地址指针
MOV DAT2,S_ADD_H
MOV COM,#24H
LCALL PR1 ;--------------------
POP DPL
POP DPH ;开始循环的第一个字符的地址设置结束
MOV R0,#10H ;行控制
MOV S_ADD_HF,S_ADD_H ;高位备份
MOV S_ADD_LF,S_ADD_L ;低位备份
26
PUSH DPH ;存字库指针
PUSH DPL
MOV COM,#0B0H ;设置自动写方式
LCALL PR12 ;-------------------
POP DPL ;取出字库指针
POP DPH
LINE_STA:
CLR A
MOVCA,@A+DPTR ;A暂存左半行字码
INC DPTR ;字码表指针加 1,指向下一个字节
PUSH DPH ;保存字库指针
PUSH DPL
MOV DPTR,#8000H
MOVX @DPTR,A ;写入左半行字码
MOVA,SEL_FONT
CJNEA,#16H,FONT_8
POP DPL ;取出字库指针
POP DPH
CLRA
MOVCA,@A+DPTR ;A暂存右半行字码
INC DPTR ;字码表指针加 1,指向下一个字节
PUSH DPH ;保存字码表指针
PUSH DPL
MOV DPTR ,#8000H
MOVX @DPTR,A ;写入右半行字码,写完一个字的一行(1/16)
FONT_8:
MOVA,S_ADD_L ;改变显示 RAM低位地址到下一行
ADDA,#10H
MOV S_ADD_L,A
MOVA,S_ADD_H ;低位满 FFH,则显示 RAM高位地址加 1
ADDCA,#0H
MOV S_ADD_H,A
MOV COM,#0B2H ;设置自动写结束指令
LCALL PR12 ;-----------------
MOV DAT1,S_ADD_L ;重新设置显示地址指针
MOV DAT2,S_ADD_H
MOV COM,#24H
LCALL PR1 ;--------------------
MOV COM,#0B0H ;设置自动写方式
LCALL PR12 ;-------------------
POP DPL ;取出字库指针
POP DPH
DJNZ R0,LINE_STA ;没有完成一个字(16行),则继续
INC WORD_NUM ;已经显示的字数加一
27
EE: MOVA,S_ADD_LF ;调整显示 RAM区下一个字的起始地址
MOV R0,SEL_FONT
CJNE R0,#16H,DD
ADDA,#2H ;一个字为两个字节宽(16x16)
SJMPASDF
DD: ADDA,#1H ;一个字为一个字节宽(8x16)
ASDF: MOV S_ADD_LF,A
MOVA,S_ADD_HF
ADDCA,#0H
MOV S_ADD_HF,A
N_ENTER:
MOV S_ADD_L,S_ADD_LF
MOV S_ADD_H,S_ADD_HF
PUSH DPH
PUSH DPL
MOV COM,#0B2H ;设置自动写结束指令
LCALL PR12 ;-----------------
MOV DAT1,S_ADD_L ;重新设置显示地址指针
MOV DAT2,S_ADD_H
MOV COM,#24H
LCALL PR1 ;--------------------
POP DPL
POP DPH
CLR 0D4H
RET
;--------------------------液晶模块初始化子程序
INT_LCD:
MOV DAT1,#00H ;设置图形显示区域首地址
MOV DAT2,#00H ;或为文本属性区域首地址
MOV COM,#42H ;[0000H]
LCALL PR1
MOV DAT1,#00H ;设置文本显示区域首地址
MOV DAT2,#10H ;[1000H]
MOV COM,#40H
LCALL PR1
MOV DAT1,#10H ;设置图形显示区域宽度
MOV DAT2,#00H ;或为文本属性区域宽度
MOV COM,#43H ;即一行显示所占字节数
LCALL PR1
MOV DAT1,#10H ;设置文本显示区域宽度
MOV DAT2,#00H ;即一行显示所占字节数
MOV COM,#41H
LCALL PR1
MOV COM,#0A7H ;光标形状设置
28
LCALL PR12
MOV COM,#80H ;显示方式设置,逻辑“或”合成,使用内部字符
LCALL PR12
MOV COM,#9CH ;显示开关设置,文本开,图形开,光标闪烁及
显示均打开
LCALL PR12
RET
;------------------------读状态字子程序
R_ST: MOV DPTR,#C_ADD ;设置指令通道地址
MOVXA,@DPTR
RET
;-----------------------判断 STA1,STA0子程序,在指令和数据的读写之前这两个标
志位必须同时为 1
ST01: LCALL R_ST
JNBACC.0,ST01
JNBACC.1,ST01
RET
;-----------------------判断 STA2(数据自动读状态)子程序,在连续读过程中每读
一次之前都要确认 STA2=1
ST2: LCALL R_ST
JNBACC.2,ST2
RET
;-----------------------判断 STA3(数据自动写状态)子程序
ST3: LCALL R_ST
JNBACC.3,ST3
RET
;-----------------------写指令和写数据子程序
PR1: LCALL ST01 ;双字节参数指令写入入口
MOVA,DAT1 ;取第一参数
LCALL PR13 ;写入参数
PR11: LCALL ST01 ;1字节参数指令写入入口
MOVA,DAT2 ;取第二参数
LCALL PR13 ;写入参数
PR12: LCALL ST01 ;无参数指令写入入口
MOVA,COM ;取指令代码
LJMP PR14 ;写入指令代码
PR13: MOV DPTR,#D_ADD ;设置数据通道地址/数据写入入口
PR14: MOVX @DPTR,A ;写入操作
RET
;------------------------读数据子程序
PR2: PUSHACC
PUSH DPH
PUSH DPL
LCALL ST01 ;判断状态位
29
MOV DPTR,#D_ADD ;设置数据通道地址
MOVXA,@DPTR ;读数据操作
MOV DAT2,A ;数据存入第二参数/数据的存放地址
POP DPL
POP DPH
POPACC
RET
BIAO: MOV DPTR,#TABDDR
MOV R2,A
RLA
RLA
ADDA,R2
JMP@A+DPTR
TABDDR:MOV DPTR,#DTAB0
SJMP FANHUI
MOV DPTR,#DTAB1
SJMP FANHUI
MOV DPTR,#DTAB2
SJMP FANHUI
MOV DPTR,#DTAB3
SJMP FANHUI
MOV DPTR,#DTAB4
SJMP FANHUI
MOV DPTR,#DTAB5
SJMP FANHUI
MOV DPTR,#DTAB6
SJMP FANHUI
MOV DPTR,#DTAB7
SJMP FANHUI
MOV DPTR,#DTAB8
SJMP FANHUI
MOV DPTR,#DTAB9
SJMP FANHUI
FANHUI:RET
TAB0:
DB
008H,020H,006H,030H,004H,040H,03FH,0F8H,021H,008H,03FH,0F8H,021H,008
H,021H,008H
DB
03FH,0F8H,021H,008H,001H,000H,0FFH,0FEH,001H,000H,001H,000H,001H,000
H,001H,000H;dan
30
DB
008H,040H,00CH,040H,018H,0A0H,011H,010H,032H,018H,064H,00EH,0A9H,01
4H,021H,010H
DB
021H,010H,021H,010H,021H,010H,022H,010H,022H,010H,024H,010H,024H,010
H,028H,010H;jia
TAB01:
DB
001H,0F0H,03FH,000H,001H,000H,0FFH,0FEH,001H,000H,01FH,0F0H,011H,010
H,01FH,0F0H
DB
011H,010H,01FH,0F0H,001H,000H,03FH,0F8H,001H,000H,001H,000H,0FFH,0FE
H,000H,000H;zhong
DB
01FH,0F0H,010H,010H,01FH,0F0H,010H,010H,01FH,0F0H,000H,000H,0FFH,0F
EH,011H,010H
DB
01FH,0F0H,011H,010H,01FH,0F0H,001H,000H,01FH,0F8H,001H,000H,0FFH,0F
EH,000H,000H;liang
TAB02:
DB
008H,040H,00CH,040H,018H,0A0H,011H,010H,032H,018H,064H,00EH,0A9H,01
4H,021H,010H ;价
DB
021H,010H,021H,010H,021H,010H,022H,010H,022H,010H,024H,010H,024H,010
H,028H,010H
DB
020H,0A0H,020H,090H,03CH,090H,020H,0FCH,043H,080H,078H,080H,0A0H,0
BCH,023H,0C0H
DB
0FCH,044H,020H,048H,020H,030H,020H,060H,028H,092H,033H,00AH,020H,006
H,000H,002H;钱
tab:
DB
000H,000H,000H,000H,000H,000H,000H,03EH,044H,044H,038H,040H,03CH,042
H,042H,03CH;g
TAB3:
DB
000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,060H,060
H,000H,000H;小数点
31
TAB03:
DB
000H,000H,000H,018H,024H,042H,042H,042H,042H,042H,042H,042H,024H,018
H,000H,000H;0
TAB04:
DB
000H,000H,01FH,0F8H,000H,000H,000H,000H,000H,000H,07FH,0FEH,004H,040
H,004H,040H
DB
004H,040H,004H,040H,008H,040H,008H,040H,010H,042H,020H,042H,040H,03E
H,000H,000H;元
TAB05:
DB
000H,000H,000H,000H,000H,000H,000H,0E7H,042H,024H,024H,028H,018H,010
H,010H,0E0H;y
DB
000H,000H,001H,002H,002H,004H,004H,008H,008H,010H,010H,020H,020H,040
H,040H,000H;/
DB
000H,000H,000H,000H,000H,000H,000H,03EH,044H,044H,038H,040H,03CH,042
H,042H,03CH;g
DTAB0:
DB
000H,000H,000H,018H,024H,042H,042H,042H,042H,042H,042H,042H,024H,018
H,000H,000H;0
DTAB1:
DB
000H,000H,000H,010H,070H,010H,010H,010H,010H,010H,010H,010H,010H,07C
H,000H,000H;1
DTAB2:
DB
000H,000H,000H,03CH,042H,042H,042H,004H,004H,008H,010H,020H,042H,07E
H,000H,000H;2
DTAB3:
DB
000H,000H,000H,03CH,042H,042H,004H,018H,004H,002H,002H,042H,044H,038
H,000H,000H;3
DTAB4:
DB
000H,000H,000H,004H,00CH,014H,024H,024H,044H,044H,07EH,004H,004H,01E
H,000H,000H;4
32
DTAB5:
DB
000H,000H,000H,07EH,040H,040H,040H,058H,064H,002H,002H,042H,044H,038
H,000H,000H;5
DTAB6:
DB
000H,000H,000H,01CH,024H,040H,040H,058H,064H,042H,042H,042H,024H,018
H,000H,000H;6;
DTAB7:
DB
000H,000H,000H,07EH,044H,044H,008H,008H,010H,010H,010H,010H,010H,010
H,000H,000H;7
DTAB8:
DB
000H,000H,000H,03CH,042H,042H,042H,024H,018H,024H,042H,042H,042H,03C
H,000H,000H;8
DTAB9:
DB
000H,000H,000H,018H,024H,042H,042H,042H,026H,01AH,002H,002H,024H,038
H,000H,000H;9
RET
;///////////////////双字节十六进制转十进制子程序//////////////
CONT2: CLR A
MOV 45H,A ;入口 R1R2
MOV 46H,A ;出口 45H46H47H
MOV 47H,A
MOV R6,#10H
CONT3: CLR C
MOVA,R2
RLCA
MOV R2,A
MOVA,R1
RLCA
MOV R1,A
MOVA,47H
ADDCA,47H
DAA
MOV 47H,A
MOVA,46H
ADDCA,46H
DAA
MOV 46H,A
MOVA,45H
ADDCA,45H
33
DAA
MOV 45H,A
DJNZ R6,CONT3
RET
;////////////////单字节十六进制转化十进制程序///////////
CONT0: CLR A ;入口 R4,出口 4E4FH
MOV 4EH,A
MOV 4FH,A
MOV R7,#10H
CONT1: CLR C
MOVA,R4
RLCA
MOV R4,A
MOVA,4FH
ADDCA,4FH
DAA
MOV 4FH,A
MOVA,4EH
ADDCA,4EH
DAA
MOV 4EH,A
DJNZ R7,CONT1
RE