液晶显示器的C语言程序设计——Freescale8位微控制器
LCD1602的电路图和程序

LCD1602的电路图和程序————————————————————————————————作者:————————————————————————————————日期:MS基于1602字符型液晶显示器的显示系统姓名:杨越班级:电子11-1学号:110400104一、实习目的(1)了解飞思卡尔单片机的基本原理,掌握其基本的工作流程。
(2)了解LCD1602的基本原理及用法。
(3)能够熟练使用CodeWarrior软件编写C语言程序,使用BDM仿真器下载程序。
(4)能够熟练焊接电路板。
二、实验设备与器件CodeWarrior软件,BDM仿真器,万用电路板,飞思卡尔单片机,LCD1602液晶显示器,三、实验内容内容:利用飞思卡尔单片机制作基于1602字符液晶显示器的显示系统要求:用四个按键控制,按下第一个按键显示1,按下第二个按键显示2,以此类推。
(1)LCD1602液晶显示器的原理:1602共16个管脚,但是编程用到的主要管脚不过三个,分别为:RS(数据命令选择端),R/W(读写选择端),E(使能信号);以后编程便主要围绕这三个管脚展开进行初始化,写命令,写数据。
以下具体阐述这三个管脚:RS为寄存器选择,高电平选择数据寄存器,低电平选择指令寄存器。
R/W为读写选择,高电平进行读操作,低电平进行写操作。
E端为使能端,后面和时序联系在一起。
除此外,D0~D7分别为8位双向数据线。
操作时序:RS R/W 操作说明0 0 写入指令码D0~D70 1 读取输出的D0~D7状态字1 0 写入数据D0~D71 1 从D0~D7读取数据注:关于E=H脉冲——开始时初始化E为0,然后置E为1,再清0.读取状态字时,注意D7位,D7=1,禁止读写操作;D7=0,允许读写操作;所以对控制器每次进行读写操作前,必须进行读写检测。
(即后面的读忙子程序)指令集:LCD_1602 初始化指令小结:0x38 设置16*2显示,5*7点阵,8位数据接口0x01 清屏0x0F 开显示,显示光标,光标闪烁0x08 只开显示0x0e 开显示,显示光标,光标不闪烁0x0c 开显示,不显示光标0x06 地址加1,当写入数据的时候光标右移0x02 地址计数器AC=0;(此时地址为0x80)光标归原点,但是DDRAM 中断内容不变0x18 光标和显示一起向左移动(2)飞思卡尔单片机的功能及特点:MC9S12XS128是 16 位单片机,由 16 位中央处理单元(CPU12X)、128KB 程序、Flash(P-lash)、8KB RAM、8KB 数据 Flash(D-lash)组成片内存储器。
单片机课程设计说明书

苏州市职业大学课程设计说明书名称贪吃蛇2013年1月7日至2013年1月11日共1周院系计算机工程系.班级11应用技术.学号116312126 25 40 .姓名郁敏伟俞佳丽张冯.系主任李金祥.教研室主任刘文芝.指导教师徐丽华、郑洪静.目录一课程设计的目的与要求 (2)1.课程设计的目的 (2)2.课程设计的要求 (2)二题目说明 (2)2.1开发背景 (2)2.2 开发工具介绍 (3)2.2.1 CodeWarrior (3)2.2.2写入器 (4)2.2.3 MC9S08AW60 (7)2.3 小组成员分工 (9)三硬件方案 (9)3.1主控MCU (9)3.2键盘 (10)3.3 LCD液晶 (10)3.4 定时器 (12)3.5 小灯及蜂鸣器 (12)3.6 AW60最小系统 (13)四软件方案 (14)4.1 模块结构图 (14)4.2 模块划分 (14)4.2.1 键盘中断模块 (14)4.2.2 LCD液晶显示器模块 (15)4.2.3 定时器中断模块 (15)4.2.4 蜂鸣器模块 (15)4.2.5 小灯模块 (15)4.3 键盘中断模块和定时器中断模块 (16)4.3.1键盘中断模块 (16)4.3.2定时器中断模块 (16)五运行结果分析与系统改进 (18)六遇到的问题和解决方法 (19)七课程设计总结 (20)八参考文献 (20)一课程设计的目的与要求1.课程设计的目的本设计旨在进一步掌握单片机理论知识,理解嵌入式单片机系统的软件设计,加强对实际应用系统设计的能力。
《单片机原理与应用》是一门应用性很强的专业课,其理论与实践技能是从事嵌入式专业技术工作的人员所不可少的。
此次课程设计选择AW60实验板进行模拟应用设计与开发,要求学生掌握使用 C 语言进行单片机程序设计和调试的方法,提高综合运用所学的理论知识独立分析和解决问题的能力。
2.课程设计的要求在本课程设计过程中我们要遵守以下规则:重视课程设计环节,用严谨、科学和踏实的工作态度对待课程设计的每一项任务;按照课程设计的题目要求,独立地完成各项任务,不允许相互抄袭;按时到机房上机,并接受教师的检查。
液晶显示器的程序设计

