单片机图形液晶显示实验汇编12864

时间: 2023-10-08 16:12:27 浏览: 97
这里提供一个基于AT89C51单片机的12864液晶屏的汇编代码示例,供参考: ```assembly ;----------------------------------------------------------------------------- ; 12864液晶驱动程序 ;----------------------------------------------------------------------------- ;----------------------------------------------------------------------------- ; 常量定义 ;----------------------------------------------------------------------------- LCD_CS equ P1.0 ; 液晶屏片选 LCD_RS equ P1.1 ; 液晶屏命令/数据选择 LCD_WR equ P1.2 ; 液晶屏写信号 LCD_RD equ P1.3 ; 液晶屏读信号 LCD_RST equ P1.4 ; 液晶屏复位 ;----------------------------------------------------------------------------- ; 常量定义 ;----------------------------------------------------------------------------- DB0 equ P2.0 DB1 equ P2.1 DB2 equ P2.2 DB3 equ P2.3 DB4 equ P2.4 DB5 equ P2.5 DB6 equ P2.6 DB7 equ P2.7 ;----------------------------------------------------------------------------- ; 延时程序 ;----------------------------------------------------------------------------- DelayMs macro cnt mov r7, #cnt djnz r7, $ endm ;----------------------------------------------------------------------------- ; 液晶数据口输出 ;----------------------------------------------------------------------------- LcdDataOut macro dat mov a, dat mov DB0, acc.0 mov DB1, acc.1 mov DB2, acc.2 mov DB3, acc.3 mov DB4, acc.4 mov DB5, acc.5 mov DB6, acc.6 mov DB7, acc.7 endm ;----------------------------------------------------------------------------- ; 液晶芯片写入命令 ;----------------------------------------------------------------------------- LcdWriteCmd macro cmd clr LCD_RS ; 命令模式 LcdDataOut cmd ; 写入命令 clr LCD_WR ; 写入信号有效 nop ; 延时 setb LCD_WR ; 写入信号无效 endm ;----------------------------------------------------------------------------- ; 液晶芯片写入数据 ;----------------------------------------------------------------------------- LcdWriteData macro dat setb LCD_RS ; 数据模式 LcdDataOut dat ; 写入数据 clr LCD_WR ; 写入信号有效 nop ; 延时 setb LCD_WR ; 写入信号无效 endm ;----------------------------------------------------------------------------- ; 液晶芯片读状态 ;----------------------------------------------------------------------------- LcdReadStatus macro mov a, #0xff mov DB0, acc.0 mov DB1, acc.1 mov DB2, acc.2 mov DB3, acc.3 mov DB4, acc.4 mov DB5, acc.5 mov DB6, acc.6 mov DB7, acc.7 clr LCD_RS ; 命令模式 clr LCD_WR ; 写入信号有效 nop ; 延时 setb LCD_WR ; 写入信号无效 clr LCD_RS ; 命令模式 clr LCD_RD ; 读取信号有效 nop ; 延时 mov acc, DB7 setb LCD_RD ; 读取信号无效 endm ;----------------------------------------------------------------------------- ; 初始化液晶屏 ;----------------------------------------------------------------------------- LcdInit proc clr LCD_RST ; 复位信号有效 DelayMs 20 ; 延时20ms setb LCD_RST ; 复位信号无效 DelayMs 20 ; 延时20ms ;----------------------------------------------------------------------------- ; 以下是液晶屏初始化代码 ;----------------------------------------------------------------------------- LcdWriteCmd 0xE2 ; 软复位 DelayMs 20 ; 延时20ms LcdWriteCmd 0x2C ; 打开内部发生器 LcdWriteCmd 0x2E ; 打开显示 LcdWriteCmd 0x2F ; 打开反白显示 LcdWriteCmd 0x23 ; 垂直扫描显示方式 LcdWriteCmd 0x81 ; 设置对比度 LcdWriteCmd 0x18 ; 对比度调整 LcdWriteCmd 0xA4 ; 关闭全局显示 LcdWriteCmd 0x40 ; 设置起始行 LcdWriteCmd 0xB0 ; 设置页地址 LcdWriteCmd 0xAF ; 打开显示 ;----------------------------------------------------------------------------- ; 以上是液晶屏初始化代码 ;----------------------------------------------------------------------------- ret LcdInit endp ;----------------------------------------------------------------------------- ; 清屏 ;----------------------------------------------------------------------------- LcdClear proc mov r0, #0 LcdWriteCmd 0xB0 ; 第0页 LcdWriteCmd 0x10 ; 高4位 LcdWriteCmd 0x00 ; 低4位 LcdWriteCmd 0x5F ; 一行显示宽度 LcdWriteCmd 0xB0 ; 第0页 LcdWriteCmd 0x00 ; 高4位 LcdWriteCmd 0x00 ; 低4位 LcdClear loop: LcdWriteData r0 inc r0 djnz r0, loop ret LcdClear endp ;----------------------------------------------------------------------------- ; 显示字符 ;----------------------------------------------------------------------------- LcdShowChar proc x, y, ch mov a, y add a, #0xB0 LcdWriteCmd a ; 设置页地址 mov a, x add a, #0x10 mov c, a.4 anl a, #0x0F orl a, c LcdWriteCmd a ; 设置列地址 LcdWriteData ch ret LcdShowChar endp ;----------------------------------------------------------------------------- ; 显示字符串 ;----------------------------------------------------------------------------- LcdShowStr proc x, y, str mov r0, x mov r1, y LcdShowStr loop: mov a, @r2 jz LcdShowStrEnd push acc call LcdShowChar inc r0 pop acc djnz r2, loop LcdShowStrEnd: ret LcdShowStr endp ;----------------------------------------------------------------------------- ; 主程序 ;----------------------------------------------------------------------------- org 0x0000 ljmp Main Main: ;----------------------------------------------------------------------------- ; 初始化液晶屏 ;----------------------------------------------------------------------------- mov SP, #0xFF call LcdInit ;----------------------------------------------------------------------------- ; 显示测试字符 ;----------------------------------------------------------------------------- call LcdClear mov r0, #0x10 mov r1, #0 mov dptr, #TestStr call LcdShowStr ;----------------------------------------------------------------------------- ; 循环等待 ;----------------------------------------------------------------------------- MainLoop: sjmp MainLoop ;----------------------------------------------------------------------------- ; 字符串 ;----------------------------------------------------------------------------- TestStr: db "Hello, World!", 0 end ``` 该程序使用了AT89C51单片机和12864液晶屏幕,实现了清屏和显示字符串的功能。程序中的LcdInit过程是初始化液晶屏的代码,LcdClear过程是清屏的代码,LcdShowChar过程是显示单个字符的代码,LcdShowStr过程是显示字符串的代码。可以根据需要修改这些过程来实现不同的功能。

