基于单片机AT89C52的LCD设计(2)
页面地址的设置和列地址的设置将显示存储器单元唯一地确定下来,为后来的显示数据的读/写作了地址的选通。
⑥写显示数据该操作将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字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [专业资料]《蜜蜂之家》教学反思
- [专业资料]过去分词作定语和表语1
- [专业资料]苏州工业园区住房公积金贷款申请表
- [专业资料]保安管理制度及处罚条例细则
- [专业资料]2018年中国工程咨询市场发展现状调研及
- [专业资料]2015年电大本科《学前教育科研方法》期
- [专业资料]数字信号处理实验 matlab版 离散傅里叶
- [专业资料]“十三五”重点项目-虎杖白藜芦醇及功
- [专业资料]2015-2020年中国竹木工艺市场需求及投
- [专业资料]国际贸易理论与实务作业五:理论案例分
- [专业资料]财政部修订发布事业单位会计制度
- [专业资料]BCA蛋白浓度测定试剂盒(增强型)
- [专业资料]工程进度总计划横道图模板(通用版)
- [专业资料]七年级地理同步练习(天气与气候)
- [专业资料]X光安检机介绍火灾自动报警系统的组成
- [专业资料]衢州市人民政府办公室关于印发衢州市区
- [专业资料]经济全球化及其影响[1]
- [专业资料]质粒DNA限制性酶切图谱分析
- [专业资料]国家安全人民防线工作“六项”制度
- [专业资料]劳动力投入计划及保证措施
- 电子账册联网监管培训手册
- 人教版语文七年级上第1课《在山的那边
- 对我区担保行业发展现状的思考与建议
- 平面四边形网格自动生成方法研究
- 2016年党课学习心得体会范文
- 如何设置电脑定时关机
- 全球最美人妖排行榜新鲜出炉
- 社会实践调查报告及问卷
- Visual Basic习题集
- 《鱼我所欲也》课件2
- 浙江省会计从业资格考试试卷
- 全遥控数字音量控制的D 类功率放大器资
- 鞍钢宪法与后福特主义
- 电表的改装与校准实验报告(1)
- 2014年高考理科数学真题解析分类汇编:
- Windows 7 AIK 的使用
- 风电场全场停电事故应急处置方案
- 化工原理选填题题库(下)
- 关于产学研合作教育模式的学习与思考
- 西安先锋公馆项目前期定位报告