液晶显示器的程序设计概述液晶显示器(Liquid Crystal Display,简称LCD)是一种常见的显示设备,广泛应用于计算机、电视、方式等电子设备中。
液晶显示器的程序设计是为了控制和管理液晶显示器的工作,包括显示图像、显示文字、调节亮度和对比度等功能。
LCD控制器液晶显示器的控制是通过液晶显示器控制器(LCD Controller)进行的。
LCD控制器是一种专门设计的芯片,用于控制液晶显示器的各个参数和功能。
LCD控制器的主要任务是将输入的图像数据转换为适合液晶显示器显示的信号,并发送给液晶显示器。
显示图像在液晶显示器的程序设计中,显示图像是最基本的功能之一。
通常,液晶显示器的图像数据是以像素(Pixel)的形式存储和传输的。
程序设计需要将要显示的图像数据转换为液晶显示器可识别的信号,并设置显示的坐标和尺寸。
程序还需要处理图像的刷新和更新,以保持显示的连续性和流畅性。
显示文字液晶显示器还可以显示文字信息。
在程序设计中,显示文字需要使用字符编码和字库来实现。
字符编码是将字符映射为相应的二进制代码的过程,而字库是存储和管理字符的集合。
程序设计需要将要显示的文字信息转换为相应的字符编码,并从字库中获取对应的字符数据。
然后,将字符数据转换为液晶显示器可识别的信号,并设置显示的位置和样式。
调节亮度和对比度液晶显示器的亮度和对比度是可以调节的。
在程序设计中,调节亮度和对比度需要通过设置LCD控制器的参数来实现。
可以通过增加或减少LCD控制器的驱动电流、PWM调光等方式来调节液晶显示器的亮度。
对比度的调节则可以通过调整LCD控制器的电压差或电压偏置等来实现。
动态效果液晶显示器的程序设计还可以实现一些动态效果,如渐变、闪烁、滚动等。
这些动态效果可以通过在程序中控制图像和文字的显示位置、透明度、曝光时间等来实现。
程序设计需要根据实际需求,对液晶显示器的参数进行精确控制,以实现所需的动态效果。
液晶显示器的程序设计包括显示图像、显示文字、调节亮度和对比度等功能,以及实现一些动态效果。
实验八_LCM1602液晶显示实验

