目录
一、概述 ................................................................................................................................... 2 1.1课题的背景及目的 ......................................................................................................... 2 1.2课题的内容要求及研究方法 ......................................................................................... 2 二、课题设计 ........................................................................................................................... 3 2.1基本原理 ......................................................................................................................... 3 2.2原理框图 ......................................................................................................................... 3 2.3元器件清单及仿真电路图 ............................................................................................. 4 三、硬件模块功能介绍 ........................................................................................................... 5 3.1单片机(ATC52)功能介绍 ............................................................................................ 5 3.2液晶显示器LCD(128*点阵图形型)功能介绍 ..................................................... 6 3.3锁存器(74HC373)功能介绍 ............................................................................................ 9 3.4与门(74HC00)功能介绍 ............................................................................................... 10 四、软件设计 ......................................................................................................................... 11 4.1代码附录 ....................................................................................................................... 11 4.2 Proteus软件介绍.......................................................................................................... 16 4.3Keil C51软件介绍 .......................................................................................................... 17 4.4Proteus与Keil C相结合的设计.................................................................................... 18 五、总结 ................................................................................................................................. 19 5.1个人心得体会 ............................................................................................................... 19 参考文献 ................................................................................................................................. 19
1
单片机课程设计
一、概述
1.1课题的背景及目的
随着计算机科学与技术的飞速发展,计算机的应用已经渗透到国民经济与人们生活的各个角落,正在日益改变着传统的人类工作方式和生活方式,而单片机技术又作为计算机技术中的一种分支,有着性价比高,集成度高,体积小,可靠性高,控制功能强大,低功耗,低电压,便于生产,便于携带等特点,所以得到越来越广泛的应用。
当今是一个信息化的时代,信息的重要性是不言而喻的,获取手段显得尤其重要,人们所接受的信息有70%来自于人的视觉,无论用何种方式获取的信息最终需要有某种显示方式来表示。在某种显示技术中,以液晶显示器LCD(Liquid Crystal Display)为代表的平板显示器发展最快、应用最广,LCD液晶显示器是一种低功耗液晶显示器件,工作电流小,适合于仪表和低功耗系统,常用的有笔划型液晶显示器、点阵字符型液晶显示器和图形点阵式液晶显示器,本文使用ATC52单片机主要设计了一款应用于学校的LED点阵图形型液晶显示器。
LCD液晶显示器的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就显示黑色,这样就显示出图形,液晶显示器适用于大规模电路驱动,易于实现全彩色显示的特点。通过它可以进一步学习及掌握及电路原理及使用方法。
1.2课题的内容要求及研究方法
设计ATC52单片机控制系统,使其在128*点阵LCD屏幕上显示“河南理工大学”六个字符,且向上滚动显示。
本文先按照设计的一般步骤,先选定用单片机的实现的方案,了解设计要求再分别从硬件系统设计和软件系统设计两个宏观方面着手,然后查阅相关资料,硬件方面,熟练单片机的基本工作原理,AMPIRE128*点阵LCD内置的KS0108控制器指令功能等,画出图形显示程序流程图和单元电路原理图,在对其进行做简单说明。软件方面,熟悉编程语言,
2
单片机课程设计
查找相关子程序,熟悉使用Proteus ISIS仿真软件及Keil uVision2开发软件,把元器件按电路原理图安装,最后对硬件和软件系统进行调试和仿真。
二、课题设计
2.1基本原理
本设计基于单片机技术原理,以单片机芯片ATC52最为核心控制器和以单片机扩展的LCD显示器用来设计出显示汉字且向上滚动的系统,通过硬件电路的制作及软件程序的编写,整个设计包括两大部分:硬件设计和软件设计。以单片机及LCD为核心,配以一定的元器件及外围电路和软件,硬件是整个系统的的基础,软件部分则要合理、充分的支持和使用系统的硬件,从而完成系统所要完成的任务。该显示系统主要由控制模块,液晶显示模块,锁存模块及输入输出模块等,能够正确的显示出“河南理工大学”六个字符且向上滚动。 2.2原理框图
128*点阵LCD的图形显示程序流程图
3
开始 LCD初始化 向LCD显示屏写字符 字符滚动设计 结束 单片机课程设计
2.3元器件清单及仿真电路图
①ATC52:单片机;②RES:电阻;③CRYSTAL:12MZ晶振;④CAP、CAP-ELEC:电容、电解电容;⑤74HC373:锁存器;⑥74HC00:与门;⑦AMPIRE 128*:液晶显示屏。
LCD1AMPIRE128XVCCU219XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD393837363534333221222324252627281011121314151617181716151413121110987654321-VoutRSTDB7DB6DB5DB4DB3DB2DB1DB0ER/WRSV0VCCGNDCS2CS1U3347813141718111GNDD0D1D2D3D4D5D6D7OELEGND25691215161918XTAL29RSTQ0Q1Q2Q3Q4Q5Q6Q7293031PSENALEEA74HC37312345678P1.0/T2P1.1/T2EXP1.2P1.3P1.4P1.5P1.6P1.7ATC52U1:A13274HC00 128*点阵LCD的图形显示Proteus仿真电路图
4
单片机课程设计
三、硬件模块功能介绍
3.1单片机(ATC52)功能介绍
ATC52主要提供以下性能: 1、与MCS_51单片机产品兼容
2、8K字节在系统可编程Flash闪速存储器 3、1000次擦写周期 4、全静态操作:0HZ~33HZ 5、三级加密程序存储器 6、32个I/O口线
7、三个16位定时器/计数器 8、八个中断源
9、全双工UART串行通道 10、低功耗空闲和掉电模式 11、掉电后可唤醒 12、看门狗定时器 13、双数据指针
其功能特性描述:256字节内部RAM,3个16位定时/计数器,一个6向量两级中断结构,一个全双工串行通信口。它的内部集成了4个可编程的并行I/O接口(P0~P3),每个接口电路都具有锁存器和驱动器,输入接口电路具有三态门控制。P0~P3口同RAM统一编址,可以当作特殊功能寄存器SFR来寻址。在实际应用中P0~3口在开机或复位时均呈高电平,本设计主要接P0口,P0口是一个8位漏极开路型双向I/O口,也即地址/数据总线复用口。作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑电平,对端口P0写“1”时,引脚可作为高阻抗输入端用,当访问外部程序和数据存储器时,P0口线分时转换地址(低8位)和数据总线复用,在这种模式下,P0具有内部上拉电阻。在程序校验时,输出指令字节,程序校验时,需要外部上拉电阻。(如图)
5
单片机课程设计
ATC52原理图
3.2液晶显示器LCD(128*点阵图形型)功能介绍
点阵图形型是在一平板上排列多行多列的矩阵式的晶格点,点的大小可根据显示清晰度来设计,可显示数字、字母、汉字、图像、甚至动画。以AMPIRE128*为例来说明LCD128*接口应用。AMPIRE128*内置KS0108型图形液晶模块驱动,其引脚功能如表所示
6
单片机课程设计
LCD 128*引脚功能表 引脚号 1 2 3 4 5 6 7 8 9 10 引脚名称 CS1/CS2 GND Vcc V0 RS R/W E DB0~DB7 RST Vout 0v +5v — H/L H/L H/L H/L H/L — 电平 H/L 引脚功能描述 片选信号,芯片1/芯片2控制液晶左半屏/右半屏 电源地 电源正 对比度(亮度)调整 RS=”H”,表示DB7~DB0为显示数据 RS=”L”,表示DB7~DB0为显示指令数据 R/W=”H”,E=”H”,数据被读到DB7~DB R/W=”H”,E=”H→L”, DB7~DB0的数据被写到IR或DR 使能信号 三态数据线 复位端,低电平有效 LCD驱动电压
KS0108控制器指令功能如表所示 指令名称 控制状态 RS 显示开关设置 显示起始行设置 页面地址设置 列地址设置 读取状态设置 写显示数据 读显示数据 0 0 0 0 0 1 1 R/W D7 0 0 0 0 0 0 1 0 1 1 0 BUSY D6 0 1 0 1 0 D5 1 L5 1 C5 ON/OFF 指令代码 D4 1 L4 1 C4 RESET 数据 数据 L3 1 C3 0 D3 1 L2 P2 C2 0 D2 1 D1 1 L1 P1 C1 0 D0 D L0 P0 C0 0 KS0108控制器指令功能表 指令功能具体分析:①读状态字格式:
BUSY 0 ON/OFF RESET 0 0 0 0 BUSY=1:表示KS0108正在处理计算机发来的指令或数据。此时接口电路,不能接受除读状态字以外的任何操作。BUSY=0表示KS0108接口控制电路
7
单片机课程设计
已处于“准备好”状态,等待计算机的访问。
ON/OFF:表示当前的显示状态。ON/OFF=1表示关显示状态;ON/OFF=0表示开显示状态。
RESET:表示当前KS0108的工作状态,即反映RST端的电平状态。 当RST为低电平状态时,KS0108处于复位工作状态,RESET=1。 当RST为高电平状态时,KS0108为正常工作状态,RESET=0。
在占领设置和数据读写时要注意状态字中的BUSY标志。只有在BUSY=0时,计算机对KS0108的操作才能有效。因此计算机在每次对KS0108操作之前,都要读出来状态字判断BUSY是否为“0”,若不为“0”,则计算机需要等待,直至BUSY=0为止。 ②显示开关格式: 0 0 1 1 1 1 1 D 该指令设置显示开关/触发器的状态,由此控制显示数据锁存器正常工作,从而控制显示状态。
D位为显示开/关的控制位。当D=1为显示设置,显示数据锁存器正常工作,显示屏上呈现所需结果。此时在状态字中ON/OFF=0。当D=0为关显示设置,显示数据锁存器被清0,显示屏上不显示状态,但显示存储器并没有被破坏,在状态组中ON/OFF=1。 ③显示起始行设置格式: 1 1 L5 L4 L3 L2 L1 L0 该指令设置了显示起始行寄存器的内容。KS0108有行显示的管理能力,该指令中L5~L0为显示起始行的地址,取值在0~3FH(1~)范围内,它规定了显示屏上最顶一行所对应的显示存储器的行地址。如果定时间隔地,等间距地修改(如加一或减一)显示起始行寄存器的内容,则显示屏将呈现显示内容向上或向下平滑滚动的显示效果。 ④页面地址设置格式: 1 0 1 1 1 P2 P1 P0 该指令设置了页面地址→X地址寄存器的内容。KS0108将显示寄存器分成了8页,指令代码中P2~P0就是要确定当前所要选择的页面地址,取值范围为0~7H,代表第1~8页。该指令规定了以后的读/写操作将在哪一个页面上进行。 ⑤列地址设置格式: 0
8
1 C5 C4 C3 C2 C1 C0 单片机课程设计
该指令设置了Y地址计数器的内容,C5~C0=0~3FH(1~)代表某一页面上的某一单元地址,随后的一次读或写数据将在这个单元上进行。Y地址计数器具有自动加一功能,在每一次读/写数据后它将自动加一,所以在连续进行读/写数据时,Y地址计数器不必每次都设置一次。
页面地址的设置和列地址的设置将显示存储器单元唯一地确定下来,为后来的显示数据的读/写作了地址的选通。
⑥写显示数据该操作将8位数据写入先前已确定的显示存储器的单元内,操作完成后列地址计数器自动加一。
⑦读显示数据该操作将KS0108接口部的输出寄存器内容读出,然后列地址计数器自动加一。
AMPIRE128* LCD
3.3锁存器(74HC373)功能介绍
常用的8D锁存器,常用作地址锁存和I/O输出,可以用74HC373,74HC373是高速CMOS器件,有三态输出的八D透明锁存器,共有54/74S373和54/74LS373两种线路,373的输出端O0~O7可直接与总线相连。
当三态允许控制端OE为低电平时,O0~O7为正常逻辑状态,可用来驱动或总线。
当OE为高电平时,O0~O7呈高阻态,既不驱动总线,也不为总线的负载,但
9
单片机课程设计
锁存器内部的逻辑操作不受影响。
当锁存器允许端LE为高电平时,O随数据D而变。 当LE为低电平时,O被锁存在已建立的数据电平。
当LE端施密特触发器的输入滞后作用,使交流和直流噪声抗扰度被改善400mV。
74HC373原理图
3.4与门(74HC00)功能介绍
与门又称“与电路”。执行“与”预算的基本门电路。有几个输入端,只有一个输出端。当所有的输入同时为“1”时,输出才为“1”电平,否者输出为“0”电平。与的含义是:只有当决定一件事情的所有条件都具备时,这个事件才会发生。逻辑与也称逻辑乘。74HC00是一款高速CMOS器件,实现了2输入与非门功能。(如图) 与门表达式:F=A·B “与”门用“AND”表示
A 0 0 1 B 0 1 0 Z 0 0 0 10
单片机课程设计
1 1 1
四、软件设计
4.1代码附录
typedef unsigned int uint; # include # 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 11 单片机课程设计 ,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,0x,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); 12 单片机课程设计 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;} 13 单片机课程设计 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); 14 单片机课程设计 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; 15 单片机课程设计 for(i=0;i lcd_hanzi_wr(row,col,str+i*32); col++;}} void lcd_rol(void) {uchar i; for(i=0;i<;i++) {lcd_cmd_wr(0xc0+i,0); lcd_cmd_wr(0xc0+i,1); delay(10);}} 4.2 Proteus软件介绍 系统仿真用到了Proteus ISIS(电路分析与实物仿真软件)软件,可通过仿真显示出所设计系统的功能,对于程序的调试等有很大的帮助。它可以分析各种模拟器件和集成电路。特点是:①实现了单片机仿真和SPICE电路仿结合。②支持主流单片机系统的仿真。③提供软件调试功能。④具有强大的原理图绘制功能。原理图的工作界面及绘制如图 16 单片机课程设计 Proteus ISIS的工作界面及原理图绘制 4.3Keil C51软件介绍 Keil软件是目前最流行开发单片机的软件,其项目开发流程与其他软件开发项目的流程类似,即: 1.创建一个项目,从器件库中选择目标器件,配置工具设置; 2.用C或汇编语言创建源程序; 3.用项目管理器生成应用程序文件; 4.修改源程序中的错误; 5.测试连接应用。 它的集成编译环境是uVision4,它把C51、A51、BL51等在内的编译、汇编、定位链接、库、转换和模拟等软件集成在一个环境下,开发人员不必分别熟悉和使用这些软件的命令规则,支持所有的数据类型,在直接修改、编译、调试源程序,错误指令定位。支持项目管理功能强大的观察窗口,用于对程序的调试和编辑。其界面如下: 17 单片机课程设计 创建源文件对话框 4.4Proteus与Keil C相结合的设计 打开Keil程序,执行菜单命令Project→New Project创建“LCD”项目,并选择单片机型号为ATC52。 执行菜单命令File→New创建文件,输入C语言源程序,保存为“LCD.C”在Project Workspace项目管理窗口中,右击Source Group 1,选择Add File to Group’Source ,将源程序“LCD.C”添加到项目中。 在Project Workspace项目管理窗口中,选中Target 1,执行菜单命令Project Project →Options for Target’Target1’,在弹出的对话框中选择Output选项卡,选中Creat HEX File。关闭对话框,执行菜单命令Project→ Rebuild all target files,或直接单击工具栏中的“LCD.HEX”。 切换到工作界面到Proteus ISIS的点阵液晶显示器LCD仿真电路,在ATC52元件上双击鼠标左键或点击右键再单击左键打开Edit Component对话框。设置Program File为“LCD.HEX”,Clock Frequency为12MHZ,单击OK关闭对话框。单击仿真运行开始按钮滚动。 ,就可以显示“河南理工大学”六个字符,且向上 图标,编译所有的目标文件,生成 18 单片机课程设计 五、总结 5.1个人心得体会 通过这次对应用于学校的液晶显示器LCD的设计与制作,让我了解了什么是嵌入式系统开发,让我对学习嵌入式系统开发有了一个起点的基础,并学会了两种软件的使用。在这次设计的过程中,刚开始的时候,有点不知所措,因为刚刚学习完单片机,在的带领下做完了四个实验,接着就立即开始做这个课程设计。我预先安装并学习了准备好的C编程与仿真软件,熟悉并掌握了软件的基本操作,怎样在Proteus软件里找元器件,怎样画电路原理图,以及学习并了解每个元器件的功能介绍。怎样在Keil中编写C语言代码以及如何调试,如何与仿真软件相互结合等等,再结合着平时学的和书本上的详细介绍以及在网上收集资料等,遇到解决不了的问题,就在网上和书本上查阅,这个液晶显示器LCD的软件程序都是使用C语言编写的。 这次的LCD课程设计是一个学习新知识、巩固加深所学课本理论知识的过程,它培养了我们综合运用知识的能力,思考和解决问题的能力。它不仅加深了我对单片机原理及应用实例仿真课程的理解,还让我感受到了LCD设计的乐趣。在这次设计中,我反复设计、绘图与修改,就是希望能把这次课程设计做好。因此对我来说,这次应用于学校的液晶显示器LCD课程设计是非常有意义的,从安装软件就开始遇到问题一步步的发现并去解决它,再到画电路图和编写代码遇到的问题,以及Proteus和Keil相结合所遇到的问题等,让我学会了要想解决一个问题必须耐下心并且逐一地去解决。 参考文献 [1]周志光 刘定良 单片机技术与应用[M]长沙:中南大学出版社 2005 [2]张家定 林福严 C52单片机与液晶显示模块的接口设计 2006 [3]崔光亮 单片机原理与接口技术 2007 [4]王新贤 通用集成电路速查手册 2004 19 单片机课程设计 [5]朴燕 全色LED显示器中亮度参数的研究 2007 [6] 刘文涛 单片机语言C51典型应用设计[M]北京:清华大学出版社 2005 [7]张迎新 单片微型计算机原理及接口技术[M]北京:国防工业出版社 1993 [8]曹巧媛 单片机原理及应用[M]北京:电子工业出版社 1997 [9]胡辉 单片机应用系统设计与训练[M]北京:中国水利水电出版社 2004 [10]戴胜华,蒋大明,杨世武 单片机原理与应[M]北京:清华大学出版社,北京交通大学出版社 2005 20
因篇幅问题不能全部显示,请点此查看更多更全内容