教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 专业资料 >

基于单片机AT89C52的LCD设计(2)

来源:网络收集 时间:2026-07-13
导读: 页面地址的设置和列地址的设置将显示存储器单元唯一地确定下来,为后来的显示数据的读/写作了地址的选通。 ⑥写显示数据该操作将8位数据写入先前已确定的显示存储器的单元内,操作完成后列地址计数器自动加一。 ⑦

页面地址的设置和列地址的设置将显示存储器单元唯一地确定下来,为后来的显示数据的读/写作了地址的选通。

⑥写显示数据该操作将8位数据写入先前已确定的显示存储器的单元内,操作完成后列地址计数器自动加一。

⑦读显示数据该操作将KS0108接口部的输出寄存器内容读出,然后列地址计数器自动加一。

AMPIRE128*64 LCD

3.3锁存器(74HC373)功能介绍

常用的8D锁存器,常用作地址锁存和I/O输出,可以用74HC373,74HC373是高速CMOS器件,有三态输出的八D透明锁存器,共有54/74S373和54/74LS373两种线路,373的输出端O0~O7可直接与总线相连。

当三态允许控制端OE为低电平时,O0~O7为正常逻辑状态,可用来驱动或总线。

当OE为高电平时,O0~O7

呈高阻态,既不驱动总线,也不为总线的负载,但

锁存器内部的逻辑操作不受影响。

当锁存器允许端LE为高电平时,O随数据D而变。 当LE为低电平时,O被锁存在已建立的数据电平。

当LE端施密特触发器的输入滞后作用,使交流和直流噪声抗扰度被改善400mV。

74HC373原理图

3.4与门(74HC00)功能介绍

与门又称“与电路”。执行“与”预算的基本门电路。有几个输入端,只有一个输出端。当所有的输入同时为“1”时,输出才为“1”电平,否者输出为“0”电平。与的含义是:只有当决定一件事情的所有条件都具备时,这个事件才会发生。逻辑与也称逻辑乘。74HC00是一款高速CMOS器件,实现了2输入与非门功能。(如图) 与门表达式:F=A·B “与”门用“AND”表示

四、软件设计

4.1代码附录

typedef unsigned int uint; # include<reg52.h>

# define LLCD_CMD_WR PBYTE[0x10] //LCD左半部分写命令 rs=0 wr=0

# define LLCD_CMD_RD PBYTE[0x11] //读命令rs=0 wr=1

# define LLCD_DATA_WR PBYTE[0x12] //写数据rs=1 wr=0 # define LLCD_DATA_RD PBYTE[0x13] //读数据rs=1 wr=1 # define RLCD_CMD_WR PBYTE[0x20] //LCD右半部分的读写命令 # define RLCD_CMD_RD PBYTE[0x21] # define RLCD_DATA_WR PBYTE[0x22] # define RLCD_DATA_RD PBYTE[0x23] sbit busy=P0^7; code uchar hanzi[]={

0x00,0x00,0x40,0x88,0x18,0x30,0xA0,0xA0,0xA0,0x90,0x10,0xF0,0x10,0x10,0x10

,0x00,0x00,0x00,0x00,0x30,0x0C,0x00,0x03,0x02,0x02,0x03,0xC0,0x7F,0x00,0x00

,0x00,0x00,/*"河"*/

0x00,0x00,0x00,0x00,0x00,0x20,0x20,0xF0,0x2C,0x10,0x90,0x80,0x80,0x80,0x00

,0x00,0x00,0x00,0x01,0x7F,0x01,0x15,0x17,0x7C,0x0B,0x09,0x08,0xC0,0xE0,0x1F

,0x00,0x00,/*"南"*/

0x00,0x00,0x20,0x20,0xE0,0x20,0x70,0x90,0x10,0xF0,0x48,0x08,0xF8,0x10,0x00

,0x00,0x00,0x00,0x20,0x11,0x1F,0x89,0x81,0x83,0x52,0x7F,0x4A,0x4A,0x41,0x40

,0x40,0x00,/*"理"*/

0x00,0x00,0x00,0x00,0x00,0x40,0x20,0x20,0xE0,0x20,0x20,0x20,0x00,0x00,0x00

,0x00,0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x10,0x1F,0x10,0x10,0x10,0x10,0x10

,0x10,0x00,/*"工"*/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x80,0x80,0x80,0x80,0x80,0x00,0x00

,0x00,0x00,0x00,0x00,0x41,0x41,0x21,0x1D,0x07,0x08,0x10,0x60,0x40,0x40,0x40

,0x00,0x00,/*"大"*/

0x00,0x00,0x80,0x60,0x48,0x50,0x40,0x58,0xA0,0x30,0x2C,0xA0,0x60,0x40,0x00