实验九 LCM1602液晶显示实验一、实验目的1.掌握keil C51软件与protues软件联合仿真调试的方法;2.掌握LCM1602液晶模块显示西文的原理及使用方法;3.掌握用8位数据模式驱动LCM1602液晶的C语言编程方法;二、实验内容1.用protues设计一LCM1602液晶显示接口电路。
要求利用P0接LCM1602液晶的数据端,P2.0~P2.2做LCM1602液晶的控制信号输入端。
P3.0~P3.4口扩展4个功能键K1~K4,电路如下2.编写程序,实现字符的静态和动态显示,字符为第一行“姓名全拼”第二行“专业全拼+学号”。
液晶的初始化,字符显示程序可参考官网的程序文件。
3.编写程序,利用功能键实现字符的纵向滚动和横向滚动等效果显示,主程序静态显示“My Informatiom”,显示字符如下:1.姓名全拼2.专业全拼+学号3.MCS-51 EXP84.LCD DISPLAY ”三.实验步骤1.用Protues设计1602液晶显示接口电路;2.在Keil51中编写液晶显示控制程序,编译通过后,与Protues联合调试;3.按功能键,观察字符及效果是否正确显示;四.实验电路2五.实验程序1静态#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar code table[]="1.wanglin"; uchar code table1[]="2.tongxin 517"; sbit lcden=P2^2;sbit lcdrs=P2^0;uchar num;void delay(uint z){ uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void write_com(uchar com){ lcdrs=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;}void write_data(uchar date) { lcdrs=1;P0=date;delay(5);lcden=1;delay(5);lcden=0;}void init(){ lcden=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80+0x1);}void main(){ init();while(1){write_com(0x80);for(num=0;num<10;num++){write_data(table[num]);delay(300);}write_com(2);write_com(0x80+0x40);for(num=0;num<13;num++){write_data(table1[num]);delay(300);}}}1动态#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar code table[]="1.wanglin"; uchar code table1[]="2.tongxin 517"; sbit lcden=P2^2;sbit lcdrs=P2^0;uchar num;void delay(uint z){ uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void write_com(uchar com){ lcdrs=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;}void write_data(uchar date){ lcdrs=1;P0=date;delay(5);lcden=1;delay(5);lcden=0;}void init(){ lcden=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80+0x1);}void main(){ init();while(1){write_com(0x80);for(num=0;num<10;num++){write_data(table[num]);delay(300);}write_com(2);write_com(0x80+0x40);for(num=0;num<13;num++){write_data(table1[num]);delay(300);}write_com(1);}}2#include<reg51.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intsbit lcden=P2^2;sbit lcdrs=P2^0;sbit lcdrw=P2^1;sbit busy=P0^7;sbit K1=P3^0;sbit K2=P3^1;bit flag1,flag2,flag3,flag4;uchar num,i;uchar code tab[]="My information!"; uchar code tab1[]="1.wanglin";uchar code tab2[]="2.tongxin 517"; uchar code tab3[]="3.MCS-51 EXP8"; uchar code tab4[]="4.LCD DISPLAY";void LCD_check_busy() {while(1){lcden=0;lcdrs=0;lcdrw=1;P0=0xff;lcden=1;if(busy==0) break;}lcden=0;}void delay(uint x){while(x--);}void delay_ms(uint x){int a,b;for(a=x;a>0;a--)for(b=110;b>0;b--);}void write_com(uchar com) {LCD_check_busy();lcdrs=0;lcden=0;lcdrw=0;P0=com;lcden=1;lcden=0;}void write_dat(uchar dat) {LCD_check_busy();lcdrs=1;P0=dat;delay(5); lcdrw=0;lcden=1;lcden=0;}void lcd_init(){lcden=0;write_com(0x38);write_com(0x0f);write_com(0x06);}void write_str(uchar *str){while(*str!='\0'){while(flag3);if(flag4){ write_com(0x01); break; } write_dat(*str) ;str++;delay_ms(50);}}void main(){uchar *ptr=tab;uchar*p=tab1,*q=tab2,*m=tab3,*n=tab4;TMOD=0x00;TH0=(65536-20000)/256;TL0=(65536-20000)%256;TR0=1;ET0=1;EX0=1;EX1=1;IT0=IT1=1;EA=1;PX1=1;lcd_init();while(1){write_com(01);write_com(0x80+0x00);for(i=0;i<15;i++){if(flag1|flag2) break;write_dat(tab[i]);delay_ms(100);}while(flag1==1){write_com(0x01);write_com(0x80+0x00);write_str(p);if(flag4){ flag4=0; break;}write_com(0xc0+0x00);write_str(q);if(flag4){ flag4=0; break;}delay_ms(800);write_com(0x01);write_com(0x80+0x00);write_str(q);if(flag4){ flag4=0; break;}write_com(0xc0+0x00);write_str(m);if(flag4){ flag4=0; break;}delay_ms(800);write_com(0x01);write_com(0x80+0x00);write_str(m);if(flag4){flag4=0; break;}write_com(0xc0+0x00);write_str(n);if(flag4){flag4=0; break;}delay_ms(800);write_com(0x01);write_com(0x80+0x00);write_str(n);if(flag4){ flag4=0; break;}write_com(0xc0+0x00);write_str(p);if(flag4){ flag4=0; break;}delay_ms(800);}while(flag2==1){write_com(0x01); write_com(0x80+0x00);write_str(p);if(flag4){ flag4=0; break;} write_com(0x80+0x15);write_str(q);if(flag4){ flag4=0; break;} write_com(0xc0+0x00);write_str(m);if(flag4){ flag4=0; break;} write_com(0xc0+0x15);write_str(n);if(flag4){ flag4=0; break;}while(flag2==1){write_com(0x1c);delay_ms(300);while(flag3);}}}}void key12() interrupt 1{TH0=(65536-20000)/256;TL0=(65536-20000)%256;if(K1==0)delay_ms(5);if(K1==0&&flag2==0){TR0=0;flag1=1;}if(K2==0)delay_ms(5);if(K2==0&&flag1==0){TR0=0;flag2=1;}}void key3() interrupt 0{EX1=0; delay_ms(5); EX1=1;if(flag1|flag2==1)flag3=~flag3;}void key4() interrupt 2{EX1=0; delay_ms(5); EX1=1;flag4=1;if(flag1==1|flag2==1){flag1=flag2=flag3=0;TR0=1;}}六、实验总结1. 1602动态显示的原理即先写入要显示的字符,然后写入滚动的命令,从而实现不同的动态效果。
STC单片机驱动段码式液晶显示屏程序STC12C5612 HT1621B

