单片机外围存储及LCD12864

合集下载

基于51单片机的LCD12864程序设计

基于51单片机的LCD12864程序设计

意的是 , 专 项规 划 的推 广不 是 漫无 目的 地 发布 , 而 是针 对 极采 用 大 数据 技 术 ,能够 提 高信 息咨 询 服 务 的 水 平 和 质 促 进 数 字资 源 的 有效 利 用 , 避 免 问题 产 生 不 必要 的复 性 地 普及 , 针对 特 定 群体 , 针 对特 定 对 象 , 推 广特 定 信 息 , 量, 杂性 ,避 免 信息 数据 不 能及 时反 馈和 及 时 Ⅱ 向 应 的 问题 , 为 以达 到信 息管理 知 识 的高度 普及 、 信 息 管理 规划 的高度推 促 进 了图书馆 信 息 管理 水平 的 广、 大数据 技 术 的充分 利用 。 大力推 广 图书馆 行 业信 息 管 图 书馆 减 少 了大量 的损 失 , 提 高。 理 专 项计 划 , 可 以 帮助 图 书馆 建 立完 善 的服 务 系统 , 节 省 大 数据 技 术 的应用 过程 是 复杂 的 , 不是 瞬 息之 间 的事 大 量 的人 力物 力 , 避 免 了许 多 不必 要 的流 程 与 负担 , 减 少 情 , 而是 需 要 对 大数 据概 念 有 一 个 清 晰 的 了解 , 充 分发 挥 失误 风 险 , 提 高 了 互联 网的 应 用 , 提 高 了数据 分析 与 资 源 大数据 技 术 的优 势 和特 点 。在 大 数据技 术 的应 用 过程 中 , 共享 , 提 高 了珍贵资 源 资料 的可用 性和价 值 。 定 要 保持 敏 锐 的 嗅 觉 ,对 及 时 出现 的 问题 及 时 反馈 解 5 各 类 图书 馆大数 据技 术推 广和 应用 体 系 对 适 时 出现 的 良性 效 果持 续保 持 , 以优 势促 发 展 , 以 良 要 想提高 大数据 技 术对 图书馆 信 息管 理 的效 力 , 就 必 决 , 性促 进步 ,以 图书馆 信 息管理 水 平 的不 断提 高 为 目标 , 以 须构 建 完善 的 图书馆 大 数据 技术 推 广和 应用体 系 , 政 府 主 大数 据技 术 的应 用 为 方法 , 促 进 新 时代 图书馆 信 息 管理 不 管部 门或行 业协 会 有 必要 召集 国 家图 书馆 以及相 关专 家 , 断 走 向高 质 、 高效 , 为新 时 代 的科 研 发 展 奠定 坚 实 的知 识 针 对 大 数据 管理 制定 图书馆 行 业 大 数据 技 术 推 广 应 用 的 储 备和 价 值 资 源 , 促 进社 会 的 良性发 展 , 促 进 知 识 社 会 的 专项规划 , 并 根据 国 家相 关政 策 和具 体 执 行 流程 , 统 筹 协 不 断腾 飞 ! 调 各 个部 门和 各 个行 业 ,并对 此项 工程 进 行专 项把 控 , 重 参考文献 : 点 关注 , 有效把 控 咨询 、 政 策执 行推 进 、 工作 指 导等相 关 事 …文彦, 武瑞原 , 于洁. 大数据 时代 的图书馆 初探 【 J 】 . 图书与 情 宜 。不 仅 要 制定 大 数据 应 用 于 图 书馆 信 息 管理 的统 一 标 报 , 2 0 1 2 ( 6 ) : 1 5 - 2 1 . 准, 还 需 要 制定 相 应 的激 励 政 策 , 并做 出相 应 的 制度 性 安 【 2 】 韩翠 凤. 大 数据 带 给 图书馆 的影响 与挑 战 【 J 】 _ 图书 与情 报 ,

LCD12864引脚图及功能

LCD12864引脚图及功能

LCD12864引脚图及功能在我们常用的人机交互显示界面中,除了数码管、LED,有一种12864液晶屏用的比较多。

顾名思义,12864表示其横向可以显示128个点,纵向可以显示64个点。

我们常用的12864液晶模块中有带字库的,也有不带字库的,其控制芯片也有很多种,如KS0108、T6963C,ST7920等等。

本产品是以ST7920为主控芯片的12864液晶屏的一种。

1.lcd12864基本资料常见的12864LCD使用的控制芯片是ST7920。

ST7920一般和ST7921(列驱动芯片)配合使用,做成显示2行每行16个汉字的显示屏25632LCD,或者是做成4行每行8个汉字的显示屏12864LCD 。

12864液晶模块中有带字库可以显示字母、数字符号、中文字型及图形,具有绘图及文字画面混合显示功能。

提供三种控制接口,分别是8 位微处理器接口,4 位微处理器接口及串行接口。

所有的功能,包含显示RAM,字型产生器,都包含在一个芯片里面,只要一个最小的微处理系统,就可以方便操作模块。

内置2M-位中文字型ROM (CGROM)总共提供8192 个中文字型(16x16 点阵),16K-位半宽字型ROM (HCGROM)总共提供126 个符号字型(16x8 点阵),64 x 16-位字型产生RAM (CGRAM),另外绘图显示画面提供一个64x256 点的绘图区域(GDRAM),可以和文字画面混和显示。

提供多功能指令:画面清除(Display clear)、光标归位(Return home)、显示打开/关闭(Display on/off)、光标显示/隐藏(Cursor on/off)、显示字符闪烁(Display character blink)、光标移位(Cursor shift)显示移位(Display shift)、垂直画面旋转(Vertical line scroll)、反白显示(By_line reverse display)、待命模式(Standby mode)。

LCD12864液晶显示器C51单片机子程序

LCD12864液晶显示器C51单片机子程序

#include <reg52.h>#ifndef __LCD12864_H__#define __LCD12864_H__#include <intrins.h>#define uchar unsigned char#define uint unsigned int/*端口定义*/#define LCD_data P0 //数据口sbit LCD_RS = P2^7; //寄存器选择输入sbit LCD_RW = P2^6; //液晶读/写控制sbit LCD_EN = P2^5; //液晶使能控制sbit LCD_PSB = P1^4; //串/并方式控制#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};/* 延时函数*/void delay1(int ms){while(ms--){uchar i;for(i=0;i<250;i++){_nop_();_nop_();_nop_();_nop_();}}}/*检查LCD忙状态*/ /*lcd_busy为1时,忙,等待。

lcd-busy为0时,闲,可写指令与数据。

