资源描述
目 录
一.课程设计目
二.设计规定
三.课程设计报告内容
3.1系统设计思路与框图
3.2 整体方案设计
3.2.1单片机选取
3.2.2 液晶12864LCD
3.2.3电路硬件设计
3.2.4 总成电路简介
四 .详细功能程序及硬件实现
4.1软件程序某些编写
4.2软件仿真运营
五 参照文献
一.课程设计目
嵌入式课程设计是配合其理论课程而设立设计性实践课程。其教学目和任务是:使学生在学习专业技术基本和重要专业课程基本上,学习和掌握嵌入式系统技术基本知识和办法,培养学生综合运用所学专业基本理论、基本技能和专业知识分析问题和解决工程设计问题能力,培养学生调查研究,查阅技术文献、资料、手册,进行程序设计、电路图纸绘制及编写技术文献基本能力。本次设计本人重要是做液晶中文显示设计,其目规定有如下两点:
初步掌握液晶屏使用及其电路设计办法。
掌握液晶显示中文及图形办法与程序设计。
二.设计规定
在12864液晶显示屏上第一行第一列开始显示“名字:”,第二行第一列开始显示“班级:”,第三行第一列开始显示“学号:”。
使用proteus仿真软件,解决器任选(51单片机、ARM解决器皆可),绘制电路原理图,通过使用128x64点阵液晶屏进行电路设计,掌握液晶屏作为人机接口界面设计办法,并编写程序实现。
三.课程设计报告内容
本次仿真设计目就是让同窗们在理论学习基本上,通过完毕一种涉及MCS—51单片机都种资源应用并具备综合功能小系统目的板设计与编程应用,使学生不但可以将课堂上学到理论知识与实际应用结合起来,并且可以对电子电路、电子元器件、印制电路板等方面知识进一步加深结识,同步在软件编程、排版调试、焊接技术、有关仪器设备使用技能等方面得到较全面锻炼和提高,为此后可以独立进行某些单片机应用系统开发设计工作打下一定基本。
3.1系统设计思路与框图
图-1 设计流程图
图-2 系统设计框图
3.2 整体方案设计
3.2.1单片机选取
单片机微型计算机是微型计算机一种重要分支,也是颇具生命力机种。单片机微型计算机简称单片机,特别合用于控制领域,故又称为微控制器。普通,单片机由单块集成电路芯片构成,内部包具有计算机基本功能部件:中央解决器、存储器和I/O接口电路等。因而,单片机只需要和恰当软件及外部设备相结合,便可成为一种单片机控制系统。单片机通过1、2、3、3代发展,正朝着多功能、高性能、低电压、低功耗、低价格、大存储容量、强I/O功能及较好构造兼容性方向发展。其发展趋势不外乎如下几种方面:
1、多功能
单片机中尽量地把所需要存储器和I/O口都集成在一块芯片上,使得单片机可以实现更多功能。例如A/D、PWM、PCA(可编程计数器阵列)、WDT(监视定期器---看家狗)、高速I/O口及计数器捕获/比较逻辑等。
有单片机针对某一种应用领域,集成了有关控制设备,以减少应用系统芯片数量。例如,有芯片以51内核为核心,集成了USB控制器、SMART CARD接口、MP3解码器、CAN或者I*I*C总线控制器等,LED、LCD或VFD显示驱动器也开始集成在8位单片机中。
2、高效率和高性能
为了提高执行速度和执行效率,单片机开始使用RISC、流水线和DSP设计技术,使单片机性能有了明显提高,体现为:单片机时钟频率得到提高;同样频率单片机运营效率也有了很大提高;由于集成度提高,单片机寻址能力、片内ROM(FLASH)和RAM容量都突破了以往数量和限制。
由于系统资源和系统复杂限度增长,开始使用高档语言(如C语言)来开发单片机程序。使用高档语言可以减少开发 难度,缩短开发周期,增强软件可读性和可移植性,便于改进和扩充功能。
3、低电压和低功耗
单片机嵌入式应用决定了低电压和低功耗特性十分重要。由于CMOS等工艺大量采用,诸多单片机可以在更低电压下工作(1.2V或0.9V),功耗已经减少到uA级。这些特性使得单片机系统可以在更小电源支持下工作更长时间。
4、低价格
单片机应用面广,使用数量大,带来直接好处就是成本减少。当前世界各大公司为了提高竞争力,在提高单片机性能同步,十分注意减少其产品价格。
AT89C51是一种低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)可重复擦写1000次Flash只读程序存储器,器件采用ATMEL公司高密度、非易失性存储技术制造,兼容原则MCS-51指令系统及80C51引脚构造,芯片内集成了通用8位中央解决器和ISP Flash存储单元,功能强大。
AT89C51构造
1、四个8位通用I/O端口,相应引脚P0、P1、P2和P3;
2、两个16位定期计数器;(TMOD,TCON,TL0,TH0,TL1,TH1)
3、一种串行通信接口;(SCON,SBUF)
4、一种中断控制器;(IE,IP)
3.2.2 液晶12864LCD
12864中文/图形点阵液晶显示模块可以显示字母、数字符号、中文字型及图形,具备绘图及文字画面混合显示功能。提供三种控制接口,分别是8位微解决器接口,4位微解决器接口及串行接口。所有功能,包括显示RAM,字型产生器,都包括在一种芯片里面,只要一种最小微解决系统,就可以以便操作模块。内置2M-位中文字型ROM (CGROM) 总共提供8192 个中文字型(16x16 点阵),16K-位半宽字型ROM(HCGROM) 总共提供126 个符号字型(16x8 点阵),64 x 16-位字型产生RAM (CGRAM),此外绘图显示画面提供一种64x256点绘图区域(GDRAM),可以和文字画面混和显示。提供多功能指令:画面清除(Displayclear)、光标归位(Return home)、显示打开/关闭(Display on/off)、光标显示/隐藏(Cursor on/off)、显示字符闪烁(Display character blink)、光标移位(Cursor shift)显示移位(Display shift)、垂直画面旋转(Vertical line scroll)、反白显示(By_line reverse display)、待命模式(Standby mode)等。重要参数:
1、工作电压(VDD):4.8~5.2V。
2、逻辑电平:2.7~5.5V。
3、LCD 驱动电压(Vo):0~7V。
4、工作温度(Ta):0~55℃(常温)/-20~70℃(宽温) 保存温度(Tstg):-10~65℃(常温)/-30~80℃(宽温)。
1.引脚功能
引脚符号
状态
引脚名称
功能
,
输入
芯片片选端,都是低电平有效
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列点。
(四)读状态指令
(五)cs1和cs2屏幕选取阐明
3.2.3电路硬件设计
(一) 复位电路
单片机复位是由外部复位电路来实现。复位引脚RST通过一种斯密特触发器与复位电路相连,斯密特触发器用来抑制噪声,在每个机器周期S5P2,斯密特触发器输出电平由复位电路采样一次,然后才干得到内部复位操作所需要信号。
上电复位:上电复位电路是—种简朴复位电路,只要在RST复位引脚接一种电容到VCC,接一种电阻到地就可以了。上电复位是指在给系统上电时,复位电路通过电容加到RST复位引脚一种短暂高电平信号,这个复位信号随着VCC对电容充电过程而回落,因此RST引脚复位高电平维持时间取决于电容充电时间。为了保证系统安全可靠复位,RST引脚高电平信号必要维持足够长时间。
复位电路
上电自动复位是通过外部复位电路电容充电来实现。只要Vcc上升时间不超过1ms,就可以实现自动上电复位。
(二) 时钟电路
时钟是单片机心脏,单片机各功能部件运营都是以时钟频率为基准,有条不紊一拍一拍地工作。因而,时钟频率直接影响单片机速度,时钟电路质量也直接影响单片机系统稳定性。惯用时钟电路有两种方式:一种是内部时钟方式,另一种为外部时钟方式。本文用是内部时钟方式。
时钟电路
AT89—C51单片机内部有一种用于构成振荡器高增益反相放大器,该高增益反向放大器输入端为芯片引脚XTAL1,输出端为引脚XTAL2。这两个引脚跨接石英晶体振荡器和微调电容,就构成一种稳定自激振荡器。
3.2.4 总成电路简介
由以上对电路总成设计,咱们选用了AT89C51单片机LGM128641BS1R液晶作为咱们本次设计电子元器件。此外,相较于系统设计框图在液晶显示模块控制芯片调控上,对复位引脚处以简朴开关复位电路控制,而电压地VSS及LCD操作电压以变阻器控制。
四 .详细功能程序及硬件实现
4.1软件程序某些编写
中文液晶显示工作原理:液晶显示屏屏幕是靠无数个小灯泡来显示图象,就像是普通灯泡,排满几平米然后点亮相应灯泡就能在高出看出你想要字或图形.液晶显示屏道理和这个同样,就是无数个小灯炮排满屏幕,只是这个小灯泡只有零点几毫米甚至微米面积.依照这一原理,咱们可以通过对液晶显示屏点阵通电排列使得各个液晶亮与灭来实现液晶规律性显示。
对于本次设计,第一行第一列开始显示“名字:”,第二行第一列开始显示“班级:”,第三行第一列开始显示“学号:”。故此,编程如下:
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
//下面是中文点阵数据,一种中文有32字节数据构成
unsigned char code ming[]= // 名
{
0x00,0x20,0x20,0x10,0x08,0x14,0x67,0x84,0x44,0x24,0x14,0x0C,0x00,0x00,0x00,0x00,
0x04,0x04,0x04,0x02,0xFE,0x43,0x43,0x42,0x42,0x42,0x42,0x42,0xFE,0x00,0x00,0x00,
};
unsigned char code zi[]= //字
{
0x10,0x0C,0x04,0x24,0x24,0x24,0x25,0x26,0xA4,0x64,0x24,0x04,0x04,0x14,0x0C,0x00,
0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,
};
unsigned char code ban[]= //班
{
0x84,0x84,0xFC,0x84,0x84,0x00,0xF8,0x00,0xFF,0x00,0x84,0x84,0xFC,0x84,0x84,0x00,
0x10,0x30,0x1F,0x08,0x88,0x42,0x21,0x18,0x07,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,
};
unsigned char code ji[]= //级
{
0x20,0x30,0xAC,0x63,0x30,0x00,0x02,0x02,0xFE,0x02,0x02,0x62,0x5A,0xC6,0x00,0x00,
0x22,0x67,0x22,0x12,0x12,0x40,0x30,0x8F,0x80,0x43,0x2C,0x10,0x2C,0x43,0x80,0x00,
};
unsigned char code xue[]= //学
{
0x40,0x30,0x11,0x96,0x90,0x90,0x91,0x96,0x90,0x90,0x98,0x14,0x13,0x50,0x30,0x00,
0x04,0x04,0x04,0x04,0x04,0x44,0x84,0x7E,0x06,0x05,0x04,0x04,0x04,0x04,0x04,0x00,
};
unsigned char code hao[]= //号
{
0x80,0x80,0x80,0xBE,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xBE,0x80,0x80,0x80,0x00,
0x00,0x00,0x00,0x06,0x05,0x04,0x04,0x04,0x44,0x84,0x44,0x3C,0x00,0x00,0x00,0x00,
};
unsigned char code fu[]= //冒号
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00
};
sbit CS1=P2^0; //片选1,低电平有效,CS1=0开左屏幕,CS1=1关左屏幕
sbit CS2=P2^1; //片选2,低电平有效,CS2=0开右屏幕,CS2=1关右屏幕
sbit RS=P2^2; //数据,指令选取信号,RS=1为数据操作,RS=0为写指令或读状态(普通为读忙标志)
sbit RW=P2^3; //读写选取信号,RW=1为读选通,RW=0为写选通
sbit EN=P2^4; //读写使能信号
void busy() //忙检测函数
{P0=0X00; //这句不能少
RS=0;
RW=1;
EN=1;
while(P0&0X80); //P0&0X80成果为真则始终执行空操作,也就是说P0&0X80为0则结束循环
EN=0;
}
void wcmd(uchar cmd)
{busy(); //每次写入指令或数据之前都进行忙检测
RS=0;
RW=0;
P0=cmd;
EN=1;_nop_();_nop_(); //在EN下降沿写入数据和指令
EN=0;
}
void wdata(uchar dat) //写命令和写数据只在RS=0或RS=1上不同,别的都相似
{busy();
RS=1;
RW=0;
P0=dat;
EN=1;_nop_();_nop_(); //在EN下降沿写入数据和指令
EN=0;
}
void set_page(uchar page) //设立页,12864LCD共有8页,每页有8行点阵点。
{page=0xb8|page; //首页地址为0XB8
wcmd(page); //page取值范畴为0~7,表达第1到8页
}
void set_line(uchar line) //设立显示起始行,共有0——63行,普通从0行开始显示
{line=0xc0|line; //起始行地址0XC0
wcmd(line); //line取值范畴为0~63,表达第1到64行
}
void set_column(uchar column) //设立显示列
{
column=column&0x3f; //列最大值为0X3F,即64
column=0x40|column; //列首地址为0X40,
wcmd(column); //column取值范畴为0~63,共64列
}
void set_onoff(uchar onoff) //设立显示开关,onoff取值为0或1
{onoff|=0x3e; //0X3E是关显示,0X3F是开显示
wcmd(onoff); //因此若onoff为0,则表达关显示,onoff为1,则表达开显示
}
void select_screen(uchar screen) //选屏,screen取值范畴为0,1,2
{switch(screen)
{case 0:CS1=0;CS2=0;break;//全屏
case 1:CS1=0;CS2=1;break; //左半屏
case 2:CS1=1;CS2=0;break; //右半屏
default:break;
}
}
void clear_screen(uchar screen) //清屏
{uchar i,j;
select_screen(screen); //先选屏
for(i=0;i<8;i++) //控制页数0——7,共8页
{set_page(i); //设立页
set_column(0); //设立列,每页都从第1列开始,共64列
for(j=0;j<64;j++) //控制列数0——63,共64列
wdata(0x00); //写入0,列地址指针会自动加1
}
}
void init() //LCD初始化
{busy(); //忙检测
select_screen(0); //选屏,全屏
set_onoff(0); //关显示
select_screen(0); //选屏,全屏
set_onoff(1); //开显示
select_screen(0); //选屏,全屏
clear_screen(0); //清屏
set_line(0); //起始行:0
}
void show(uchar screen,uchar page,uchar column,uchar *p)//显示一种中文,一种中文有32字节数据
{uchar i; //screen表达选取屏幕,page表达页,column表达列,*p表达中文数组
select_screen(screen); //选屏
set_page(page); //设立页,写上半页
set_column(column); //设立列
for(i=0;i<16;i++) //控制16列数据输出
wdata(p[i]); //中文上半某些
set_page(page+1); //写下半页
set_column(column); //控制列
for(i=0;i<16;i++) //控制16列数据输出
wdata(p[i+16]); //中文下半某些
}
void main()
{init(); //LCD初始化
clear_screen(0); //清屏
set_line(0); //显示开始行
//1表达左屏显示,0表达从0页开始显示。由于一页只有8行点,
//而显示一种中文需要16行点(整屏有64行点),因此显示一种中文需要2页
//第0页显示“欢”字上半某些,第1页显示“欢”中文下半某些
//2*16表达从第32列开始显示,前面空出0~31列(即2鲋幕茅
show(2,0,0*16,ming);//名
//1表达左屏显示,0表达从0页开始显示
//3*16表达从第48列开始显示,前面空出0~477列(即3个褐幕茅
show(2,0,1*16,zi);//字
//2表达右屏显示,0表达从0页开始显示
show(2,0,2*16,fu); //0*16表达从第0列开始显示(即第一种褐幕茅
show(2,2,0*16,ban);//班
//1*16表达从第16列开始显示,前面空出0~15列(即一种中文位置)
show(2,2,1*16,ji); //级
show(2,2,2*16,fu);
//左屏开,从第3页(共8页)第0列开始显示,即第3,4页显示”伊人憔悴百度空间“几种字
show(2,4,0*16,xue); //学
show(2,4,1*16,hao); //号
show(2,4,2*16,fu);
while(1);
}
4.2软件仿真运营
对所写软件进行认真细致检查,确认无误后,把程序写入到AT89C51单片机内,并通过protues仿真软件进行仿真试运营。如有错误地方,其检测系统会提示错误点,则咱们需要进一步调试。若无误,则可以完毕本次实验设计任务。运营如下:
五 参照文献
[1] 钟承尧.严世胜. 单片机中文显示系统设计[J]. 学术探讨应用技术与研究,:70-71.
[2] 张洪润. 单片机应用设计200例.下(第一版).北京航空航天大学出版社,.
[3] 彭伟. 单片机C语言程序设计实训100例:基于 8051+Proteus仿真 北京:电子工业出版社,.06
展开阅读全文