资源描述
哈 尔 滨 理 工 大 学 荣 成 学 院
单片机
课程设计
题目:基于液晶12864的显示器
班级:
姓名:
学号:
1 题目简介
1.1概述
随着单片机和显示技术的发展,加上人们不满足单片机系统采用LED数码管的简单显示,利用单片机控制液晶显示成为当前显示系统的主流。12864液晶显示器可以显示字母、数字符号、中文字型及自定图形显示,只要一个最小的微处理系统,将液晶显示模块的接口作为I/O设备直接与之连接,就可以进行控制液晶显示器和数据传输,从而达到理想的显示效果。通过按键可实现单片机对液晶显示汉字的控制。
1.2课程设计题目要求
要求:1 通过单片机控制12864液晶显示
2 按键显示:专业,班级,姓名,学号。
2 实现方案
2.1 89C51单片机简介
◆一个8位CPU;
◆ 一个片内振荡器及时钟电路;
◆ 128字节RAM数据存储器;
◆ 4K字节ROM程序存储器;
◆ 可寻址64K外部数据存储器和64K外部程序存储器空间的控制电路;
◆ 4个8位并行I/O端口;
◆ 一个全双工异步串行口;
◆ 2个16位定时器/计数器;
◆ 具有5个中断源,2个优先级.
2.2 LCD12864简介
带字库的12864液晶显示模块概述
JM12864M-2汉字图形点阵液晶显示模块,可显示汉字及图形,内置8192个中文汉字(16X16点阵)、128个字符(8X16点阵)及64X256点阵显示RAM(GDRAM)。
主要技术参数和显示特性:
电源:VDD 3.3V~+5V(内置升压电路,无需负压);
显示内容:128列× 64行
显示颜色:黄绿
显示角度:6:00钟直视
LCD类型:STN
与MCU接口:8位或4位并行/3位串行
配置LED背光
多种软件功能:光标显示、画面移位、自定义字符、睡眠模式等。
模块引脚说明
引脚号
引脚名称
方向
功能说明
1
VSS
-
模块的电源地
2
VDD
-
模块的电源正端
3
V0
-
LCD驱动电压输入端
4
RS(CS)
H/L
并行的指令/数据选择信号;串行的片选信号
5
R/W(SID)
H/L
并行的读写选择信号;串行的数据口
6
E(CLK)
H/L
并行的使能信号;串行的同步时钟
7
DB0
H/L
数据0
8
DB1
H/L
数据1
9
DB2
H/L
数据2
10
DB3
H/L
数据3
11
DB4
H/L
数据4
12
DB5
H/L
数据5
13
DB6
H/L
数据6
14
DB7
H/L
数据7
15
PSB
H/L
并/串行接口选择:H-并行;L-串行
16
NC
空脚
17
/RET
H/L
复位 低电平有效
18
NC
空脚
19
LED_A
(LED+5V)
背光源正极
20
LED_K
(LED-OV)
背光源负极
接口时序
8位并行连接时序图
MPU写资料到模块
MPU从模块读出资料
汉字显示坐标
X坐标
Line1
80H
81H
82H
83H
84H
85H
86H
87H
Line2
90H
91H
92H
93H
94H
95H
96H
97H
Line3
88H
89H
8AH
8BH
8CH
8DH
8EH
8FH
Line4
98H
99H
9AH
9BH
9CH
9DH
9EH
9FH
3 电路原理图
系统的总体框图和电路与原理图
整个系统主要由STC89C51芯片、LCD12864液晶和矩阵键盘构成,具体如下图1所示:
LCD12864
D0---D7
RS
RW
EN
PSB
STC89C51
P0口
P3口
P2.2
P2.1
P2.0
P2.3
按键
图1.系统整体框图
4 程序流程图
开始
89C51初始化
12864初始化
检测12864忙状态
是
向12864写命令
向12864写数据
检测是否有键按下
否
延时去抖
检测是否有键按下
否
判断键,显示相应字
5 软件设计源程序
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define LCD_data P0 //数据口
sbit LCD_RS = P2^2; //寄存器选择输入
sbit LCD_RW = P2^1; //液晶读/写控制
sbit LCD_EN = P2^0; //液晶使能控制
sbit LCD_PSB = P2^3; //串/并方式控制
sbit key1=P3^4;
sbit key2=P3^5;
sbit key3=P3^6;
sbit key4=P3^7;
sbit wela = P2^6;
sbit dula = P2^7;
uchar code dis1[] = {"电气工程及自动化"};
uchar code dis2[] = {"14-7班"};
uchar code dis3[] = {"李平"};
uchar code dis4[] = {"1430070710"};
uchar code dis5[] = {"电气工程及自动化"};
uchar code dis6[] = {"14-7班"};
uchar code dis7[] = {"李清鹏"};
uchar code dis8[] = {"1430070711"};
uchar code dis9[] = {"电气工程及自动化"};
uchar code dis10[] = {"14-7班"};
uchar code dis11[] = {"李翔然"};
uchar code dis12[] = {"1430070712"};
uchar code dis13[] = {"电气工程及自动化"};
uchar code dis14[] = {"14-7班"};
uchar code dis15[] = {"李兴宇"};
uchar code dis16[] = {"1430070713"};
void lcd_pos(uchar X,uchar Y); //确定显示位置
void lcd_wstr(uchar str[]);
void keyscan();
uchar num;
void delayms(uchar n)
{
uchar i;
while(n--)
{
for(i=0;i<113;i++);
}
}
void delayus()
{
_nop_();
}
void lcd_busy()
{
bit busy=1; //bit强制转换成位
while(busy)
{
LCD_RS = 0; //命令寄存器
LCD_RW = 1; //读操作
LCD_EN = 1;
busy=(bit)(P0&0x80);
delayus();
}
LCD_EN = 0; //由高电平变成低电平,液晶模块执行命令
}
void lcd_wcmd(uchar cmd)
{
lcd_busy();
LCD_RS = 0; //命令寄存器
LCD_RW = 0; //写操作
LCD_EN = 1;
P0 = cmd;
delayus();
LCD_EN = 0;
}
void lcd_wdat(uchar dat)
{
lcd_busy();
LCD_RS = 1; //数据寄存器
LCD_RW = 0; //写操作
LCD_EN = 1;
P0 = dat;
delayus();
LCD_EN = 0;
}
void lcd_init()
{
LCD_PSB = 1; //并口方式(并/串行接口选择:1-并行,0-串行)
lcd_wcmd(0x34); //扩充指令操作
delayms(5);
lcd_wcmd(0x30); //基本指令操作
delayms(5);
lcd_wcmd(0x0C); //开显示,关光标
delayms(5);
lcd_wcmd(0x01); //清除LCD的显示内容
delayms(5);
}
void main()
{
delayms(10); //延时
wela=0;
dula=0;
lcd_init(); //初始化LCD
while(1)
{
keyscan();
}
}
void lcd_pos(uchar X,uchar Y)
{
uchar pos;
if (X==0)
{X=0x80;}
else if (X==1)
{X=0x90;}
else if (X==2)
{X=0x88;}
else if (X==3)
{X=0x98;}
pos = X+Y ;
lcd_wcmd(pos); //显示地址
}
void lcd_wstr(uchar str[])
{
uchar num=0;
while(str[num])
{
lcd_wdat(str[num++]);
delayms(1);
}
}
void keyscan()
{
if(key1==0)
{
delayms(10);
if(key1==0)
{
lcd_pos(0,0); //设置显示位置为第一行的第1个字符
lcd_wstr(dis1); //显示字符
lcd_pos(1,0); //设置显示位置为第二行的第1个字符
lcd_wstr(dis2); //显示字符
lcd_pos(2,0); //设置显示位置为第三行的第1个字符
lcd_wstr(dis3); //显示字符
lcd_pos(3,0); //设置显示位置为第四行的第1个字符
lcd_wstr(dis4); //显示字符
delayms(500);
}
}
if(key2==0)
{
delayms(10);
if(key2==0)
{
lcd_pos(0,0); //设置显示位置为第一行的第1个字符
lcd_wstr(dis5); //显示字符
lcd_pos(1,0); //设置显示位置为第二行的第1个字符
lcd_wstr(dis6); //显示字符
lcd_pos(2,0); //设置显示位置为第三行的第1个字符
lcd_wstr(dis7); //显示字符
lcd_pos(3,0); //设置显示位置为第四行的第1个字符
lcd_wstr(dis8); //显示字符
delayms(500);
}
}
if(key3==0)
{
delayms(10);
if(key3==0)
{
lcd_pos(0,0); //设置显示位置为第一行的第1个字符
lcd_wstr(dis9); //显示字符
lcd_pos(1,0); //设置显示位置为第二行的第1个字符
lcd_wstr(dis10); //显示字符
lcd_pos(2,0); //设置显示位置为第三行的第1个字符
lcd_wstr(dis11); //显示字符
lcd_pos(3,0); //设置显示位置为第四行的第1个字符
lcd_wstr(dis12); //显示字符
delayms(500);
}
}
if(key4==0)
{
delayms(10);
if(key4==0)
{
lcd_pos(0,0); //设置显示位置为第一行的第1个字符
lcd_wstr(dis13); //显示字符
lcd_pos(1,0); //设置显示位置为第二行的第1个字符
lcd_wstr(dis14); //显示字符
lcd_pos(2,0); //设置显示位置为第三行的第1个字符
lcd_wstr(dis15); //显示字符
lcd_pos(3,0); //设置显示位置为第四行的第1个字符
lcd_wstr(dis16); //显示字符
delayms(500);
}
}
}
6 总结
在单片机这种硬件课设中,最关键是要有耐心,不可能一次成功,要不断的调试,有时候显示出来的不是我们想要的结果,要一次次反复的实验,才有可能达到目的。这同时也是一个学习与进步的过程,可以帮助我们发现问题,学习寻找解决问题的办法,最终学到知识,提高本领,掌握技能。
在这次课设中,非常感谢老师的指导和其他队友的合作。
7 参考文献
1. 单片机原理及应用及(C51编程),李全利主编,高等教育出版社。
目 录
第1章 总 论 3
1.1. 项目背景与概况 3
1.2. 主要技术经济指标 7
1.3. 问题与建议 8
第2章 项目投资环境与市场研究 9
2.1. 投资环境分析 9
2.2. 区域房地产市场分析 11
2.3. 销售预测 15
2.4. 营销策略 19
第3章 建设规模与项目开发条件 21
3.1. 建设规模 21
3.2. 项目概况现状 21
3.3. 项目建设条件 22
第4章 建筑方案 26
4.1. 设计依据 26
4.2. 项目设计主题和开发理念 26
4.3. 项目总体规划方案 27
4.4. 建筑设计 28
4.5. 结构设计 29
4.6. 给排水设计 30
第5章 节能节水措施 32
5.1. 设计依据 32
5.2. 建筑部分节能设计 32
第6章 环境影响评价 33
6.1. 编制依据 33
6.2. 环境现状 33
6.3. 项目建设对环境的影响 34
6.4. 环境保护措施 34
第7章 劳动卫生与消防 35
7.1. 指导思想 35
7.2. 职业安全卫生健康对策与措施 35
7.3. 消防设计 36
第8章 组织机构与人力资源配置 38
8.1. 组织机构 38
8.2. 人力资源配置 38
第9章 项目实施进度 39
9.1. 项目开发期 39
9.2. 项目实施进度安排 39
9.3. 项目实施过程控制措施 39
第10章 项目招投标 41
10.1. 工程项目招标投标概述 41
10.2. 工程项目招标投标因素分析 42
10.3. 招标依据 44
10.4. 招标范围 44
10.5. 招标方式 44
第11章 投资估算与资金筹措 45
11.1. 投资估算 45
11.2. 资金筹措 45
第12章 财务评价 47
12.1. 项目评估依据 47
12.2. 财务评价基础数据的选择 47
12.3. 财务评价 47
12.4. 不确定性分析 48
第13章 社会评价 49
13.1. 项目对社会的影响分析 49
13.2. 风险分析 50
13.3. 社会评价结论 51
第14章 研究结论与建议 52
14.1. 可行性研究结论 52
14.2. 建议 52
展开阅读全文