*/ bit lcd_busy(){bit result;LCD_RS = 0;LCD_RW = 1;LCD_EN = 1;delayNOP();result = (bit)(P0&0x80);LCD_EN = 0;return(result);/*写指令到LCD */ /*RS=L,RW=L,E=高脉冲,D0-D7=指令码。

*/ void lcd_wcmd(uchar cmd){//while(lcd_busy());LCD_RS = 0;LCD_RW = 0;LCD_EN = 0;_nop_();_nop_();P0 = cmd;delayNOP();LCD_EN = 1;delayNOP();LCD_EN = 0;}/*写数据到LCD */ /*RS=H,RW=L,E=高脉冲,D0-D7=数据。

LCD12864原理与应用

LCD12864原理与应用

LCD12864原理与应用1、LCD12864简介:LCD12864分为两种,带字库的和不带字库的,不带字库的液晶显示汉字的时候可以选择自己喜欢的字体。

而带字库的液晶,只能显示GB2312字体,当然也可以显示其他的字体,不过是用图片的形式显示。

下面介绍不带字库的LCD12864,以Proteus中的AMPIRE128×64为例,如下图所示,它的液晶驱动器为KS0108。

引脚功能:引脚符号状态引脚名称功能,输入芯片片选端,都是低电平有效CS1=0开左屏幕,CS1=1关左屏幕CS2=0开右屏幕,CS2=1关右屏幕RS输入数据/命令选择信号RS=1为数据操作,RS=0为写指令或读状态RW输入读写选择信号R/W=1为读选通,R/W=0为写选通E输入读写使能信号在E下降沿,数据被锁存(写)入液晶,在E高电平期间,数据被读出DB0—DB7三态数据总线数据或指令的传送通道输入复位信号,低电平时复位复位时,关闭液晶显示,使显示起始行为0,可以跟单片机的复位引脚RST相连,也可以直接接VCC,使之不起作用V0液晶显示器驱动电压-Vout-10V LCD驱动负电压与带字库的液晶不同,此块液晶含有两个液晶驱动器,每块驱动器都控制64*64个点,分为左右两个屏幕显示,总共为128*64个点(即有128×64个点)。

这就是为什么AMPIRE128*64有CS1和CS2两个片选端的原因。

此液晶有8页,一页有8行点阵点,左右各64列,共128列。

如下图所示:2、LCD12864中的几条重要指令(一)行(line)设置命令:由此可见显示的起始行地址为0XC0,共64行,有规律地改变起始行号,可以实现滚屏效果。

(二)页(page)设置指令:起始页地址为0XB8,因为液晶有64行点,分为8页,每页就有8行点。

(三)列(column)地址设置指令每块驱动器的列地址都是从0X40到0X7F,共64列,所以此液晶共有128列点。

单片机与LCD12864之间的串口通讯

单片机与LCD12864之间的串口通讯
}
return ((0xf0&temp1)+(0x0f&temp2));
}
/**************************************************************
*函数名称:CheckbuBiblioteka y()*函数功能:液晶检测忙
*入口参数:无
*出口参数:无
**************************************************************/
*函数功能:光标定位x行y列
*入口参数:X,Y x行y列
*出口参数:无
**************************************************************/
void Locate_x_y(uchar x,uchar y)
{
uchar addr=0x80;
Writecommand(0x80);
*函数名称:Writecommand()
*函数功能:发送的是控制指令(数据从LCD到MCU)
*入口参数:data要写入的命令
*出口参数:无
**************************************************************/
void Writecommand(uchar data)
void Write_string(uchar *s); //函数功能:写入中文串
void Display_x_y_symbol(uchar x,uchar y,uint data);
//函数功能:以字码的形式录
void Display_x_y_data(uchar x,uchar y,uchar *data);

51单片机综合学习系统之12864点阵型液晶显示篇

51单片机综合学习系统之12864点阵型液晶显示篇

51单片机综合学习系统之 12864点阵型液晶显示篇大家好,通过以前的学习,我们已经对51单片机综合学习系统的使用方法及学习方式有所了解与熟悉,学会了1602字符型液晶显示的基本知识,体会到了综合学习系统的易用性与易学性,这一期我们将一起学习12864点阵型液晶显示屏的基本原理与使用方法。

点阵LCD的显示原理在数字电路中,所有的数据都是以0和1保存的,对LCD控制器进行不同的数据操作,可以得到不同的结果。

对于显示英文操作,因为英文字母种类很少,只需要8位<一字节)即可。

而对于中文,常用却有6000以上,于是我们的DOS前辈想了一个办法,就是将ASCII表的高128个很少用到的数值以两个为一组来表示汉字,即汉字的内码。

而剩下的低128位则留给英文字符使用,即英文的内码。

那么,得到了汉字的内码后,还仅是一组数字,那又如何在屏幕上去显示呢?这就涉及到文字的字模,字模虽然也是一组数字,但它的意义却与数字的意义有了根本的变化,它是用数字的各位信息来记载英文或汉字的形状,如英文的'A'在字模的记载方式如图1所示:图1 “A”字模图而中文的“你”在字模中的记载却如图2所示:图2 “你”字模图12864点阵型LCD简介12864是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及128×64全点阵液晶显示器组成。