/*********************************消息类型定义***********************************************************/
typedef enum
{
#define Char_D_Index 13
#define Char_E_Index 14
#define Char_F_Index 15
#define Char_G_Index 16
#define Char_H_Index 17
#define Char_L_Index 18
{0x05,0x0e}, //U段码 20
{0x02,0x00}, //-段码 21
{0x08,0x00}, //.段码 如果是SEG4则为单位Kvar 22
{0x00,0x0f}, //“)”段码 23
{0x02,0x07}, //F段码 15
{0x04,0x0f}, //G段码 16
{0x07,0x06}, //H段码 17
{0x00,0x0e}, //L段码 18
{0x03,0x07}, //P段码 19
{0x06,0x0b}, //5段码
{0x06,0x0f}, //6段码
{0x05,0x01}, //7段码
{0x07,0x0f}, //8段码
{0x07,0x0b}, //9段码
//#include "reg2051.h"
#include "STC12C5612AD.H"
#include "intrins.h"
#include "ht1621.h"
freescale hcs08单片机原理及应用

freescale hcs08单片机原理及应用单片机作为计算机科学领域重要的嵌入式系统组成部分,广泛应用于各个领域,其中Freescale HCS08单片机以其高性能、低功耗和易于开发等特点备受关注。
本文将介绍Freescale HCS08单片机的原理以及其应用。
一、Freescale HCS08单片机原理Freescale HCS08单片机采用基于哈佛结构的8位微处理器单元,具有高速运算能力和丰富的外设接口,能够满足不同领域的需求。
其核心原理包括指令集、片内存储器、时钟系统和外设接口等。
1. 指令集Freescale HCS08单片机的指令集丰富多样,包括数据传送、算术逻辑、位操作、条件转移和中断等多种类型的指令。
指令执行的速度快,能够满足实时性要求高的应用场景。
2. 片内存储器HCS08单片机内部集成了存储器单元,包括程序存储器ROM和数据存储器RAM。
ROM用于存储程序和常量,RAM用于存储变量和中间结果。
片内存储器的设计使得单片机具有较高的存储容量和读写速度。
3. 时钟系统Freescale HCS08单片机的时钟系统采用晶体振荡器作为基准时钟源,通过分频和锁相环等技术生成系统时钟。
时钟系统的设计能够提供稳定的时钟信号,确保单片机的正常运行。
4. 外设接口HCS08单片机提供了多种外设接口,包括通用输入输出引脚、定时器/计数器、串行通信接口等。
通过这些外设接口,单片机可以与外部设备进行数据交换和通信,实现各种功能。
二、Freescale HCS08单片机应用Freescale HCS08单片机在各个领域都有广泛的应用,如工业控制、汽车电子、家电控制、医疗设备等。
以下将介绍几个常见的应用案例。
1. 工业控制Freescale HCS08单片机在工业控制中扮演重要角色。
它能够实现对温度、压力、流量等参数的监测和控制,实现自动化生产线的稳定运行。
同时,单片机的高可靠性和抗干扰能力,使得它能够适应各种恶劣的工业环境。
DSP液晶显示器控制显示C代码
0x0408,0x0448,0x0448,0xFFFF,0x0448,0x0448,0x0428,0x3FF0,
0x422F,0x4224,0x43E4,0x4224,0x423C,0x7BE4,0x2000,0x0000
#define CTRSTATUS (*(unsigned int *)0x600800) //port8000
int w,ww,www;
main()
{
unsigned int uWork,* pWork;
int x,y,a,b,color,i;
CLK_init();
LCDWriteBytes(ledkey[7],90,y,color);
LCDWriteBytes(ledkey[2],0,10,color);
LCDWriteBytes(ledkey[0],10,10,color);
LCDWriteBytes(ledkey[1],20,10,color);
};
unsigned int ledkey[10][8]=
{
{0x00,0x00,0x7C,0x82,0x82,0x82,0x7C,0x00}, //0
{0x00,0x00,0x00,0x84,0xFE,0x80,0x00,0x00}, //1
{0x00,0x00,0x84,0xC2,0xA2,0x92,0x8C,0x00}, //2
LCDWriteBytes(ledkey[0],30,10,color);
LCDWriteBytes(ledkey[0],40,10,color);
LCD1602中文资料(程序和使用说明)
在日常生活中,我们对液晶显示器并不陌生。
液晶显示模块已作为很多电子产品的通过器件,如在计算器、万用表、电子表及很多家用电子产品中都可以看到,显示的主要是数字、专用符号和图形。
在单片机的人机交流界面中,一般的输出方式有以下几种:发光管、LED数码管、液晶显示器。
发光管和LED数码管比较常用,软硬件都比较简单,在前面章节已经介绍过,在此不作介绍,本章重点介绍字符型液晶显示器的应用。
在单片机系统中应用晶液显示器作为输出器件有以下几个优点:显示质量高由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,而不像阴极射线管显示器(CRT)那样需要不断刷新新亮点。
因此,液晶显示器画质高且不会闪烁。
数字式接口液晶显示器都是数字式的,和单片机系统的接口更加简单可靠,操作更加方便。
体积小、重量轻液晶显示器通过显示屏上的电极控制液晶分子状态来达到显示的目的,在重量上比相同显示面积的传统显示器要轻得多。
功耗低相对而言,液晶显示器的功耗主要消耗在其内部的电极和驱动IC上,因而耗电量比其它显示器要少得多。
10.8.1 液晶显示简介①液晶显示原理液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。
液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。
②液晶显示器的分类液晶显示的分类方法有很多种,通常可按其显示方式分为段式、字符式、点阵式等。
除了黑白显示外,液晶显示器还有多灰度有彩色显示等。
如果根据驱动方式来分,可以分为静态驱动(Static)、单纯矩阵驱动(Simple Matrix)和主动矩阵驱动(Active Matrix)三种。
③液晶显示器各种图形的显示原理:线段的显示点阵图形式液晶由M×N个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共16×8=128个点组成,屏上64×16个显示单元与显示RAM区1024字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。
lcd12864c语言编程详解
12864系列点阵型液晶显示模块使用说明书一、OCM12864液晶显示模块概述1.OCM12864液晶显示模块是128×64点阵型液晶显示模块,可显示各种字符及图形,可与CPU直接接口,具有8位标准数据总线、6条控制线及电源线。
采用KS0107控制IC。
2.外观尺寸:113×65×11mm(ocm12864-1), 93×70×10mm(ocm12864-2)78×70×10mm(ocm12864-3),3.视域尺寸:73.4×38.8mm(ocm12864-1) 70.7×38mm(ocm12864-2),64×44mm(ocm12864-3)4.重量:大约g补充说明:外观尺寸可根据用户的要求进行适度调整。
二、最大工作范围1、逻辑工作电压(Vcc):4.5~5.5V2、电源地(GND):0V3、LCD驱动电压(Vee):0~-10V4、输入电压:Vee~Vdd5、工作温度(Ta):0~55℃(常温) / -20~70℃(宽温)6、保存温度(Tstg):-10~65℃三、电气特性(测试条件 Ta=25,Vdd=5.0+/-0.25V)1、输入高电平(Vih):3.5Vmin2、输入低电平(Vil):0.55Vmax3、输出高电平(Voh):3.75Vmin4、输出低电平(Vol):1.0Vmax5、工作电流:2.0mAmax四、接口说明12864-3A接口说明表五、指令描述1、显示开/关设置CODE:R/W D/I DB7 DB6 DB5 DB4 DB3 DB2DB1 DB0功能:设置屏幕显示开/关。
DB0=H,开显示;DB0=L,关显示。
不影响显示RAM(DD RAM)中的内容。
2、设置显示起始行CODE:R/W D/I DB7 DB6 DB5 DB4 DB3 DB2DB1 DB0功能:执行该命令后,所设置的行将显示在屏幕的第一行。
HD44780 液晶显示板的c语言驱动程序
HD44780 液晶显示板的c语言驱动程序#define _LCD44780_C#include <commdefs.h>#include "main.h"#include "lcd44780.h"#include "1306spi.h"#include "delays.h"#include "serial.h"#include "25cxxspi.h"#include "e2data.h"void lcd_send_byte(unsigned char address, unsigned char chr) {unsigned char rVal;LCDPORTDIR = LCD_READ; // set data/con port directionslcd_select_reg(CMD_REG); ); // select command registerlcd_select_dir(READ_DIR); ); // set lcd to readdo { // wait until lcd is readylcd_set_clk_hi(); (); // toggle data clockrVal = lcd_get_data(); (); // read high nibble from data buslcd_set_clk_lo();delay_500ns();lcd_toggle_clk(); (); // toggle data clock} while(!!(rVal & (HINIBBLE(LCD_BUSY))));LCDPORTDIR = LCD_WRITE; // set data/con port directionslcd_select_reg(address); ); // select desired registerlcd_select_dir(WRITE_DIR); ); // set to writelcd_set_data(HINIBBLE(chr)); )); // send the high nibblelcd_toggle_clk(); (); // toggle data clocklcd_set_data(chr); ); // send the low nibblelcd_toggle_clk(); (); // toggle data clock}// Procedure to initialise the lcd for 4 bit operation.// This procedure implements the "Initialisation by instruction" as described for// Philips PCF2116Xvoid init_lcd() {unsigned char n;LCDPORTDIR = LCD_WRITE; // set data/c on & enable port dir’nslcd_set_clk_lo(); (); // set data clock low (enable pin)lcd_select_reg(CMD_REG); ); // select command registerlcd_select_dir(WRITE_DIR); ); // set to writedelay_ms(15); ); // wait > 15ms Vdd rises above Vporlcd_set_data(HINIBBLE(LCD_FNSET | LCD_8BIT)); )); // put nibble on data bus for (n = 0; n < 3; ++n) { ) // set mode to 8 bit data 3 timeslcd_toggle_clk(); (); // toggle data clockdelay_ms(5); ); // 5ms delay}#ifdef LCD1LINES && (LCDNCHARS > 16)lcd_set_data(HINIBBLE(LCD_FNSET)); )); // set mode to 4 bit data and 1 linelcd_toggle_clk(); (); // toggle data clocklcd_send_byte(LCD_COMMAND, LCD_FNSET);#else#ifdef LCD4LINESlcd_set_data(HINIBBLE(LCD_FNSET | LCD_4LINE)); )); // set mode to 4 bit data and 4 lineslcd_toggle_clk(); (); // toggle data clocklcd_send_byte(LCD_COMMAND, LCD_FNSET | LCD_4LINE);#elselcd_set_data(HINIBBLE(LCD_FNSET | LCD_2LINE)); )); // set mode to 4 bit data and 2 lineslcd_toggle_clk(); (); // toggle data clocklcd_send_byte(LCD_COMMAND, LCD_FNSET | LCD_2LINE); ); // (applies to 16x1 also - odd one!!) #endif#endiflcd_send_byte(LCD_COMMAND, LCD_DISPON | LCD_DISP_ALL); ); // display onlcd_send_byte(LCD_COMMAND, LCD_CLR); ); // clear the displaylcd_send_byte(LCD_COMMAND, LCD_EMSET | LCD_EM_INC); ); // entry mode to increment LCDPORTDIR = LCD_READ; // set data/con port dir’nslinenum = 0; // set line number to first linedisp_blank = false; // flag display as visiblecursor_on = false; // flag the cursor as off}// Moves the cursor to posline. The first character position is 0 and the first line is 0// If the cursor bit is set then a blinking cursor location is shown else the blinking// is removed. The procedure returns the old cursor status.// Definition of posline : bits 0..4 = character position in line (left = 0)// bits 5..6 = line number (top = 0)// bit 7 = cursor status (on = 1)// In the case of single line displays the lower 6 bits are the character position.unsigned char lcd_gotoxy(unsigned char posline) {unsigned char address, cstat;cstat = cursor_on;if(c_status.prt_to_lcd) {#ifdef LCD1LINES // this method is faster than using thelinenum = 0; // modulus operator but more verboseaddress = posline & 0x3f;#elselinepos = posline & 0x1f; // save the line char positionlinenum = (posline >> 5) & 3; // save the line number#ifdef LCD2LINESif(linenum > 1) linenum = 0; // 2 line display ?#elseif(linenum > 3) linenum = 0; // 4 line display ?#endif // LCD2LINESaddress = linepos;if(linenum == 1) address += STRT_LINE2; // set ram address to (pos,line)else if(linenum == 2) address += STRT_LINE3;else if(linenum == 3) address += STRT_LINE4;#endif // LCD1LINESlcd_send_byte(LCD_COMMAND, LCD_DD_SET | address);if(!!(posline & 0x80) != cursor_on) { ) // has the cursor status changed ?cursor_on = !!(posline & 0x80);if(disp_blank) lcd_send_byte(LCD_COMMAND, LCD_DISPON);else if(cursor_on) lcd_send_byte(LCD_COMMAND, LCD_DISPON |LCD_DISP_ALL | LCD_DISP_BLNK);else lcd_send_byte(LCD_COMMAND, LCD_DISPON|LCD_DISP_ALL);}}return cstat;}// Blank or restore the display restoring the cursor status also.void lcd_blank_display(unsigned char blank) {disp_blank = blank;if(disp_blank) lcd_send_byte(LCD_COMMAND, LCD_DISPON);else if(cursor_on) lcd_send_byte(LCD_COMMAND, LCD_DISPON | LCD_DISP_ALL | LCD_DISP_BLNK); else lcd_send_byte(LCD_COMMAND, LCD_DISPON|LCD_DISP_ALL);}// If the print flag is set to lcd then writes a character to the display at cursor. Backspace,// newline and formfeed are recognised. Formfeed clears the display, newline moves the cursor// to the start of the second line. Programmable characters have codes between 0x0f and 0x1f.// They are mapped to cgram, 0x0 to 0xf. This makes all of the cgram available to programmable// characters and also allows string printing without premature termination on 0.// If the print flag is set to serial then the character is sent directly to the serial port.void putch(char chr) {if(c_status.prt_to_lcd) { ) // printing to lcdif(chr == ’\f’) {lcd_send_byte(LCD_COMMAND, LCD_CLR); ); // formfeed clears the displaylinenum = 0; // set line number to first line}// Newline to start of next line.else if(chr == ’\n’) lcd_gotoxy((cursor_on ? 0x80 : 0) | ((linenum + 1) << 5));// Return to start of current line.else if(chr == ’\r’) lcd_gotoxy((cur sor_on ? 0x80 : 0) | (linenum << 5));// Backspace.else if(chr == ’\b’) lcd_send_byte(LCD_COMMAND, LCD_SHIFT);// Other characters.else {if((chr < 0x20)&&(chr > 0x0f)) chr -= 0x10; // translate special characterslcd_send_byte(LCD_DATA, chr); ); // write at current cursor position}}else { // printing to usartif(chr == 0x11) chr = xl_super2; // translate superscript 2putch_ser(chr); ); // send char to serial portif(chr == ’\n’) putch_ser(’\r’); ); // make cr/lf pair if required}}// Clear m characters on the lcd by writing m spaces then m backspaces.void clear_line(unsigned char m) {unsigned char n = m;if(c_status.prt_to_lcd) {while(n--) lcd_send_byte(LCD_DATA, ’ ’);while(m--) lcd_send_byte(LCD_COMMAND, LCD_SHIFT);}}// Shift the screen left or right. npos is the number of character positions to shift,// +ve for right and -ve for left./*void lcd_shift(signed char npos) {unsigned char command command;command = LCD_SHIFT | LCD_DISP_SHFT SHFT;if(npos > 0) command |= LCD_SHFT_RT RT;else npos = -npos npos;while(npos--) lcd_send_byte(LCD_COMMAND, command) command);}*/// Writes a cgram character line pattern to the cgram.void lcd_write_cgram(unsigned char address, unsigned char pattern) {lcd_send_byte(LCD_COMMAND, (address & 0x3f) | LCD_CG_SET); ); // set cgram addr.lcd_send_byte(LCD_DATA, pattern);}理解HD44780兼容型LCD显示屏摘要:这篇文章试图使你能对HD44780兼容型LCD显示屏略知一二。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
液晶显示器的C语言程序设计——Freescale8位微控制器
李晶皎,科学出版社,2005
●内容简介
本书讲述用c语言开发液晶显示应用系统的技术。
本书详尽介绍了目前国内正在使用的液晶显示模块控制器的工作原理,给出了用Freescale公司8位微控制器M68HC08的C语言程序设计的例程和相关的硬件电路。
液晶控制器具体有:HD44780U、SEDl520、T6963C、SEDl335、HD61830、KS0108B/HD61202、ST7920、SEDl565。
本书由浅入深,内容丰富新颖,并配有程序源代码光盘,适合使用C语言开发实用系统的读者阅读,也适合大专院校从事微控制器、嵌入式系统等研发的师生参考。
●目录
第1章Freescale8位微控制器概述
1.1微控制器概述
1.2Freescale8位微控制器简介
1.3Freescale微控制器命名规则
1.4MC68HC908GP32微控制器基本结构
1.4.1MC68HC908GP32微控制器性能概述
1.4.2MC68HC908GP32内部结构
1.4.3M68HC08系列微控制器的CPU
1.4.4MC68HC908GP32存储器结构
第2章M68HC08的C程序设计基础
2.1M68HC08的COSMICC交叉编泽器安装
2.1.1准备安装
2.1.2安装
2.2MC68HC908GP32的LED显示
2.2.1MC68HC908GP32的LED显示硬件设计
2.2.2MC68HC908GP32的LED显示软件设计
2.2.3Freescales记录文件的下载
2.3M68HC08的COSMICC交叉编译器
2.3.1COSMIC的编译器
2.3.2COSMIC的链接器
2.3.3COSMIC的实用程序
第3章HD44780U字符型液晶显示模块的应用
3.1HD44780U工作原理
3.1.1HD44780U原理
3.1.2HD44780U液晶控制器的引脚及功能
3.1.3FMl602字符型液晶显示模块的接口定义
3.1.4HD44780U的编程结构
3.1.5HD44780U液晶控制器的读写操作时序
3.1.6HD44780U内置字符发生器的字符库
3.2HD44780U液晶显示控制器的应用举例
3.2.1HD44780U的MC68HC908GP32硬件接口电路3.2.2HD44780U的MC68HC908GP32软件编程
第4章SEDl335图形液晶控制器的应用
4.1SEDl335工作原理
4.1.1SEDl335的功能原理
4.1_2SEDl335液晶控制器的引脚及功能
4.1.3EDM320240液晶显示模块的接口定义
4.1.4SEDl335的编程结构
4.1.5SEDl335液晶控制器的读写操作时序
4.1.6SEDl335内置字符发生器的字符表
4.2SEDl335液晶显示控制器的应用举例
4.2.1SEDl335的M68HC908GP32应用硬件接口电路4.2.2SEDl335的M68HC908GP32应用软件编程
第5章HD61830图形液晶显示模块的应用
5.1HD61830的工作原理
5.1.1HD61830的功能原理
5.1.2HD61830的引脚及功能
5.1.3LMG7401液晶显示模块的接口定义
5.1.4HD61830的编程结构
5.1.5HD61830液晶控制器的读写操作时序
5.1.6HD61830字符表
5.2HD61830液晶显示控制器的应用
5.2.1HD61830的MC68HC908GP32应用的硬件接口电路5.2.2HD61830的MC68HC908GP32应用的软件编程
第6章HD61202U图形液晶显示驱动控制器的应用
6.1HD61202U工作原理
6.1.1HD61202U控制器的功能原理
6.1.2HD61202U控制器的引脚及功能
6.1.3QH2001液晶显示模块的接口定义
6.1.4HD61202U液晶控制器的编程结构
6.1.5HD61202U液晶控制器的读写时序
6.1.6HD61202U字符表
6.2HD61202U液晶显示控制器的应用举例
6.2.1HD61202U的MC68HC908GP32应用硬件接口电路6.2.2HD61202U的MC68HC908GP32应用软件编程
第7章T6963C图形液晶控制器的应用
7.1T6963C工作原理
7.1.1T6963C控制器的功能原理
7.1.2T6963C控制器的引脚及功能
7.1_3MPG240128A1液晶显示模块的接口定义
7.1.4T6963C液晶控制器的编程结构
7.1.5T6963C的读写操作时序
7.1.6T6963C字符表
7.2T6963C的MC68HC08GP32应用
7.2.1T6963C的MC68HC08GP32硬件接口电路7.2.2T6963C的MC68HC08GP32应用软件编程
第8章SEDl520图形液晶显示控制器的应用
8.1SEDl520的工作原理
8.1.1SEDl520液晶控制器的原理
8.1.2SEDl520FOA液晶控制器的引脚及功能8.1.3MGLSl0032A液晶显示模块的接口定义8.1.4SEDl520的编程结构
8.1.5SEDl520液晶控制器的读写操作时序
8.1.6SEDl520字符表
8.2SEDl520液晶显示控制器的应用举例
8.2.1SEDl520的MC68HC908GP32硬件接口电路8.2.2SEDl520的MC68HC908GP32软件编程
第9章SEDl565图形液晶显示控制器的应用
9.1SEDl565的工作原理
9.1.1SEDl565液晶控制器的原理
9.1.2SEDl565液晶控制器的引脚及功能
9.1.3COG-VPl2864液晶显示模块的接口定义9.1.4SEDl565的编程结构
9.1.5SEDl520液晶控制器的读写操作时序
9.2SEDl565液晶显示控制器的应用举例
9.2.1SEDl565的MC68HC908GP32硬件接口电路9.2.2SEDl565的MC68HC908GP32软件编程
第10章ST7920汉字液晶控制,驱动器的应用
10.1ST7920工作原理
10.1.1ST7920功能原理
10.1.2ST7920的引脚及功能
10.1.3RTl2864HZ液晶显示模块的接口定义10.1.4ST7920的编程结构
10.1.5ST7920液晶控制器的操作时序
10.1.6ST7920内置字符发生器的字符表
10.2ST7920液晶显示控制器的应用举例
10.2.1ST7920的M68HC908GP32应用硬件接口电路10.2.2ST7920的M68HC908GP32应用软件编程
主要参考文献。