相关推荐

最新推荐

recommend-type

基于AT89S52单片机的LCD12864液晶显示模块设计

本文介绍以AT89S52单片机为控制核心,利用四位按键输入,以LCD12864液晶作为屏幕的显示模块。该模块硬件结构结单、功能齐全,工作稳定,可完成目前绝大部分设备的显示工作。
recommend-type

基于51单片机的12864液晶显示C语言源程序

用51单片机实现12864液晶显示 的 C语言源程序。并附有12864液晶电路图.
recommend-type

51单片机交通灯设计(汇编语言)

PDF报告里含有汇编代码和proteus仿真图,中断实验,参照实验电路,设计交通灯控制系统。模拟交通信号灯控制:一般情况下正常显示,东西-南北交替放行,各方向通行时间为 30 秒。有救护车或警车到达时,两个方向交通...
recommend-type

51单片机驱动16×16LED点阵显示动画汉字汇编程序

这里提供一个完整的AT89S51单片机驱动驱动led点阵显示具有动画效果的汉字的汇编程序列子。
recommend-type

51单片机驱动步进电机(汇编语言)

在这里介绍一下用51单片机驱动步进电机的方法。这款步进电机的驱动电压12V,步进角为 7.5度 . 一圈 360 度 , 需要 48 个脉冲完成。
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB柱状图在信号处理中的应用:可视化信号特征和频谱分析

![matlab画柱状图](https://img-blog.csdnimg.cn/3f32348f1c9c4481a6f5931993732f97.png) # 1. MATLAB柱状图概述** MATLAB柱状图是一种图形化工具,用于可视化数据中不同类别或组的分布情况。它通过绘制垂直条形来表示每个类别或组中的数据值。柱状图在信号处理中广泛用于可视化信号特征和进行频谱分析。 柱状图的优点在于其简单易懂,能够直观地展示数据分布。在信号处理中,柱状图可以帮助工程师识别信号中的模式、趋势和异常情况,从而为信号分析和处理提供有价值的见解。 # 2. 柱状图在信号处理中的应用 柱状图在信号处理
recommend-type

get() { return this.photoState },

这是一个 JavaScript 中的方法定义,它定义了一个名为 `get` 的方法。这个方法没有参数,它返回了 `this.photoState`。在这个方法中,`this` 是指当前对象,而 `photoState` 是该对象的一个属性。通常情况下,`get` 方法用于获取对象的属性值,并且可以在获取属性值之前进行一些逻辑操作。
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。