,0x00,0x00,0x00,0x09,0x08,0x08,0x09,0x85,0x85,0x7E,0x05,0x04,0x04,0x04,0x04

,0x00,0x00/*"学"*/ };

void lcd_cmd_wr(uchar cmdcode,uchar right); void lcd_data_wr(uchar ldata,uchar right);

void lcd_busy_rd(uchar right);

void lcd_hanzi_wr(uchar posx,uchar posy,uchar * hanzi); void lcd_str_wr(uchar row,uchar col,uchar n,uchar * str); void lcd_rol(); void lcd_init(); void delay(uint nms); void main() { lcd_init();

lcd_str_wr(1,1,6,hanzi1); delay(100); while(1) { lcd_rol(); delay(1000); } }

void lcd_cmd_wr(uchar cmdcode,uchar right)//写指令 {

lcd_busy_rd (right);

if(right==1)//right==1时,对右半部进行读/写 {RLCD_CMD_WR=cmdcode;} else

{LLCD_CMD_WR=cmdcode;}//否者写左半部LCD }

void lcd_data_wr(uchar ldata,uchar right)//对LCD进行数据读/写 {lcd_busy_rd(right); if(right==1)

{RLCD_DATA_WR=ldata;}

else

{LLCD_DATA_WR=ldata;} }

void lcd_busy_rd(uchar right)//检测LCD忙 {if(right==1) {RLCD_CMD_RD;} else

{LLCD_CMD_RD;} while(busy); }

void delay(uint nms)//延时程序 {uint i;

for(;nms>0;nms--) for(i=0;i<500;i++);}

void lcd_init(void)//LCD初始化{uint k;

lcd_cmd_wr(0x3e+1,0); lcd_cmd_wr(0xc0+0,0); lcd_cmd_wr(0xb8+0,0); lcd_cmd_wr(0x40+0,0); lcd_cmd_wr(0x3e+1,1); lcd_cmd_wr(0xc0+0,1); lcd_cmd_wr(0x40+0,1); lcd_cmd_wr(0xb8+0,1); for(k=0;k<256;k++) {lcd_data_wr(0x00,0); lcd_data_wr(0x00,1);} lcd_cmd_wr(0xb8+4,0); lcd_cmd_wr(0x40+0,0);

lcd_cmd_wr(0xb8+4,1); lcd_cmd_wr(0x40+0,1); for(k=0;k<256;k++) {lcd_data_wr(0x00,0); lcd_data_wr(0x00,1);} }

void lcd_hanzi_wr(uchar posx,uchar posy,uchar * hanzi) {uchar i; if(posy<4)

{lcd_cmd_wr(0xb8+2*posy,0); lcd_cmd_wr(0x40+16*posy,0); for(i=0;i<16;i++) {lcd_data_wr(hanzi[i],0);} }

else //否者在右半部写 {lcd_cmd_wr(0xb8+posy*2,1); lcd_cmd_wr(0x40+16*(posy-4),1); for(i=0;i<16;i++) {lcd_data_wr(hanzi[i],1);} }

lcd_cmd_wr(0xb8+posy*2+1,1); lcd_cmd_wr(0x40+16*(posy-4),1); for(i=16;i<32;i++) {lcd_data_wr(hanzi[i],1); } } }

void lcd_str_wr(uchar row,uchar col,uchar n,uchar * str)//输出方式 {uchar i;

for(i=0;i<n;i++) {if(col>7) {row++; col=col-8;}

lcd_hanzi_wr(row,col,str+i*32); col++;}}

void lcd_rol(void) {uchar i; for(i=0;i<64;i++) {lcd_cmd_wr(0xc0+i,0); lcd_cmd_wr(0xc0+i,1); delay(10);}}

4.2 Proteus软件介绍

系统仿真用到了Proteus ISIS(电路分析与实物仿真软件)软件,可通过仿真显示出所设计系统的功能,对于程序的调试等有很大的帮助。它可以分析各种模拟器件和集成电路。特点是:①实现了单片机仿真和SPICE电路仿真相结合。②支持主流单片机系统的仿真。③提供软件调试功能。④具有强大的原理图绘制功能。原理图的工作界面及绘制如图

Proteus ISIS的工作界面及原理图绘制

4.3Keil C51软件介绍

Keil软件是目前最流行开发单片机的软件,其项目开发流程与其他软件开发项目的流程类似,即:

1.创建一个项目,从器件库中选择目标器件,配置工具设置; 2.用C或汇编语言创建源程序; 3.用项目管理器生成应用程序文件; 4.修改源程序中的错误; 5.测试连接应用。

它的集成编译环境 …… 此处隐藏:4207字,全部文档内容请下载后查看。喜欢就下载吧 ……

基于单片机AT89C52的LCD设计(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/268607.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)