1、128*64点阵LCD的图形显示Proteus仿真电路图三、硬件模块功能介绍3.1单片机(AT89C52)功能介绍 AT89C52主要提供以下性能:1、与MCS_51单片机产品兼容2、8K字节在系统可编程Flash闪速存储器3、1000次擦写周期4、全静态操作:0HZ33HZ5、三级加密程序存储器6、32个I/O口线7、三个16位定时器/计数器8、八个中断源9、全双工UART串行通道10、低功耗空闲和掉电模式11、掉电后可唤醒12、看门狗定时器13、双数据指针其功能特性描述:256字节内部RAM,3个16位定时/计数器,一个6向量两级中断结构,一个全双工串行通信口。它的内部集成了4个可编程的并
2、行I/O接口(P0P3),每个接口电路都具有锁存器和驱动器,输入接口电路具有三态门控制。P0P3口同RAM统一编址,可以当作特殊功能寄存器SFR来寻址。在实际应用中P03口在开机或复位时均呈高电平,本设计主要接P0口,P0口是一个8位漏极开路型双向I/O口,也即地址/数据总线复用口。作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑电平,对端口P0写“1”时,引脚可作为高阻抗输入端用,当访问外部程序和数据存储器时,P0口线分时转换地址(低8位)和数据总线复用,在这种模式下,P0具有内部上拉电阻。在程序校验时,输出指令字节,程序校验时,需要外部上拉电阻。(如图)AT89C52原理图3.2液晶
3、显示器LCD(128*64点阵图形型)功能介绍点阵图形型是在一平板上排列多行多列的矩阵式的晶格点,点的大小可根据显示清晰度来设计,可显示数字、字母、汉字、图像、甚至动画。以AMPIRE128*64为例来说明LCD128*64接口应用。AMPIRE128*64内置KS0108型图形液晶模块驱动,其引脚功能如表所示LCD 128*64引脚功能表引脚号引脚名称电平引脚功能描述1CS1/CS2H/L片选信号,芯片1/芯片2控制液晶左半屏/右半屏2GND0v电源地3Vcc+5v电源正4V0对比度(亮度)调整5RSRS=”H”,表示DB7DB0为显示数据RS=”L”,表示DB7DB0为显示指令数据6R/W
4、R/W=”H”,E=”H”,数据被读到DB7DBR/W=”H”,E=”HL”, DB7DB0的数据被写到IR或DR7E使能信号8DB0DB7三态数据线9RST复位端,低电平有效10VoutLCD驱动电压KS0108控制器指令功能如表所示指令名称控制状态指令代码D7D6D5D4D3D2D1D0显示开关设置D显示起始行设置L5L4L3L2L1L0页面地址设置P2P1P0列地址设置C5C4C3C2C1C0读取状态设置BUSYON/OFFRESET写显示数据数据读显示数据KS0108控制器指令功能表指令功能具体分析:读状态字格式:BUSY=1:表示KS0108正在处理计算机发来的指令或数据。此时接口电
5、路被封锁,不能接受除读状态字以外的任何操作。BUSY=0表示KS0108接口控制电路已处于“准备好”状态,等待计算机的访问。ON/OFF:表示当前的显示状态。ON/OFF=1表示关显示状态;ON/OFF=0表示开显示状态。RESET:表示当前KS0108的工作状态,即反映RST端的电平状态。当RST为低电平状态时,KS0108处于复位工作状态,RESET=1。当RST为高电平状态时,KS0108为正常工作状态,RESET=0。在占领设置和数据读写时要注意状态字中的BUSY标志。只有在BUSY=0时,计算机对KS0108的操作才能有效。因此计算机在每次对KS0108操作之前,都要读出来状态字判断
6、BUSY是否为“0”,若不为“0”,则计算机需要等待,直至BUSY=0为止。显示开关格式:该指令设置显示开关/触发器的状态,由此控制显示数据锁存器正常工作,从而控制显示状态。D位为显示开/关的控制位。当D=1为显示设置,显示数据锁存器正常工作,显示屏上呈现所需结果。此时在状态字中ON/OFF=0。当D=0为关显示设置,显示数据锁存器被清0,显示屏上不显示状态,但显示存储器并没有被破坏,在状态组中ON/OFF=1。显示起始行设置格式:该指令设置了显示起始行寄存器的内容。KS0108有64行显示的管理能力,该指令中L5L0为显示起始行的地址,取值在03FH(164)范围内,它规定了显示屏上最顶一行
7、所对应的显示存储器的行地址。如果定时间隔地,等间距地修改(如加一或减一)显示起始行寄存器的内容,则显示屏将呈现显示内容向上或向下平滑滚动的显示效果。页面地址设置格式:该指令设置了页面地址X地址寄存器的内容。KS0108将显示寄存器分成了8页,指令代码中P2P0就是要确定当前所要选择的页面地址,取值范围为07H,代表第18页。该指令规定了以后的读/写操作将在哪一个页面上进行。列地址设置格式:该指令设置了Y地址计数器的内容,C5C0=03FH(164)代表某一页面上的某一单元地址,随后的一次读或写数据将在这个单元上进行。Y地址计数器具有自动加一功能,在每一次读/写数据后它将自动加一,所以在连续进行
8、读/写数据时,Y地址计数器不必每次都设置一次。 页面地址的设置和列地址的设置将显示存储器单元唯一地确定下来,为后来的显示数据的读/写作了地址的选通。写显示数据该操作将8位数据写入先前已确定的显示存储器的单元内,操作完成后列地址计数器自动加一。读显示数据该操作将KS0108接口部的输出寄存器内容读出,然后列地址计数器自动加一。AMPIRE128*64 LCD3.3锁存器(74HC373)功能介绍常用的8D锁存器,常用作地址锁存和I/O输出,可以用74HC373,74HC373是高速CMOS器件,有三态输出的八D透明锁存器,共有54/74S373和54/74LS373两种线路,373的输出端O0O
9、7可直接与总线相连。当三态允许控制端OE为低电平时,O0O7为正常逻辑状态,可用来驱动或总线。当OE为高电平时,O0O7呈高阻态,既不驱动总线,也不为总线的负载,但锁存器内部的逻辑操作不受影响。当锁存器允许端LE为高电平时,O随数据D而变。当LE为低电平时,O被锁存在已建立的数据电平。当LE端施密特触发器的输入滞后作用,使交流和直流噪声抗扰度被改善400mV。74HC373原理图3.4与门(74HC00)功能介绍与门又称“与电路”。执行“与”预算的基本门电路。有几个输入端,只有一个输出端。当所有的输入同时为“1”时,输出才为“1”电平,否者输出为“0”电平。与的含义是:只有当决定一件事情的所有
10、条件都具备时,这个事件才会发生。逻辑与也称逻辑乘。74HC00是一款高速CMOS器件,实现了2输入与非门功能。与门表达式:F=AB“与”门用“AND”表示AZ四、软件设计4.1代码附录typedef unsigned int uint;# include# define LLCD_CMD_WR PBYTE0x10 /LCD左半部分写命令 rs=0 wr=0# define LLCD_CMD_RD PBYTE0x11 /读命令rs=0 wr=1# define LLCD_DATA_WR PBYTE0x12 /写数据rs=1 wr=0# define LLCD_DATA_RD PBYTE0x13
11、/读数据rs=1 wr=1# define RLCD_CMD_WR PBYTE0x20 /LCD右半部分的读写命令# define RLCD_CMD_RD PBYTE0x21# define RLCD_DATA_WR PBYTE0x22# define RLCD_DATA_RD PBYTE0x23sbit busy=P07;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,
12、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,0x20,0x20,0xE0,0x20,0x70,0x90,0x10,0xF0,0x48,0x08,0xF8,0x10,0x00,0x00,0x00,0x00,0x20,0x11,0x1F,
13、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
14、,0x00,0x00,0x00,0x41,0x41,0x21,0x1D,0x07,0x08,0x10,0x60,0x40,0x40,0x40大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
15、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)
16、; void lcd_cmd_wr(uchar cmdcode,uchar right)/写指令lcd_busy_rd (right);if(right=1)/right=1时,对右半部进行读/写RLCD_CMD_WR=cmdcode;elseLLCD_CMD_WR=cmdcode;/否者写左半部LCDvoid lcd_data_wr(uchar ldata,uchar right)/对LCD进行数据读/写lcd_busy_rd(right);if(right=1)RLCD_DATA_WR=ldata;LLCD_DATA_WR=ldata;void lcd_busy_rd(uchar righ
17、t)/检测LCD忙if(right=1)RLCD_CMD_RD;LLCD_CMD_RD;while(busy);void delay(uint nms)/延时程序uint i;for(;nms0;nms-)for(i=0;i500;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);
18、lcd_cmd_wr(0xb8+0,1);for(k=0;k256;k+)lcd_data_wr(0x00,0);lcd_data_wr(0x00,1);lcd_cmd_wr(0xb8+4,0);lcd_cmd_wr(0xb8+4,1);void lcd_hanzi_wr(uchar posx,uchar posy,uchar * hanzi)uchar i;if(posy7)row+;col=col-8;lcd_hanzi_wr(row,col,str+i*32);col+;void lcd_rol(void)64;lcd_cmd_wr(0xc0+i,0);lcd_cmd_wr(0xc0+i
19、,1);delay(10);4.2 Proteus软件介绍系统仿真用到了Proteus ISIS(电路分析与实物仿真软件)软件,可通过仿真显示出所设计系统的功能,对于程序的调试等有很大的帮助。它可以分析各种模拟器件和集成电路。特点是:实现了单片机仿真和SPICE电路仿真相结合。支持主流单片机系统的仿真。提供软件调试功能。具有强大的原理图绘制功能。原理图的工作界面及绘制如图Proteus ISIS的工作界面及原理图绘制4.3Keil C51软件介绍Keil软件是目前最流行开发单片机的软件,其项目开发流程与其他软件开发项目的流程类似,即:1.创建一个项目,从器件库中选择目标器件,配置工具设置;2.
20、用C或汇编语言创建源程序;3.用项目管理器生成应用程序文件;4.修改源程序中的错误;5.测试连接应用。它的集成编译环境是uVision4,它把C51、A51、BL51等在内的编译、汇编、定位链接、库、转换和模拟等软件集成在一个环境下,开发人员不必分别熟悉和使用这些软件的命令规则,支持所有的数据类型,在直接修改、编译、调试源程序,错误指令定位。支持项目管理功能强大的观察窗口,用于对程序的调试和编辑。其界面如下:创建源文件对话框4.4Proteus与Keil C相结合的设计打开Keil程序,执行菜单命令ProjectNew Project创建“LCD”项目,并选择单片机型号为AT89C52。执行菜
21、单命令FileNew创建文件,输入C语言源程序,保存为“LCD.C”在Project Workspace项目管理窗口中,右击Source Group 1,选择Add File to GroupSource ,将源程序“LCD.C”添加到项目中。在Project Workspace项目管理窗口中,选中Target 1,执行菜单命令Project Project Options for TargetTarget1,在弹出的对话框中选择Output选项卡,选中Creat HEX File。关闭对话框,执行菜单命令Project Rebuild all target files,或直接单击工具栏中的图
22、标,编译所有的目标文件,生成“LCD.HEX”。切换到工作界面到Proteus ISIS的点阵液晶显示器LCD仿真电路,在AT89C52元件上双击鼠标左键或点击右键再单击左键打开Edit Component对话框。设置Program File为“LCD.HEX”,Clock Frequency为12MHZ,单击OK关闭对话框。单击仿真运行开始按钮,就可以显示“河南理工大学”六个字符,且向上滚动。五、总结5.1个人心得体会通过这次对应用于学校的液晶显示器LCD的设计与制作,让我了解了什么是嵌入式系统开发,让我对学习嵌入式系统开发有了一个起点的基础,并学会了两种软件的使用。在这次设计的过程中,刚开始的时候,有点不知所措,因为刚刚学习完单片机,在李老师的带领下做完了四个实验,接着就立即开始做这个课程设计。我预先安装并学习了李老师准备好的C编程与仿真软件,熟悉并掌握了软件的基本操作,怎样在Proteus软件里找元器件,怎样画电路原理图,以及学习并了解每个元器件的功能介绍。怎样在Keil中编写C语言代码以及如何调试,如何与仿真软件相互结合等等,再结合着平时学的和书本上的详细介绍以及在网上收集资料等,遇到解决不了的问题,就在网上和书本上查阅,这个液晶显示器LCD的软件程序都是使用C语言编写的。这次的LCD课程设计是一个学习新知识、巩固加深所学课本理论
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1