可完成图形显示,也可以显示8×4个(16×16点阵>汉字。

管脚号管脚名称LEVER 管脚功能描述1 VSS 0 电源地2 VDD +5.0V 电源电压3 V0 - 液晶显示器驱动电压4 D/I(RS> H/L D/I=“H”,表示DB7∽DB0为显示数据D/I=“L”,表示DB7∽DB0为显示指令数据5 R/W H/L R/W=“H”,E=“H”数据被读到DB7∽DB0R/W=“L”,E=“H→L”数据被写到IR或DR6 E H/L R/W=“L”,E信号下降沿锁存DB7∽DB0R/W=“H”,E=“H”DDRAM数据读到DB7∽DB07 DB0 H/L 数据线8 DB1 H/L 数据线9 DB2 H/L 数据线10 DB3 H/L 数据线11 DB4 H/L 数据线12 DB5 H/L 数据线13 DB6 H/L 数据线14 DB7 H/L 数据线15 CS1 H/L H:选择芯片(右半屏>信号16 CS2 H/L H:选择芯片(左半屏>信号17 RET H/L 复位信号,低电平复位18 VOUT -10V LCD驱动负电压19 LED+ - LED背光板电源20 LED- - LED背光板电源表1:12864LCD的引脚说明在使用12864LCD前先必须了解以下功能器件才能进行编程。

51单片机12864LCD显示..

51单片机12864LCD显示..
指令码
指令 R S 0 0 R W 0 0 D B 7 0 0 D B 6 0 0 D B 5 0 0 D B 4 0 0 D B 3 0 0 D B 2 0 0 D B 1 0 1 I / D C D B 0 1 X 说明 执行时间
清除显示 地址归位
将DDRAM填满“20H”,并且设定DDRAM的地址计数器(AC)到“00H” 设定DDRAM的地址计数器(AC)到“00H”,并且将游标移到开头原点位置;这个指令 并不改变DDRAM的内容
★段式液晶 ★字符图形式液晶。
本章重点:
★ 掌握12864串行和并行模式读写时序 ★ 掌握串行和并行模式的数据传输方法 ★ 理解12864显示汉字原理 ★ 理解12864显示图片原理
12.1 12864概述
我们学习是采用的LCD为STN类,像素为128*64黑白字符图形式 12864液晶屏。买LCD的时候会配带相应的驱动控制器,虽然对应的驱动 控制其型号很多,不过使用方法大同小异。12864有带字库的和不带字库 两种,不带字库的需要自己用专用软件取模,现在市面上常用的驱动控 制器都带字库。JHD529M1是一个128*64的LCD驱动控制器,可显示汉 字及图形。内置8192个中文汉字CGROM(16*16)、128个字符(ASCII 码)HCGROM(8*16)及128*64点阵显示RAM(GDRAM)。 12.1.1基本特征 低电源电压4.5-5.5V,2MHZ时钟频率,通讯方式为串并行可选,工 作温度为0-55度。 12.1.2显示内容 可以构成全中文人机互交图形界面。可以显示8*4行16*16点阵汉字, 也可以完成图形显示。并且可以实现光标显示,画面移动,自定义字符、 睡眠模式。 12.1.3通信接口 并行:8位数据线DB0-DB7、3位控制线RS,R/W,E 串行:I2C接口CS,SCLK,SDA

AVR单片机(ATmega16)驱动LCD12864显示中文实例

AVR单片机(ATmega16)驱动LCD12864显示中文实例

AVR单片机驱动LCD12864显示中文字符实例JCS居士,2019年09月21日一、说明:总的来说,Proteus软件中能够仿真的图形LCD驱动器分成三类。

1.Toshiba T6963C Controller,主要有以下型号: LM3228、LM3229、LM3267、LM3283、LM3287、LM4228、LM4265、LM4267、LM4283、LM4287、PG12864F、PG24064F、PG128128A、PG160128A。

2.Sharp SED1520 Controller,主要有以下型号:AGM1232G、EW12A03GLY、HDM32GS12-B、HDM32GS12Y-B。

3.Sharp SED1565Controller,主要有以下型号:HDG12864F-1、HDS12864F-3、HDG12864L-4、HDG12864L-6、NOKIA7110、TG126410GFSB、TG13650FEY4.Samsung KS0108Controller,主要有以下型号:AMPIRE128x64、LGM12641BS1R。

注意:大家比较关心的ST7920驱动器Proteus里面是没有的,不要再费尽心思下载什么带中文字库的LCD模型,导入Proteus,费时费力不讨好!采用LM3328是一款内置T6963C驱动器的图形液晶显示器,显示范围为128*64,单色。

采用Atmega16单片机,用C语言实现中文显示,是一件特别简单的事情,全部C语言代码仅30余行。

接线及Proteus仿真图、程序均在下文中给出。

二、Proteu软件仿真截图:三、C语言程序代码:/*Chip type : ATmega16Program type : ApplicationAVR Core Clock frequency: 8.000000 MHzMemory model : SmallExternal RAM size : 0Data Stack size : 256*/#include <mega16.h>// Graphic Display functions#include <glcd.h>extern flash unsigned char HZ16X16[]; extern flash unsigned char EN8X16[];// Font used for displaying text// on the graphic display#include <font5x7.h>unsigned char i=0;void main(void){// Variable used to store graphic display// controller initialization dataGLCDINIT_t glcd_init_data;// Graphic Display Controller initialization // The T6963 connections are specified in the// Project|Configure|C Compiler|Libraries|Graphic Display menu: // DB0 - PORTA Bit 0// DB1 - PORTA Bit 1// DB2 - PORTA Bit 2// DB3 - PORTA Bit 3// DB4 - PORTA Bit 4// DB5 - PORTA Bit 5// DB6 - PORTA Bit 6// DB7 - PORTA Bit 7// C /D - PORTB Bit 0// /CE - PORTB Bit 1// /RD - PORTB Bit 2// /WR - PORTB Bit 3// /RESET - PORTB Bit 4// Specify the current font for displaying textglcd_init_data.font=font5x7;// No function is used for reading// image data from external memoryglcd_init_data.readxmem=NULL;// No function is used for writing// image data to external memoryglcd_init_data.writexmem=NULL;glcd_init(&glcd_init_data);glcd_settextjustify(0,0);while(1){glcd_setfont(HZ16X16);glcd_moveto(8,0);for(i=128;i<128+7;i++)glcd_putchar(i);glcd_moveto(8,16);for(i=128+7;i<128+14;i++) glcd_putchar(i);glcd_moveto(8,32);for(i=128+14;i<128+21;i++) glcd_putchar(i);glcd_moveto(8,48);for(i=128+21;i<128+28;i++) glcd_putchar(i);glcd_setfont(EN8X16);glcd_putcharxy(0, 0,'A');glcd_putcharxy(0,16,'b'); glcd_putcharxy(0,32,'C'); glcd_putcharxy(0,48,'d'); glcd_putcharxy(120, 0,'1'); glcd_putcharxy(120,16,'2'); glcd_putcharxy(120,32,'3'); glcd_putcharxy(120,48,'4'); }}。

LCD12864液晶显示器C51单片机子程序

LCD12864液晶显示器C51单片机子程序

#include <reg52.h>#ifndef __LCD12864_H__#define __LCD12864_H__#include <intrins.h>#define uchar unsigned char#define uint unsigned int/*端口定义*/#define LCD_data P0 //数据口sbit LCD_RS = P2^7; //寄存器选择输入sbit LCD_RW = P2^6; //液晶读/写控制sbit LCD_EN = P2^5; //液晶使能控制sbit LCD_PSB = P1^4; //串/并方式控制#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};/* 延时函数*/void delay1(int ms){while(ms--){uchar i;for(i=0;i<250;i++){_nop_();_nop_();_nop_();_nop_();}}}/*检查LCD忙状态*/ /*lcd_busy为1时,忙,等待。

lcd-busy为0时,闲,可写指令与数据。

*/ bit lcd_busy(){bit result;LCD_RS = 0;LCD_RW = 1;LCD_EN = 1;delayNOP();result = (bit)(P0&0x80);LCD_EN = 0;return(result);/*写指令到LCD */ /*RS=L,RW=L,E=高脉冲,D0-D7=指令码。

*/ void lcd_wcmd(uchar cmd){//while(lcd_busy());LCD_RS = 0;LCD_RW = 0;LCD_EN = 0;_nop_();_nop_();P0 = cmd;delayNOP();LCD_EN = 1;delayNOP();LCD_EN = 0;}/*写数据到LCD */ /*RS=H,RW=L,E=高脉冲,D0-D7=数据。

LCD12864(概念)

LCD12864(概念)

LCD12864(控制芯片ST7920)128×64点阵液晶显示屏有三种控制器,分别是KS0107(KS0108)、T6963C和ST7920,三种控制器主要区别是:KS0107(KS0108)不带任何字库、T6963C带ASCII码,ST7920带国标二级字库(8千多个汉字)。

如果控制芯片为st7920。

带字库。

通讯方式:串行、并口可选;无需片选信号。

以下是需要了解的LCD12864液晶的概念:做液晶显示时DDRAM,CGROM,CGRAM,GDRAM的概念。

1、DDRAM是与显示屏对应的,DDRAM的容量比显示屏大很多,在做滚动屏或者翻页,页面切换时是有用的!!可以先把数据写到RAM里,一个命令切换就OK了。

2、CGROM是内部字符发生器。

存了一些预先设好的点阵。

当我们再DDRAM中输入某字符的代码时,它会自动显示其中的字符信息。

3、CGRAM用来给用户可以自定义所需的文字或符号,应该是写到RAM里就跟CGROM 一样用了。

CGRAM是用户自建字模区,有时ascii码表不能满足个人对字符的要求,则需要在这里写入字模。

字模的方式和CGRAM中的一样。

4、绘图RAM(GDRAM)绘图显示RAM 提供64×32 个位元组的记忆空间,最多可以控制256×64 点的二维绘图缓冲空间,在更改绘图RAM 时,先连续写入水平(0x80~0x87)与垂直(0x80~0x9f)的坐标值,再写入两个8 位元的资料到绘图RAM,而地址计数器(AC)会自动加一;在写入绘图RAM 的期间,绘图显示必须关闭,整个写入绘图RAM 的步骤如下:1、关闭绘图显示功能。

2、先将垂直的坐标(Y)写入绘图RAM 地址;3、再将水平的位元组坐标(X)写入绘图RAM 地址;4、将D15——D8 写入到RAM 中;5、将D7——D0 写入到RAM 中;6、打开绘图显示功能。

基于51单片机的LCD12864程序设计

基于51单片机的LCD12864程序设计

基于51单片机的LCD12864程序设计作者:张玲玲来源:《中小企业管理与科技·上中下旬刊》 2015年第5期张玲玲(郴州职业技术学院电子信息工程专业)摘要液晶显示器分为段位式LCD、字符式LCD 和点阵式LCD,具有机身薄,节省空间,省电,不产生高温,低辐射,益健康,画面柔和不伤眼等诸多优点,已经广泛的应用于各个领域。

本文通过51 单片机控制系统控制点阵式LCD12864 显示来介绍LCD12864 的工作原理及LCD12864 的驱动程序设计编写方法。

关键词 51 单片机 LCD12864 程序设计0 引言液晶显示器根据显示方式可分为:段位式、字符式和点阵式LCD,其中段位式与字符式只能显示数字与字符。

而点阵式LCD 不仅能显示数字与字符,还能显示各种图形、曲线及汉字等。

本文研究的TG12864B是能显示曲线、图形及汉字的点阵式LCD。

1 TG12864 介绍TG12864 是一款无字库的图形点阵显示器,其屏幕由64 行×128 列点阵组成,可以显示16 点阵的4 行×8列(32 个)汉字、8 点阵的8 行×8 列(64 个)字母和128×64 全屏幕点阵图形。

1.1 TG12864B 内部功能器件介绍在使用TG12864B 前须了解其相关功能器件,如下所示:①指令寄存器(IR):用于寄存指令码。

②数据寄存器(DR):用于寄存数据的。

DR 和显示数据存储器DDRAM(见表1)之间的数据传输是模块内部自动执行的。

③显示数据RAM (DDRAM):DDRAM 是存储图形显示数据的。

数据为1 表示显示选择,数据为0 表示显示非选择。

DDRAM 与地址和显示位置的关系见DDRAM 地址表。

④XY 地址计数器。

XY 地址计数器是一个9 位计数器。

高3位是X 地址计数器,低6 位为Y 地址计数器,XY 地址计数器实际上是作为DDRAM 的地址指针,X 地址计数器为DDRAM 的页指针,Y 地址计数器为DDRAM 的Y 地址指针。

51单片机控制LCD12864液晶屏显示图形菜单

51单片机控制LCD12864液晶屏显示图形菜单

51单片机控制LCD12864液晶屏显示图形菜单想了很久,每次做菜单都受限于12864字符模式的各种限制,比如字体大小,不能显示图标等等,没有任何效果,这次就来个彻底的解脱,写一个单函数就能完成所有功能的函数,只需要2个图片就能完成任意菜单内容的菜单,可以有2的8次方=256个选择结果,应该能满足所有的要求了吧?菜单的内容就是图片的内容,因此可以显示任意大小的图形文字混合的菜单条目,比如使用字符模式,一屏只能显示4行菜单(64/16=4),且只能显示汉字和字符等,显示位置等等的都受限,而这个方法可以显示比如12*12(64/12=5行)的字符,8*8(64/8=8行)的字符,甚至不是字符,可以是图标+文字+任意其他的图像,只要是图片能显示的,都可以。

哈哈,比较复杂,现在只写了一少半,预期能够提供多种显示效果,希望我能完成。

void Lcd_Draw_BmpMenu(UINT8 *pMenu,UINT8*pTitleBmp,UINT8 *pMenuBmp){/*使用2张图片作为纯图形菜单来选择和操作,返回被选择的项,pMenu是一个指向菜单的各种参数的结构体的指针,pTitleBmp指向作为菜单标题的一张图片,pMenuBmp指向作为菜单内容的图片(液晶的控制芯片是ST7920)yx-->;>;|\|/*/xdata struct { //除非另有说明x坐标均为大列的坐标,一个大列是16个像素,一行共有8大列数据//========= 以下是入参基本参数,一旦确定,最好不要随意更改 ======UINT8 Title_x;//标题图片在屏幕上的显示起始位置X UINT8 Title_y;//标题图片在屏幕上的显示起始位置Y UINT8 Title_Len_x;//标题图片的宽UINT8 Title_Len_y;//标题图片的高UINT8 Menu_x;//菜单在屏幕上的显示起始位置XUINT8 Menu_y;//菜单在屏幕上的显示起始位置YUINT8 Menu_End_y;//菜单在屏幕上的显示结束位置Y UINT8 Menu_Bmp_x;//菜单图片的宽UINT8 Menu_Bmp_y;//菜单图片的高UINT8 Menu_Item_Height;//每一菜单项的高度(像素为单位)UINT8 Line_x;//最后下划线的起始坐标xUINT8 Line_y;//最后下划线的起始坐标YUINT8 Line_Len;//最后下划线的长度,如果为0,则表示不画出这条线(像素为单位)//====== 以下是菜单的风格设置 ========UINT8 Scroll_Speed;//菜单滚动的速度,0~9个级别,越低越快,越高越慢(液晶屏显示速度有快有慢,调整这个参数用于适用不同的液晶屏UINT8 Continue_Scroll;//指定菜单是否可以形成一个连续滚动选择的效果;0不连续,背景和反白位置都会根据实际情况滚动 1菜单连续滚动,反白位置不动UINT8 RePaint;//=0不重画菜单,=1重画整个菜单的图像,一般都是首次调用本函数的时候置1,用于画出整个菜单,以后调用置0就可以了UINT8 MenuEffect;//菜单运动的效果;0没有任何效果,只是最普通的菜单形态,1平滑滚动,2平滑滚动,具有惯性效果,3具有减速效果,没有惯性效果,4具有减速和惯性效果//====== 以下用于控制菜单的选择参数 =======UINT8 Last_Select_Item;//上次执行本函数后,所选择的菜单项UINT8 Select_Item;//本次执行本函数,要选择的菜单项}M;//============== 以下是变量定义 =============== UINT8 xdata Menu_Item_Count;//总共有几个菜单项UINT8 xdata Menu_Screen_Count;//当前一屏最多可以显示几个菜单项UINT8 xdataMenu_Box_x,Menu_Box_y,Menu_Box_End_x,Menu_Box_End _y;//需要刷新的区域的坐标UINT8 *pMenu_Box_Bmp;//需要显示的菜单项的指针StructCopy(&M.Title_x,pMenu,19);//把参数复制到本函数内,便于操作Menu_Item_Count=M.Menu_Bmp_y/M.Menu_Item_Height;/ /总共有几个菜单项Menu_Screen_Count=(M.Menu_End_y-M.Menu_y)/M.Menu_ Item_Height;//一屏最多可以显示多少项菜单//---------------------------------------------------------------------------if(M.RePaint==1)//如果需要重画整个菜单图像{Lcd_Draw_BMP(M.Title_x,M.Title_y,M.Title_x+M.Title_Len_x,M.Title_y+M.Title_Len_y,pTitleBmp);//画出标题的图片if(M.Line_Len!=0)Lcd_DrawRowLine(M.Line_x,M.Line_y,M.Line_Len,1);/ /画出最下面的线}//---------------------------------------------------------------------------//-----------需要刷新的图像的区域Menu_Box_x=M.Menu_x;Menu_Box_y=M.Menu_y;Menu_Box_End_x=M.Menu_x+M.Menu_Bmp_x;Menu_Box_End_y=M.Menu_End_y;。

单片机控制12864液晶的应用

单片机控制12864液晶的应用

单片机控制12864液晶的应用1. 液晶控制电路和方案 (5)1.1相关硬件和软件介绍 (5)1.1.1 STC89C52 (5)1.1.2 带字库的12864液晶 (5)1.1.3 不带字库的12864液晶 (7)1.1.4 取模软件 (8)1.2液晶显示控制设计电路 (8)1.2.1系统的总体设计思路和框图 (9)1.2.2系统方案选择 (10)1.2.3系统功能图和流程图 (11)1.2.4系统电路原理图 (13)2. 程序的设计和调试 (15)2.1带字库的12864指令 (15)2.2不带字库的12864指令 (19)2.3程序调试 (21)2.3.1工程的建立和程序编译 (21)2.3.2硬件调试 (23)3. 液晶设计结果显示 (23)3.1带字库液晶显示结果 (23)3.2不带字库液晶显示结果 (23)4. 设计总结 (24)4.1设计中遇到的问题 (24)4.2设计心得 (25)5. 参考文献 (26)附录 (26)附录1:带字库12864程序源代码 (26)附录2:不带字库12864程序源代码 (44)单片机控制12864液晶的应用摘要:汉字的使用很广泛,显示汉字始终是计算机在我国应用普及的一个障碍。

随着单片机和显示技术的发展,加上人们不满足单片机系统采用LED数码管的简单显示,利用单片机控制液晶显示成为当前显示系统的主流。

本文主要介绍了89C51单片机为控制设备,12864液晶显示器为显示设备。

实现的一个可以显示汉字、字符和动态显示汉字的液晶显示器设备。

通过按键控制可以实现显示的汉字显示和左右移动。

利用液晶显示器显示汉字操作灵活,汉字显示果可以大大提高。

Abstact:The use of Chinese charactersis very wide,display Chinese characters is always an obstacle in the popularization of computer application in our country.With the development of MCU and display technology,and people don't satisfy SCM system using simple LED digital display tube,control the use of single-chip LCD display system now become the main stream.This paper mainly introduces the 89C51 microcontroller as the control equipment, 12864LCD as display equipment.An implementation can display Chinese characters,characters and dynamic displayof liquid crystal display Chinese characters.Through the button control can display the Chinese characters display and move e LCD display Chinese characters of flexible operation,display of Chinesecharacters can be greatly improved.1.液晶控制电路和方案1.1相关硬件和软件介绍1.1.1 STC89C5289C52内置8位中央处理单元、256字节内部数据存储器RAM、8k片内程序存储器(ROM)32个双向输入/输出(I/O)口、3个16位定时/计数器和5个两级中断结构,一个全双工串行通信口,片内时钟振荡电路。

94单片机示波器--12864

94单片机示波器--12864

94单片机示波器–12864简介本文档介绍了使用94单片机和12864液晶屏制作示波器的方法。

示波器是一种用于查看电信号波形的仪器,它可以帮助我们理解电路的工作原理以及检测电路中的故障。

在本项目中,我们将使用94单片机和12864液晶屏来制作一个简易的示波器。

通过采集输入信号并在液晶屏上显示波形,我们可以实时观察信号的变化,并进行分析。

所需材料在开始之前,我们需要准备以下材料:•94单片机开发板•12864液晶屏•面包板和跳线•电阻、电容等元件(根据电路设计需要)硬件连接首先,我们需要将94单片机开发板和12864液晶屏进行连接。

具体的连接方式可以参考开发板和液晶屏的产品手册。

一般来说,我们需要将94单片机的引脚通过跳线连接到液晶屏的引脚上。

连接的方式可能包括并行连接、串行连接等方式,具体使用哪种连接方式可以根据液晶屏的型号进行选择。

连接完成后,我们可以将94单片机开发板上的程序下载到开发板上,并进行相应的设置。

软件设计接下来,我们需要进行软件设计。

本示波器的软件设计主要包括以下几个方面:输入信号采集我们需要使用94单片机的ADC模块来采集输入信号。

通过设置合适的引脚和参数,我们可以将输入信号通过ADC转换为数字信号,方便后续处理。

数据处理和显示采集到的数字信号需要进行处理和显示。

我们可以使用94单片机的计算能力和12864液晶屏的显示能力来进行数据处理和图形显示。

具体的数据处理方式可以根据需求进行选择。

通常可以使用FFT算法进行频谱分析,或者使用差值和滤波算法进行波形插值和滤波处理。

用户界面设计为了方便用户操作和观察,我们需要设计一个简洁明了的用户界面。

通过液晶屏上的菜单和按键,用户可以选择不同的参数和功能。

控制逻辑设计示波器的控制逻辑需要根据用户的操作来进行相应的响应和处理。

我们可以使用94单片机的中断和定时器功能来实现控制逻辑。

程序实现根据上述软件设计的要求,我们可以编写相应的程序来实现示波器的功能。

LCM12864液晶显示模块与单片机接口

LCM12864液晶显示模块与单片机接口

LCM12864液晶显示模块与单片机接口一、LCM12864液晶显示模块简介LCM12864液晶显示模块是由128列64行液晶显示点阵和其控制电路组成,整个电路板外形、尺寸如图8-1所示。

该显示模块不仅可以显示数字,还可以显示汉字和图形。

模块电路板下端有20个接线引脚,其中VDD与VSS引脚是LCM12864液晶模块电源与地接入端,VOUT是LCM12864液晶模块自生成负电压输出端。

VO 需要一个外部的0V~-10V 负压输入,可接入电位器调整液晶灰度。

在背光电路中需要串接5 欧姆电阻,直接将背光接入电源可能会造成损坏。

其余引脚由单片机控制。

图8-1 LCM12864液晶显示模块外型图LCM12864液晶显示模块的引脚定义如表8-1所示。

表8-1 LCM12864引脚说明标号名称参数说明1 VSS GND 0V 模块电源地2 VDD +5V 模块电源+5V DC3 VO 0V ~-10V 外部液晶偏置电压输入端4 D/I H/L H:数据;L:指令5 R/W H/L H:MPU LCM读数据;L:MPU LCM写数据6 E H/L LCM使能7 DB0 H/L 数据线0(H表示高电平,L表示低电平8 DB1 H/L 数据线19 DB2 H/L 数据线210 DB3 H/L 数据线311 DB4 H/L 数据线412 DB5 H/L 数据线513 DB6 H/L 数据线614 DB7 H/L 数据线715 CS1 H/L 左半屏使能(低电平有效)16 CS2 H/L 右半屏使能(低电平有效)17 /RST H/L LCM复位(低电平有效)18 VOUT GND 0V 模块电源地19 SLA +5V LED背光电源+5V DC20 SLK GND 0V LED背光电源地二、LCM12864驱动电路MSP430F169单片机与LCM12864接口电路如图8-3所示。

图8-3单片机与LCM12864接口电路三、单片机与LCM12864接口时序完成硬件连接后,显示内容由程序控制。

单片机18 单片机控制12864液晶显示

单片机18   单片机控制12864液晶显示
(2) 设置Y 地址(列地址)
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 0 1 A5 A4 A3 A2 A1 A0
功能:列首地址为0x40,A5~A0为Y地址(列地址) 取值范围(共1~64列),作为寄存器的Y地址指针。 在对寄存器进行读写操作后,Y地址指针自动加1, 指向下一个寄存器单元。
单片机控制12864液晶显示
单片机控制12864液晶显示
任务单 原理图绘制 程序编写及讲解 总结
任务单
任务
通过本任务的学习,学会使用单片机控制
描述 12864液晶显示
任务 P0口为数据输出端直接连接液晶屏的数据端口 要求 DB0~DB7,P2.3~P2.7连接液晶屏的控制端。
利用Proteus仿真运行,使用单片机控制12864液 实现 晶显示,并验证其使用方法
(3)读数据:E=1,RS=1,R/W=1,数据输 出到DB0~DB7得到。
12864LCD液晶显示器显示控制指令描述
(1)显示开关控制命令
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
00 0 0 1 1 1 1 1 D
功能:D=1(即DB7~DB0=0x3F):开显示。 D=0(即DB7~DB0=0x3E):关显示。
方法
单片机控制12864液晶显示
电路中单片机的P0口输出端直接连接液晶屏的数 据端DB0~DB7。P2.3、P2.4接CS2和CS1端控制 右半屏和左半屏。P2.5接E使能端,P2.6接RW读 写使能端,P2.7接RS读写数据使能端,控制方法 可看程序说明。可变电阻RV1接V0用于调显示屏 对比度,RP1为P0口的上拉电阻。
字符、汉字等的取模方式

无字库LCD12864(无时钟芯片显示时间)

无字库LCD12864(无时钟芯片显示时间)

/************************************************************************** 在无字库的12864LCD上显示时、分、秒;没有用时钟芯片MCU:STC89C52晶振:11.0592MHz作者:罗元俊时间:2014.06.25**************************************************************************/ #include <reg52.h>typedef unsigned char uchar;typedef unsigned int uint;#define Port P0 // 数据端口#define Disp_On 0x3f // 开显示#define Disp_Off 0x3e // 关显示#define Col_Add 0x40 // 列地址#define Page_Add 0xb8 // 页地址#define Start_Line 0xc0 // 起始页sbit RS = P2^6;sbit RW = P2^5;sbit EN = P2^7;sbit CS1 = P3^2;sbit CS2 = P3^3;uint t = 0; //全局变量:秒表(用于计数时间的增量)uchar sec,min,hour; // 全局变量:秒、分、时uchar a,b,c,d,e,f; // 秒、分、时的个位和十位uchar code HZ_tab[][32] = {{/*-- 文字: 潜--*//*-- 新宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x20,0xC2,0x0C,0x80,0x10,0x94,0x54,0x3F,0x54,0x90,0x54,0x3F,0x54,0x94,0x10,0x00,0x04,0x04,0x7E,0x01,0x00,0x00,0xFF,0x49,0x49,0x49,0x49,0x49,0xFF,0x00,0x01,0x00},{/*-- 文字: 龙--*//*-- 新宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x10,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0xF0,0x10,0x11,0x16,0xD0,0x10,0x10,0x00,0x80,0x40,0x20,0x18,0x06,0x41,0x20,0x10,0x3F,0x44,0x42,0x41,0x40,0x40,0x78,0x00},{/*-- 文字: 花--*//*-- 新宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x04,0x04,0x04,0x84,0x6F,0x04,0x04,0x04,0xE4,0x04,0x8F,0x44,0x24,0x04,0x04,0x00,0x04,0x02,0x01,0xFF,0x00,0x10,0x08,0x04,0x3F,0x41,0x40,0x40,0x40,0x40,0x78,0x00},{/*-- 文字: 园--*//*-- 新宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0xFE,0x02,0x42,0x4A,0xCA,0x4A,0x4A,0xCA,0x4A,0x4A,0x42,0x02,0xFE,0x00,0x00,0x00,0xFF,0x40,0x50,0x4C,0x43,0x40,0x40,0x4F,0x50,0x50,0x5C,0x40,0xFF,0x00,0x00},{/*-- 文字: 输--*//*-- 新宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x88,0x68,0x1F,0xC8,0x08,0x10,0xC8,0x54,0x52,0xD1,0x12,0x94,0x08,0xD0,0x10,0x00,0x09,0x19,0x09,0xFF,0x05,0x00,0xFF,0x12,0x92,0xFF,0x00,0x5F,0x80,0x7F,0x00,0x00},{/*-- 文字: 入--*//*-- 新宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x00,0x00,0x00,0x01,0xE2,0x1C,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x00,0x03,0x0C,0x30,0x40,0x80,0x80,0x00},{/*-- 文字: 密--*//*-- 新宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x10,0x8C,0x44,0x04,0xE4,0x04,0x95,0xA6,0x44,0x24,0x14,0x84,0x44,0x94,0x0C,0x00,0x02,0x02,0x7A,0x41,0x41,0x43,0x42,0x7E,0x42,0x42,0x42,0x43,0xF8,0x00,0x00,0x00},{/*-- 文字: 码--*//*-- 新宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x04,0x84,0xE4,0x5C,0x44,0xC4,0x00,0x02,0xF2,0x82,0x82,0x82,0xFE,0x80,0x80,0x00,0x02,0x01,0x7F,0x10,0x10,0x3F,0x00,0x08,0x08,0x08,0x08,0x48,0x88,0x40,0x3F,0x00}};uchar code SZ_tab[][16] = {{/*-- 文字: 0 --*//*-- 新宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00}, //0 {/*-- 文字: 1 --*//*-- 新宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00}, //1 {/*-- 文字: 2 --*//*-- 新宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00}, //2 {/*-- 文字: 3 --*//*-- 新宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00}, //3 {/*-- 文字: 4 --*//*-- 新宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00}, //4{/*-- 文字: 5 --*//*-- 新宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00}, //5 {/*-- 文字: 6 --*//*-- 新宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00}, //6 {/*-- 文字: 7 --*//*-- 新宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00}, //7 {/*-- 文字: 8 --*//*-- 新宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00}, //8 {/*-- 文字: 9 --*//*-- 新宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00}, //9 {/*-- 文字: - --*//*-- 新宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01}, //10 {/*-- 文字: : --*//*-- 新宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00} //11 };void delayms(uint xms) //延时子程序{uint x,y;for(x = xms;x > 0;x--)for(y = 2;y > 0;y--);}void DetBusybit(void) //忙位检测子程序{Port = 0xff; //读状态值时,先给数据端口赋高电平RS = 0;RW = 1;EN = 1;while(Port & 0x80); //如果LCD处于忙状态,程序就此停止delayms(2);EN = 0;}void LCD_WrCom_L(uchar com) // 写左半屏指令子程序{DetBusybit();CS1 = 1; CS2 = 0;RS = 0;RW = 0;EN = 1;Port = com;delayms(5);EN = 0;}void LCD_WrCom_R(uchar com) // 写右半屏指令子程序{DetBusybit();CS1 = 0; CS2 = 1;RS = 0;RW = 0;EN = 1;Port = com;delayms(5);EN = 0;}void LCD_WrDat_L(uchar dat) // 写左半屏数据子程序{DetBusybit();CS1 = 1; CS2 = 0;RS = 1;RW = 0;EN = 1;Port = dat;delayms(5);EN = 0;}void LCD_WrDat_R(uchar dat) // 写右半屏数据子程序{DetBusybit();CS1 = 0; CS2 = 1;RS = 1;RW = 0;EN = 1;Port = dat;delayms(5);EN = 0;}void Clear_L(void) // 左半屏清屏{uchar i,j;CS1 = 1; CS2 = 0;LCD_WrCom_L(Page_Add + 0);LCD_WrCom_L(Col_Add + 0);for(j = 0; j < 8; j++)LCD_WrCom_L(Page_Add + j);for(i = 0; i < 64; i++)LCD_WrDat_L(0x00);}void Clear_R(void) // 右半屏清屏{uchar i,j;CS1 = 0; CS2 = 1;LCD_WrCom_R(Page_Add + 0);LCD_WrCom_R(Col_Add + 0);for(j = 0; j < 8; j++)LCD_WrCom_R(Page_Add + j);for(i = 0; i < 64; i++)LCD_WrDat_R(0x00);}void Disp_HZ_L(uchar pag,uchar col,uchar n) // 显示左半屏汉字16*16 {uchar i = 0,j = 0;CS1 = 1; CS2 = 0;for(i = 0; i < 2; i++){LCD_WrCom_L(Page_Add + pag + i);LCD_WrCom_L(Col_Add + col);for(j = 0; j < 16; j++)LCD_WrDat_L(HZ_tab[n][16*i+j]);}}void Disp_SZ_L(uchar pag,uchar col,uchar n) // 显示左半屏数字8*16 {uchar i = 0,j = 0,k = 0;CS1 = 1; CS2 = 0;for(i = 0; i < 2; i++){LCD_WrCom_L(Page_Add + pag + i);LCD_WrCom_L(Col_Add + col);for(j = 0; j < 8; j++){LCD_WrDat_L(SZ_tab[n][8*i+j]);}}}void Disp_HZ_R(uchar pag,uchar col,uchar n) // 显示右半屏汉字16*16 {uchar i = 0,j = 0;CS1 = 0; CS2 = 1;for(i = 0; i < 2; i++){LCD_WrCom_R(Page_Add + pag + i);LCD_WrCom_R(Col_Add + col);for(j = 0; j < 16; j++)LCD_WrDat_R(HZ_tab[n][16*i+j]);}}void Disp_SZ_R(uchar pag,uchar col,uchar n) // 显示右半屏数字8*16 {uchar i = 0,j = 0;CS1 = 0; CS2 = 1;for(i = 0; i < 2; i++){LCD_WrCom_R(Page_Add + pag + i);LCD_WrCom_R(Col_Add + col);for(j = 0; j < 8; j++){LCD_WrDat_R(SZ_tab[n][8*i+j]);}}}void TimerInit(void) //定时器初始化函数{TMOD = 0x02; //设置定时器0为工作模式2TH0 = 0x47; //装初值TL0 = 0x47; //设定时间为0.2msEA = 1;ET0 = 1;TR0 = 1; //启动定时器0}void LCD_Init(void) // LCD初始化子程序{delayms(10);LCD_WrCom_L(Disp_Off); LCD_WrCom_R(Disp_Off);LCD_WrCom_L(Page_Add + 0); LCD_WrCom_R(Page_Add + 0);LCD_WrCom_L(Start_Line + 0); LCD_WrCom_R(Start_Line + 0);LCD_WrCom_L(Col_Add + 0); LCD_WrCom_R(Col_Add + 0);LCD_WrCom_L(Disp_On); LCD_WrCom_R(Disp_On); }void main(void){LCD_Init();TimerInit();Clear_L();Clear_R();while(1){sec = t%60; //秒钟分离min = (t/60)%60; //分钟分离hour = (t/3600)%60; //时钟分离a = sec%10; //秒钟个位分离b = (sec/10)%10; //秒钟十位分离c = min%10; //分钟个位分离d = (min/10)%10; //分钟十位分离e = hour%10; //时钟个位分离f = (hour/10)%10; //时钟十位分?Disp_HZ_L(0,32,0); // 第0页,第16列,第0个字Disp_HZ_L(0,48,1);Disp_HZ_R(0,0,2);Disp_HZ_R(0,16,3);Disp_SZ_L(2,24,2);Disp_SZ_L(2,32,0);Disp_SZ_L(2,40,1);Disp_SZ_L(2,48,4);Disp_SZ_L(2,56,10);Disp_SZ_R(2,0,0);Disp_SZ_R(2,8,6);Disp_SZ_R(2,16,10);Disp_SZ_R(2,24,2);Disp_SZ_R(2,32,7);Disp_SZ_L(4,32,f);Disp_SZ_L(4,40,e);Disp_SZ_L(4,48,11);Disp_SZ_L(4,56,d);Disp_SZ_R(4,0,c);Disp_SZ_R(4,8,11);Disp_SZ_R(4,16,b);Disp_SZ_R(4,24,a);Disp_HZ_L(6,0,4);Disp_HZ_L(6,16,5);Disp_HZ_L(6,32,6);Disp_HZ_L(6,48,7);Disp_SZ_R(6,0,11);}}void timer0(void) interrupt 1{uint i;i++;if(i == 5000) //1s时间到{t++; //秒表计时开始i = 0;}}。

单片机驱动LCD12864的应用_科学计算器的设计与制作

单片机驱动LCD12864的应用_科学计算器的设计与制作
3. 显示部分程序设计
这部分主要是设计程序驱动液晶显示。怎样把一 串很长并且会随着按键变化的数字通过液晶显示出来 以及怎样显示计算式是显示部分程序设计的关键。在 此设计中用到了 sprintf() 函数,它用作格式化的输出 函数,将一个格式化的字符串输出到一个目的字符串 中,从而可以把数字转化为字符串输出。函数调用方 式为 int sprintf(char*string,char *format,arg_list), 其中第一个参数是目的字符串。sprintf() 函数共有五
GND
142
152
P10
162
12
7
182
192
12
CE
1=2
P11
1+2
-1 2
12
*
12
12
/
1/x
.1 2
+1/-2
12 ” ˝¸
12 ø ¿/“„
12
sin
12
¿“•‰
P12
12
cos
P13
P 14 P 15 P 16 P 17 P 30 P 31
40 2011. 07
可以进一步提升程序设计能力。
一、系统结构及硬件电路设计
此作品的系统结构包括 :单片机系统、键盘模块 和液晶显示单元,原理图如图 1 所示,系统结构如图 2 所示,作品实物图如图 3 所示。单片机系统主要由 单片机、时钟电路和复位电路构成。时钟电路相当于 单片机系统的心脏,它是系统必不可少的部分。作品 选用 STC89C58RD 单片机,该单片机具有 4 个 8 位 I/O 口 P0~P3 口,2 个 16 位定时器 / 计数器 T0 和 T1。通 过程序设计使单片机处理键盘输入的数据、驱动液晶 显示等。键盘用作数据输入接在单片机的 P1 和部分 P3 口,设计使用 4×6 的矩阵键盘,相对于独立按键, 矩阵键盘大大节省了单片机的 I/O 口,扩大了按键功 能,同时也节省了硬件资源。每按下一个键,同时让 蜂鸣器发声,这样设计便于判断按键是否真正按下。 LCD12864 作为人机交互界面,显示计算结果和计算的 信息。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

题目院系名称:专业班级:学生姓名:学号:指导教师:年月日摘要单片机扩展外围存储器,先在存储器里存储一幅图片,然后通过单片机读出数据在lcd12864上显示出来。

关键词AMPIRE128X64;2764;外部存储器读写;扩展外部存储器ABSTRACTMicrocontroller peripheral expansion of memory, first in memory to store a picture, and then read data through the microcontroller in the lcd12864 on display.Key words LCD12864;External memory read and write;External memory expansion目录1 引言............................................................................................................ - 1 -1.1 研究的目的..................................................................................... - 1 -1.2 相关领域成果................................................................................. - 1 -1.3 研究的意义..................................................................................... - 1 -2 芯片资料.................................................................................................... - 2 -2.1 AT89C51芯片介绍 ........................................................................ - 2 -2.1.1 概述...................................................................................... - 2 -2.1.2 特性...................................................................................... - 2 -2.1.3 编号含义.............................................................................. - 3 -2.1.4 框图(CPU) ........................................................................... - 4 -2.1.5 逻辑符号.............................................................................. - 5 -2.1.6 管脚描述.............................................................................. - 6 -2.2 LCD12864(ks0108 controllers)芯片介绍..................................... - 12 -2.2.1 KS0108控制器主要特性............................................... - 12 -2.2.2 接口说明.......................................................................... - 13 -2.2.3 引脚功能.......................................................................... - 13 -2.2.4 指令列表.......................................................................... - 14 -2.2.5 工作时序图........................................................................ - 14 -2.2.6 KS0108控制器指令说明............................................... - 14 -2.3 27C64芯片介绍 ........................................................................... - 17 -2.3.1 概述.................................................................................... - 17 -2.3.2 2764各引脚的含义........................................................... - 17 -2.3.3 读时序图:........................................................................ - 18 -2.4 74LS373芯片介绍 ....................................................................... - 19 -2.4.1 概述.................................................................................... - 19 -2.4.2 74ls373功能简介 .............................................................. - 20 -2.4.3 74ls373内部逻辑结构图 .................................................. - 20 -3 系统分析.................................................................................................. - 21 -3.1 题目要求....................................................................................... - 21 -3.2 元件选择....................................................................................... - 21 -3.3 硬件总体结构设计....................................................................... - 21 -3.4 软件概要设计............................................................................... - 22 -4 硬件设计.................................................................................................. - 23 -4.1 元件资料....................................................................................... - 23 -5 软件设计.................................................................................................. - 24 -6 软件仿真.................................................................................................. - 26 -6.1 Proteus简介.................................................................................. - 26 - 总结................................................................................................................ - 27 - 致谢................................................................................................................ - 28 - 参考文献........................................................................................................ - 29 - 附录源代码................................................................................................ - 30 -1 引言1.1 研究的目的扩展外部存储器主要用于增大存储容量,提供更多的功能,扩大应用领域。

相关文档
最新文档