XS128单片机实验诺基亚5110液晶显示

合集下载

单片机之路—诺基亚5110LCD显示屏驱动

单片机之路—诺基亚5110LCD显示屏驱动

单片机之路—诺基亚5110LCD显示屏驱动电子产品在很多场合都需要提供和用户交互的人机界面,具备人机交互界面的电子产品可以给用户更好的使用,让电子产品更加直观。

今天给大家讲一个性价比很高的LCD显示器——诺基亚5110LCD。

可能很多人奇怪,为什么这个LCD显示屏被叫做诺基亚5110,那是因为这个显示屏诺基亚经典机型5110手机上使用的现实屏。

就是下图这部手机,曾经的经典。

记得第一部手机就是诺基亚的,那会还在读初中,宿舍的同学总是抢着来打贪吃蛇,打到满屏。

电子产品的更新换代实在太快了,现在已经很难找到这个手机的踪影了。

诺基亚5110手机5110LCD是一个84X48的点阵LCD,可以显示4行汉字。

和单片机的接口不是很复杂,是一个没有MISO只有MOSI的SPI协议。

用于通信的数据线是4根,其中有一根是用于设定传入的数据是命令还是数据的选择端口。

下图是在马云家买的一个诺基亚5110LCD模块,总共有8个引脚。

用于通信的引脚为4个,1个复位引脚,2个电源引脚,1个是背光灯控制引脚。

因为诺基亚LCD本身是不会发光的,为了能够在晚上也能够看到液晶显示屏显示的内容,需要增加背光灯。

诺基亚5110实物图和引脚描述我们把LCD需要单片机控制的5个引脚连接到单片机的P1口,背光灯通过一个电阻接到VCC5V,让背光灯保持常亮的状态,也可以接到单片机的引脚上去,通过单片机控制背光灯的亮灭。

5110LCD与单片机接口图我们来看一下怎么写程序驱动诺基亚5110,实现在5110上显示出字符。

由于接通电源后,LCD内部的RAM数据状态是不确定的,所以我们需要给LCD复位一下。

5110LCD复位时序//产生一个复位脉冲Lcd_res=0;delay_us();Lcd_res=1;我们需要往LCD写数据,SPI的写时序如下,这里实现的是通过单片机IO口模拟SPI时序,如果单片机有硬件的SPI接口是可以用来驱动的5110LCD的。

(完整word版)Nokia5110液晶屏

(完整word版)Nokia5110液晶屏

一、硬件链接:首先,看一下硬件(仅供参考,读者已对自己的硬件很熟悉,可以直接跳过。

):说明:图1: 排针从左至右1到8位.图2:5110接口在板子中的区域。

图3: 8位排针对应连接5110液晶屏相应的引脚。

图4:5110液晶显示屏对应8位排针JP19的插入方向。

再看一下我的板子的原理图:图5中,显示了8位排针JP19(即5110液晶屏的引脚)其中的5根与51单片机(本人的为STC89C516RD+)的PB I/O口的连接方式:5110_RST <——-〉PB2(P1.2)5110_SCE <—--〉PB3(P1。

3)MOSI(sdin) <———〉PB5(P1.5)MISO(dc)〈--—〉PB6(P1.6)SCK 〈——-> PB7(P1.7)这样,我们知道了用51单片机中的I/O口和5110引脚的链接方式。

二、引脚接线图请根据程序里的定义连接,51的程序默认接线为:sbit sce = P1^3; //片选sbit res = P1^2; //复位,0复位sbit dc = P1^6; //1写数据,0写指令sbit sdin = P1^5;//数据sbit sclk = P1^7;//时钟看了这些默认接线,可能有个疑问:“这些位变量(引脚)究竟有什么用呢?”,带着这个疑问,请看5110芯片手册中的引脚说明(重点看红色区域):从这个引脚说明中,我们知道了不同的引脚,对应的功能。

那么,如何使用这些引脚来控制5110工作呢?三、指令5110液晶显示屏(PCD8544芯片),是通过发送指令和写入数据RAM来控制和显示数据的。

指令格式分为两种模式:1、如果D/C(模式选择)置为低(为0),即位变量dc = 0,为发送指令模式,那么接下来发送的8位字节解释为命令字节。

2、如果D/C置为高,即dc = 1; 为写入数据RAM模式,接下来的字节将存储到显示数据RAM。

注意:1、每一个数据字节存入之后,地址计数自动递增。

诺基亚5110学习(含字库,免财富)

诺基亚5110学习(含字库,免财富)

0x3C, 0x4A, 0x49, 0x49, 0x30, 0x01, 0x71, 0x09, 0x05, 0x03, 0x36, 0x49, 0x49, 0x49, 0x36, 0x06, 0x49, 0x49, 0x29, 0x1E, 0x00, 0x36, 0x36, 0x00, 0x00, 0x00, 0x56, 0x36, 0x00, 0x00, 0x08, 0x14, 0x22, 0x41, 0x00, 0x14, 0x14, 0x14, 0x14, 0x14, 0x00, 0x41, 0x22, 0x14, 0x08, 0x02, 0x01, 0x51, 0x09, 0x06, 0x32, 0x49, 0x59, 0x51, 0x3E, 0x7C, 0x12, 0x11, 0x12, 0x7C, 0x7F, 0x49, 0x49, 0x49, 0x36, 0x3E, 0x41, 0x41, 0x41, 0x22, 0x7F, 0x41, 0x41, 0x22, 0x1C, 0x7F, 0x49, 0x49, 0x49, 0x41, 0x7F, 0x09, 0x09, 0x09, 0x01, 0x3E, 0x41, 0x49, 0x49, 0x7A, 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00, 0x41, 0x7F, 0x41, 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01, 0x7F, 0x08, 0x14, 0x22, 0x41, 0x7F, 0x40, 0x40, 0x40, 0x40, 0x7F, 0x02, 0x0C, 0x02, 0x7F, 0x7F, 0x04, 0x08, 0x10, 0x7F, 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x7F, 0x09, 0x09, 0x09, 0x06, 0x3E, 0x41, 0x51, 0x21, 0x5E, 0x7F, 0x09, 0x19, 0x29, 0x46, 0x46, 0x49, 0x49, 0x49, 0x31, 0x01, 0x01, 0x7F, 0x01, 0x01, 0x3F, 0x40, 0x40, 0x40, 0x3F, 0x1F, 0x20, 0x40, 0x20, 0x1F, 0x3F, 0x40, 0x38, 0x40, 0x3F, 0x63, 0x14, 0x08, 0x14, 0x63, 0x07, 0x08, 0x70, 0x08, 0x07, 0x61, 0x51, 0x49, 0x45, 0x43, 0x00, 0x7F, 0x41, 0x41, 0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55, 0x00, 0x41, 0x41, 0x7F, 0x00, 0x04, 0x02, 0x01, 0x02, 0x04, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x01, 0x02, 0x04, 0x00, 0x20, 0x54, 0x54, 0x54, 0x78,

毕业设计基于Nokia5110的液晶屏模块设计

毕业设计基于Nokia5110的液晶屏模块设计

电气信息学院基于Nokia5110的液晶屏模块设计摘要:本设计是以单片机STC89C52RC为核心器件的基于Nokia5110液晶屏的电子指南针。

整个系统主要由单片机最小系统,电源输入模块,LCD液晶显示模块,磁阻传感器模块和串口电路部分构成。

通过用C语言编程使单片机处理磁阻传感器接收到的X轴和Y轴上的磁场分量,转换为距南方的角度后,通过Nokia5110动态显示。

Nokia5110是一块84×48 的LCD点阵型液晶显示屏,如果字模是12×16 大小的字符,则能显示3 行,每行显示7个汉字。

每个字符都分为上下两部分进行扫描,在每行扫描时以一列8位为单位进行扫描。

通过原理图设计、软件仿真、制作硬质板电路,硬件调试,证明了本设计的可行性。

关键词:Nokia5110,STC89C52RC,磁阻传感器HMC5883L,电子指南针Abstract: This design is a digital compass based on Nokia5110, with the MCU STC89C52RC as its core. The system mainly consists of a MCU minimum system, a power input module, a LCD module, a magnetic sensor module and a serial port module. Through C language programming, the MCU processes the data on the X and Y axes, which is collected by the magnetic sensor. Then it is transformed into an angle indicating its relative direction to the south pole in degrees. Finally, it is shown on the Nokia5110 dynamically. The Nokia5110 is an LCD with 84×48 dots, if a character is displayed with 12×16 dots, then it can display 3 lines, with each line comprising 7 characters. The characters are scanned in two halves, the upper half and the lower half. For each half, 8 bits( a byte)are scanned as a unit at a time. Through schematic design, software simulation, making the printed circuit board and hardware debugging, the feasibility of this design has been proved.Keywords:Nokia5110, STC89C52RC, magnetic sensor, digital compass目录1 前言 .............................................................................................. 错误!未定义书签。

nokia5110课程设计

nokia5110课程设计

nokia5110课程设计一、课程目标知识目标:1. 让学生掌握Nokia 5110液晶显示屏的基本原理和操作方法;2. 了解Nokia 5110在图形显示和文字显示方面的应用;3. 学会运用编程语言(如:MicroPython)对Nokia 5110进行控制和编程。

技能目标:1. 能够独立完成Nokia 5110的硬件连接和初始化;2. 掌握使用编程语言对Nokia 5110显示内容进行设计和编写;3. 能够运用所学的知识解决实际问题,如制作简单的电子时钟、小游戏等。

情感态度价值观目标:1. 培养学生对电子产品的兴趣,激发他们探索未知领域的热情;2. 培养学生的团队合作精神,学会与他人共同解决问题;3. 增强学生的环保意识,让他们了解电子废弃物的回收和处理方法。

课程性质:本课程为实践性较强的课程,结合理论讲解和实际操作,让学生在动手实践中掌握知识。

学生特点:六年级学生具有一定的编程基础和电子知识,好奇心强,喜欢动手实践。

教学要求:教师需关注学生的个体差异,因材施教,鼓励学生积极参与,注重培养学生的实践能力和创新精神。

通过本课程的学习,使学生能够将所学知识运用到实际生活中,提高他们的综合素质。

二、教学内容1. Nokia 5110液晶显示屏原理介绍:包括显示屏的硬件结构、工作原理和显示原理。

- 理解显示屏的像素点阵和色彩显示方式。

- 掌握显示屏的初始化和基本操作。

2. 硬件连接与编程环境搭建:- 学习如何将Nokia 5110与微控制器(如Arduino或MicroPython板)连接。

- 搭建编程环境,熟悉相关开发工具的使用。

3. 图形和文字显示编程:- 学习使用编程语言进行图形绘制和文字显示。

- 掌握如何清屏、绘制点、线、矩形和圆形等基本图形。

- 实现文字的滚动显示和特效。

4. 实际应用案例分析与制作:- 分析并制作简单的电子时钟,学习时间管理和中断处理。

- 设计并实现一个简易小游戏,如贪吃蛇或俄罗斯方块,提高逻辑思维能力。

基于5110屏显示的多功能电子钟的设计

基于5110屏显示的多功能电子钟的设计

基于5110屏显示的多功能电子钟的设计
1. 硬件设计:
使用STM32F103C8T6微控制器作为主控芯片,5110液晶屏作为
显示界面,DS1302实时时钟芯片作为时间基准源,按键阵列用于用
户控制电子钟的功能。

主控芯片驱动5110显示屏,DS1302实时时钟芯片通过SPI接
口与主控芯片进行通信,从而在显示屏上显示当前时间和日期。

2. 软件设计:
主控芯片程序采用C语言编写,其中包含了时钟、日期、闹钟
等多种功能模块,具有以下特点:
a. 时钟模块:能够实时显示当前的小时、分钟和秒钟。

b. 日期模块:能够实时显示当前的年、月和日。

c. 闹钟模块:用户可以设置闹钟响铃的时间,当到达该时间时,系统会发出闹钟响铃提示。

d. 蜂鸣器模块:当闹钟响铃时,系统会触发蜂鸣器模块,发出
声音提示。

e. 报时功能:在固定时间间隔中,系统能够自动报时,提醒用
户当前时间。

f. 亮度调节功能:用户可以通过按键调节屏幕亮度,满足不同
环境需求。

3. 设计流程:
a. 硬件设计:根据选定的主控芯片和外设器件进行硬件设计,包括原理图设计和PCB布局。

b. 软件设计:编写主控芯片程序,包括时钟、日期、闹钟等功能模块。

c. 调试测试:通过调试测试,验证系统设计是否符合预期,以及是否存在问题。

d. 优化改进:针对问题进行优化改进,提高系统的稳定性和可靠性。

e. 批量生产:完成设计,进行批量生产并出售。

5110液晶显示程序

5110液晶显示程序
{ 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06 }, // P
{ 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E }, // Q
{ 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46 }, // R
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long

/*********************************************/ //初始化
void init()
{ 0x00, 0x36, 0x49, 0x55, 0x22, 0x50 }, // &
{ 0x00, 0x00, 0x05, 0x03, 0x00, 0x00 }, // '
{ 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00 }, // (
PWME=0X00; //全部关闭
PWMPRCLK=0X22;//22分频 时钟A=32M 时钟B=32M 时钟A=总线频率/2
PWMSCLA=0X01;//再分频 时钟SA=16M 时钟SB=16M SB=时钟A/(2*PWMSCLA)
PWMSCLB=0X01;
{ 0x00, 0x00, 0x41, 0x22, 0x14, 0x08 }, // >
{ 0x00, 0x02, 0x01, 0x51, 0x09, 0x06 }, // ?
{ 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E }, // @
ATD0CTL1=0X00;

c51单片机程序-nokia5110液晶显示

c51单片机程序-nokia5110液晶显示

高电平表示数据输入 ,低电平表示命令输入 #define LCD_CLK P15 上升沿写入 #define LCD_DIN P23 #define LCD_BL P17 高电平点亮,低电平关闭 code unsigned char { ascii_dot[] = // ASCII 表
0x00,0x00,0x00,0x00,0x00, // - 0x00,0x00,0x5F,0x00,0x00, // -!0x00,0x07,0x00,0x07,0x00, // -"0x14,0x7F,0x14,0x7F,0x14, // -#0x24,0x2E,0x7B,0x2A,0x12, // -$0x23,0x13,0x08,0x64,0x62, // -%0x36,0x49,0x56,0x20,0x50, // -&0x00,0x04,0x03,0x01,0x00, // -'0x00,0x1C,0x22,0x41,0x00, // -(0x00,0x41,0x22,0x1C,0x00, // -)0x22,0x14,0x7F,0x14,0x22, // -*0x08,0x08,0x7F,0x08,0x08, // -+0x40,0x30,0x10,0x00,0x00, // -,0x08,0x08,0x08,0x08,0x08, // --0x00,0x60,0x60,0x00,0x00, // -.0x20,0x10,0x08,0x04,0x02, // -/0x3E,0x51,0x49,0x45,0x3E, // -00x00,0x42,0x7F,0x40,0x00, // -10x62,0x51,0x49,0x49,0x46, // -20x21,0x41,0x49,0x4D,0x33, // -30x18,0x14,0x12,0x7F,0x10, // -40x27,0x45,0x45,0x45,0x39, // -50x3C,0x4A,0x49,0x49,0x31, // -60x01,0x71,0x09,0x05,0x03, // -70x36,0x49,0x49,0x49,0x36, // -80x46,0x49,0x49,0x29,0x1E, // -90x00,0x36,0x36,0x00,0x00, // -:-

诺基亚5110液晶显示器应用课程设计

诺基亚5110液晶显示器应用课程设计

单片机原理及应用课程设计电气工程学院一、课程设计任务书1.课程设计项目诺基亚5110液晶显示器应用。

2.设计内容1)设计诺基亚5110液晶显示器应用的总体设计方案;2)以MCS-51系列单片机为核心器件和诺基亚5110液晶显示器组成液晶显示硬件系统;3)系统程序编制与调试;4)电路系统的综合调试;5)撰写课程设计论文;6)完成课程设计论文答辩。

3.设计要求1)以STC89C51单片机为控制核心,对诺基亚5110液晶显示器进行控制。

编程使得在LCD显示器上显示字符,如多行滚动显示:“吉林工程技术师范学院”“电气工程学院”。

等字符,还可以显示别的文字;2)单片机课程设计题目的硬件电路、程序由学生自行设计完成。

3)液晶显示器上要显示出设计人的班级,组长的学号等信息。

4.设计进度(2011年6月13日至2011年6月24日)时间设计内容第1-2天查阅资料,方案比较、设计与论证,理论分析与计算第3-5天硬件电路调试第6-8天系统调试第9-10天书写报告、答辩5.设计地点新实验楼323微机实验室二.参考资料[1]李广弟,朱月秀,王秀山编著.单片机基础. 北京:北京航空航天大学出版社,2001[2] 何立民编著.MCS-51系列单片机应用系统设计系统配置与接口技术.北京:北京航空航天大学出版社,1999[3] 蔡美琴等编著.MCS-51 单片机系统及应用.北京:高等教育出版社.1992二、评语及成绩成绩:指导教师:单片机原理及应用课程设计班级:自动化0845 姓名:刘旭阳学号: 11 号指导教师:方健撰写日期: 2011年6月23日Nokia LCD多功能显示摘要液晶显示器件[1](LCD)是一种高新技术的基础元器件。

它利用液晶的各种电光效应,把液晶对电场、磁场、光线和温度等外界条件的变化在一定条件下转换为可视信号而制成的显示器。

液晶显示器具有低电压、低功耗的特点,与CMOS集成电路相匹配.电池作为电源,适合于便携式显示。

诺基亚5110液晶使用及显示程序实例

诺基亚5110液晶使用及显示程序实例

该模块具有以下特点:●84x48 的点阵LCD,可以显示4 行汉字,●采用串行接口与主处理器进行通信,接口信号线数量大幅度减少,包括电源和地在内的信号线仅有9 条。

支持多种串行通信协议(如AVR 单片机的SPI、MCS51 的串口模式0等),传输速率高达4Mbps,可全速写入显示数据,无等待时间。

●可通过导电胶连接模块与印制版,而不用连接电缆,用模块上的金属钩可将模块固定到印制板上,因而非常便于安装和更换。

●LCD 控制器/驱动器芯片已绑定到LCD 晶片上,模块的体积很小。

●采用低电压供电,正常显示时的工作电流在200μA 以下,且具有掉电模式。

LPH7366 的这些特点非常适合于电池供电的便携式通信设备和测试设备中C8051F学习笔记:Nokia 5110驱动Nokia5110是一款经典机型,可能由于经典的缘故,旧机器很多,所以很多电子工程师就把旧机器的屏幕拆下来,自己驱动Nokia5110,用于开发的设备显示,取代LCD1602。

使用Nokia5110液晶的四大理由1)性价比高,LCD1602可以显示32个字符,而Nokia5110可以显示15个汉字,30个字符。

Nokia5110裸屏仅8.8元,LCD1602一般15元左右,LCD 12864一般50~70元。

2)接口简单,仅四根I/O线即可驱动,LCD1602需11根I/O线,LCD12864需12根。

3)速度快,是LCD12864的20倍,是LCD1602的40倍。

4)Nokia5110工作电压3.3V,正常显示时工作电流200uA以下,具有掉电模式,适合电池供电的便携式移动设备。

可以在市场上买到Nokia5110的裸屏和带PCB的Nokia5110屏幕,因为N okia5110是不带背光的,所以通常商家会在PCB上按了几个背光LED,上电就能亮,建议大家还是买那种连上PCB的5110。

Nokia5110原理图:商家把该引出的管脚都引出了,下面就可以连接C8051F的相应管脚,写程序驱动5110了。

诺基亚5110LCD驱动程序

诺基亚5110LCD驱动程序

/******************************************************************** NOKIA5110(3310)液晶屏驱动程序** 晶振频率:11.0592M** 线路->单片机实验开发板A******************************************************************/#include/*-- -------定义Nokia5110 引角---- -----*/sbit sclk = P3^3;sbit sdin = P3^4;sbit dc = P3^5;sbit sce = P3^7;sbit res = P3^6;void initNokia5110(void); /* NOkia 5110 初始化*/void clearNokia5110(void); /* 清除屏幕整屏清空*/void Display_char(unsigned char x,unsigned char y,char *s); /* 写字符x 设置显示字符的X位置; y 设置显示字符的Y 位置*s 显示字符的首地址*/void Display_num(unsigned char x,unsigned char y,char s); /* 写数字x 设置显示字符的X位置; y 设置显示字符的Y 位置s 显示数字*/void write_byte(unsigned char data1); /* 发送1字节到NOkia 5110 */void setxy(unsigned char x,unsigned char y); /* 设置显示坐标x 行坐标(0-83) unsigned char y 列坐标(0-5) */void delay(unsigned int time);void main(void){initNokia5110(); /* NOkia 5110 初始化*/clearNokia5110(); /* 清除屏幕整屏清空*/Display_char(1,2,""); /* 写字符x 设置显示字符的X位置; y 设置显示字符的Y位置*s 显示字符的首地址*/Display_char(10,4,"NOKIA5510"); /* 写字符x 设置显示字符的X位置; y 设置显示字符的Y位置*s 显示字符的首地址*///Display_num(0,0,9); // 写数字while(1);}/****************************5110 0-9字模**************************//*函数原型:无/*函数功能:0-9字模/*输入参数:无/*输出参数:无/*调用模块:/*建立时间:2006/10/1/*作者:站长/**********************************************************************/ unsigned char code asc2tab[][6] ={{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },// sp{ 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00 },// !{ 0x00, 0x00, 0x07, 0x00, 0x07, 0x00 },// "{ 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14 },// #{ 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12 },// ${ 0x00, 0x62, 0x64, 0x08, 0x13, 0x23 },// %{ 0x00, 0x36, 0x49, 0x55, 0x22, 0x50 },// &{ 0x00, 0x00, 0x05, 0x03, 0x00, 0x00 },// '{ 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00 },// ({ 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00 },// ){ 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14 },// *{ 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08 },// +{ 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00 },// ,{ 0x00, 0x08, 0x08, 0x08, 0x08, 0x08 },// -{ 0x00, 0x00, 0x60, 0x60, 0x00, 0x00 },// .{ 0x00, 0x20, 0x10, 0x08, 0x04, 0x02 },// /{ 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E },// 0{ 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00 },// 1{ 0x00, 0x42, 0x61, 0x51, 0x49, 0x46 },// 2{ 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31 },// 3 { 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10 },// 4 { 0x00, 0x27, 0x45, 0x45, 0x45, 0x39 },// 5 { 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30 },// 6 { 0x00, 0x01, 0x71, 0x09, 0x05, 0x03 },// 7 { 0x00, 0x36, 0x49, 0x49, 0x49, 0x36 },// 8 { 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E },// 9 { 0x00, 0x00, 0x36, 0x36, 0x00, 0x00 },// : { 0x00, 0x00, 0x56, 0x36, 0x00, 0x00 },// ; { 0x00, 0x08, 0x14, 0x22, 0x41, 0x00 },// < { 0x00, 0x14, 0x14, 0x14, 0x14, 0x14 },// = { 0x00, 0x00, 0x41, 0x22, 0x14, 0x08 },// > { 0x00, 0x02, 0x01, 0x51, 0x09, 0x06 },// ? { 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E },// @ { 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C },// A { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36 },// B { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22 },// C { 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C },// D { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41 },// E { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01 },// F { 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A },// G { 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F },// H{ 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00 },// I { 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01 },// J { 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41 },// K { 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40 },// L { 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F },// M { 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F },// N { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E },// O { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06 },// P { 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E },// Q { 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46 },// R { 0x00, 0x46, 0x49, 0x49, 0x49, 0x31 },// S { 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01 },// T { 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F },// U { 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F },// V { 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F },// W { 0x00, 0x63, 0x14, 0x08, 0x14, 0x63 },// X { 0x00, 0x07, 0x08, 0x70, 0x08, 0x07 },// Y { 0x00, 0x61, 0x51, 0x49, 0x45, 0x43 },// Z { 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00 },// [ { 0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55 },// 55 { 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00 },// ] { 0x00, 0x04, 0x02, 0x01, 0x02, 0x04 },// ^{ 0x00, 0x40, 0x40, 0x40, 0x40, 0x40 },// _ { 0x00, 0x00, 0x01, 0x02, 0x04, 0x00 },// ' { 0x00, 0x20, 0x54, 0x54, 0x54, 0x78 },// a { 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38 },// b { 0x00, 0x38, 0x44, 0x44, 0x44, 0x20 },// c { 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F },// d { 0x00, 0x38, 0x54, 0x54, 0x54, 0x18 },// e { 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02 },// f { 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C },// g { 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78 },// h { 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00 },// i { 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00 },// j { 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00 },// k { 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00 },// l { 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78 },// m { 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78 },// n { 0x00, 0x38, 0x44, 0x44, 0x44, 0x38 },// o { 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18 },// p { 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC },// q { 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08 },// r { 0x00, 0x48, 0x54, 0x54, 0x54, 0x20 },// s { 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20 },// t{ 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C },// u{ 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C },// v{ 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C },// w{ 0x00, 0x44, 0x28, 0x10, 0x28, 0x44 },// x{ 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C },// y{ 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44 },// z{ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14 }};/****************************Nokia5110初始化函数**************************//*函数原型:initNokia5110(void)/*函数功能:Nokia5110初始化/*输入参数:无/*输出参数:无/*调用模块:/*建立时间:2006/10/1/*作者:站长/**********************************************************************/void initNokia5110(void){delay(10); //系统复位res = 0;delay(2);res = 1;dc = 0;write_byte(0x21); //;芯片是活动的(PD=0) 使用扩展指令集write_byte(0xd5);write_byte(0x20); //;芯片是活动的(PD=0) 使用水平寻址(V=0) 使用基本指令集(H=0) write_byte(0x0c); //;设置显示配置(D=1 E=0)}/****************************Nokia5110清屏函数*********************//*函数原型:void clearNokia5110(void)/*函数功能:Nokia5110清屏/*输入参数:无/*输出参数:无/*调用模块:/*建立时间:2006/10/1/*作者:站长/**********************************************************************/void clearNokia5110(void){unsigned int i,j;for(i=0;i<6;i++){setxy(j,i);dc = 1;while (j<84){write_byte(0x00);j++;}j = 0;}}/*--------------------------------------;模块名称:Display_char(unsigned char x,unsigned char y,char *s);;功能:写字符;占用资源:;参数说明:x 设置显示字符的X位置; y 设置显示字符的Y位置*s 显示字符的首地址;创建日期:2001.01.19;版本:VER 2.0 ★STALI☆;-------------------------------------*/void Display_char(unsigned char x,unsigned char y,char *s){unsigned char line;setxy(x,y);while(*s){for(line=0;line<6;line++){dc = 1;write_byte(asc2tab[*s - 32][line]);}}sce = 1;}/****************************Nokia5110写数字函数*********************/ /*函数原型:void Display_num(unsigned char x,unsigned char y,char s)/*函数功能:Nokia5110写数字/*输入参数:x 设置显示字符的X位置; y 设置显示字符的Y位置s 显示数字/*输出参数:无/*调用模块:/*建立时间:2006/10/1/*作者:站长/**********************************************************************/ void Display_num(unsigned char x,unsigned char y,char s){unsigned char line;setxy(x,y);dc = 1;for(line=0;line<6;line++){write_byte(asc2tab[s+16][line]);}sce = 1;}/*************************Nokia5110发送1字节函数*********************/ /*函数原型:void Display_num(unsigned char x,unsigned char y,char s)/*函数功能:发送1字节到NOkia 5110/*输入参数:x 设置显示字符的X位置; y 设置显示字符的Y位置s 显示数字/*输出参数:无/*调用模块:/*建立时间:2006/10/1/*作者:站长/**********************************************************************/ void write_byte(unsigned char data1){unsigned char i;res = 1;sce = 0;for(i=0;i<8;i++){sdin = (bit) (data1&0x80);;sclk = 1;data1 <<=1;}}/*************************Nokia5110设置显示坐标函数*********************/ /*函数原型:void setxy(unsigned char x,unsigned char y)/*函数功能:设置显示坐标/*输入参数:unsigned char x 行坐标(0-83) unsigned char y 列坐标(0-5)/*输出参数:无/*调用模块:/*建立时间:2006/10/1/*作者:站长/**********************************************************************/ void setxy(unsigned char x,unsigned char y){dc = 0;write_byte(y|0x40); //设置y轴。

诺基亚5110液晶显示汉字程序

诺基亚5110液晶显示汉字程序

诺基亚5110液晶显示汉字程序默认分类 2009-11-03 21:19 阅读31 评论0字号:大中小包含三个文件,主函数,液晶驱动函数和字符串头文件,用STC单片机在5110液晶上显示“好好学习吧”五个汉字。

提取字模用"Pctolcd2002完美版"软件,字模选项中的设置为列行式+逆向+每行显示16*8+C51格式,可随意更改文字内容。

液晶文件lcd.csbit RST_5110=P1^4; //low activesbit CE_5110=P1^3; //low activesbit DC_5110=P1^2; //0=command,1=datasbit SDI_5110=P1^1; //rise edge enablesbit SCK_5110=P1^0; //clock#define DATA 1#define CMD 0unsigned char code asc2[][6] ={{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // sp{ 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00 }, // !{ 0x00, 0x00, 0x07, 0x00, 0x07, 0x00 }, // "{ 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14 }, // #{ 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12 }, // ${ 0x00, 0x62, 0x64, 0x08, 0x13, 0x23 }, // %{ 0x00, 0x36, 0x49, 0x55, 0x22, 0x50 }, // &{ 0x00, 0x00, 0x05, 0x03, 0x00, 0x00 }, // '{ 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00 }, // ({ 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00 }, // ){ 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14 }, // *{ 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08 }, // +{ 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00 }, // ,{ 0x00, 0x08, 0x08, 0x08, 0x08, 0x08 }, // -{ 0x00, 0x00, 0x60, 0x60, 0x00, 0x00 }, // .{ 0x00, 0x20, 0x10, 0x08, 0x04, 0x02 }, // /{ 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E }, // 0{ 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00 }, // 1{ 0x00, 0x42, 0x61, 0x51, 0x49, 0x46 }, // 2{ 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31 }, // 3{ 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10 }, // 4{ 0x00, 0x27, 0x45, 0x45, 0x45, 0x39 }, // 5{ 0x00, 0x01, 0x71, 0x09, 0x05, 0x03 }, // 7 { 0x00, 0x36, 0x49, 0x49, 0x49, 0x36 }, // 8 { 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E }, // 9 { 0x00, 0x00, 0x36, 0x36, 0x00, 0x00 }, // : { 0x00, 0x00, 0x56, 0x36, 0x00, 0x00 }, // ; { 0x00, 0x08, 0x14, 0x22, 0x41, 0x00 }, // < { 0x00, 0x14, 0x14, 0x14, 0x14, 0x14 }, // = { 0x00, 0x00, 0x41, 0x22, 0x14, 0x08 }, // > { 0x00, 0x02, 0x01, 0x51, 0x09, 0x06 }, // ? { 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E }, // @ { 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C }, // A { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36 }, // B { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22 }, // C { 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C }, // D { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41 }, // E { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01 }, // F { 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A }, // G { 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F }, // H { 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00 }, // I { 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01 }, // J { 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41 }, // K { 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40 }, // L { 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F }, // M { 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F }, // N { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E }, // O { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06 }, // P { 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E }, // Q { 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46 }, // R { 0x00, 0x46, 0x49, 0x49, 0x49, 0x31 }, // S { 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01 }, // T { 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F }, // U { 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F }, // V { 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F }, // W { 0x00, 0x63, 0x14, 0x08, 0x14, 0x63 }, // X { 0x00, 0x07, 0x08, 0x70, 0x08, 0x07 }, // Y { 0x00, 0x61, 0x51, 0x49, 0x45, 0x43 }, // Z { 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00 }, // [ { 0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55 }, // 55 { 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00 }, // ] { 0x00, 0x04, 0x02, 0x01, 0x02, 0x04 }, // ^ { 0x00, 0x40, 0x40, 0x40, 0x40, 0x40 }, // _ { 0x00, 0x00, 0x01, 0x02, 0x04, 0x00 }, // '{ 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38 }, // b{ 0x00, 0x38, 0x44, 0x44, 0x44, 0x20 }, // c{ 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F }, // d{ 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02 }, // f{ 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C }, // g{ 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78 }, // h{ 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00 }, // i{ 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00 }, // j{ 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00 }, // k{ 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00 }, // l{ 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78 }, // m{ 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78 }, // n{ 0x00, 0x38, 0x44, 0x44, 0x44, 0x38 }, // o{ 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18 }, // p{ 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC }, // q{ 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08 }, // r{ 0x00, 0x48, 0x54, 0x54, 0x54, 0x20 }, // s{ 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20 }, // t{ 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C }, // u{ 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C }, // v{ 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C }, // w{ 0x00, 0x44, 0x28, 0x10, 0x28, 0x44 }, // x{ 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C }, // y{ 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44 }, // z{ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14 } // horiz lines};unsigned char code hanzi[][16]={{0x10,0x10,0xF0,0x1F,0x10,0xF0,0x80,0x82,0x82,0x82,0xF2,0x8A,0x86,0x82,0x80,0x00},{0x80,0x43,0x22,0x14,0x0C,0x73,0x20,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00},/*"好",0*/ {0x10,0x10,0xF0,0x1F,0x10,0xF0,0x80,0x82,0x82,0x82,0xF2,0x8A,0x86,0x82,0x80,0x00},{0x80,0x43,0x22,0x14,0x0C,0x73,0x20,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00},/*"好",1*/ {0x40,0x30,0x10,0x12,0x5C,0x54,0x50,0x51,0x5E,0xD4,0x50,0x18,0x57,0x32,0x10,0x00}, {0x00,0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x02,0x02,0x02,0x00},/*"学",2*/ {0x00,0x00,0x02,0x02,0x0A,0x12,0x22,0x62,0x02,0x82,0x82,0x42,0x02,0xFE,0x00,0x00},{0x00,0x00,0x04,0x0C,0x04,0x02,0x02,0x01,0x01,0x00,0x20,0x40,0x80,0x7F,0x00,0x00},/*"习",3*/{0xFE,0x02,0x02,0x02,0xFE,0x00,0xFE,0x42,0x42,0x42,0x7E,0x42,0x42,0x42,0xFE,0x00}, {0x07,0x01,0x01,0x01,0x03,0x00,0x3F,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x70,0x00},/*"吧",0*/};void Delay_us(uchar t)//延时{while(--t);}void Write_Byte_5110(uchar Data ,bit CMD_DATA){uchar i;CE_5110=0; //Enable LCDDC_5110=CMD_DATA;//写命令还是写数据for(i=0;i<8;i++){SCK_5110=0;if(Data & 0x80) //MSB first高位优先SDI_5110=1;//传输1elseSDI_5110=0;//传输0SCK_5110=1;//始终为1时锁存Data<<=1;}SCK_5110=0;//时钟清零CE_5110=1; //disable LCD关液晶使能}void Clear_5110(void){uint i;Write_Byte_5110(0x80,CMD);//写地址for(i=0;i<504;i++){Write_Byte_5110(0x00,DATA);//set the addr as 0x00}}void Set_R_C_5110(uchar R,uchar C) //R=0~5;C=0~83{if(R<=5 && C<=83){Write_Byte_5110(0x40|R,CMD);//写行地址Write_Byte_5110(0x80|C,CMD);//写列地址}}void Init_5110(void){Delay_us(1); //reset LCDRST_5110=0;//复位清零Delay_us(1);RST_5110=1;Write_Byte_5110(0x21,CMD); //扩展指令Write_Byte_5110(0xc8,CMD); //设置偏压Write_Byte_5110(0x20,CMD); //标准指令Clear_5110();Write_Byte_5110(0x0c,CMD); //标准显示模式}void Write_Char_5110(uchar Char){uchar i,j;i=Char-0x20;for(j=0;j<6;j++){Write_Byte_5110(asc2[i][j],DATA);}}void Write_String_5110(uchar *P){uchar i;for(i=0;i<strlen(P);i++){Write_Char_5110(P[i]);}}void Write_hanzis_5110(){uchar i,j;for(i=0;i<10;i=i+2){for(j=0;j<16;j++){Write_Byte_5110(hanzi[i][j],DATA);}}}void Write_hanzix_5110(){uchar i,j;for(i=1;i<10;i=i+2)for(j=0;j<16;j++){Write_Byte_5110(hanzi[i][j],DATA);}}}主函数main.c#include <reg51.h>#include <string.h>#define uchar unsigned char#define uint unsigned int#include"lcd.c"uchar flag,flag1;unsigned char buff[14]="0123456789abcd";unsigned char buff1[14]="---------";void delay(unsigned int z){unsigned int x;unsigned char y;for(x=z;x>0;x--)for(y=20;y>0;y--);}void main(void){delay(500);Init_5110(); //初始化LCD// Write_Byte_5110(0x0c,CMD); //标准显示模式 Set_R_C_5110(1,4);Write_String_5110(buff1);Set_R_C_5110(0,0);Write_String_5110(buff);Set_R_C_5110(2,0);Write_String_5110(buff);// Write_Byte_5110(0x0d,CMD); //反显Set_R_C_5110(3,0);Write_hanzis_5110();Set_R_C_5110(4,0);Write_hanzix_5110();while(1);。

5110LCD小板原理图

5110LCD小板原理图

5110LCD小板原理图:不妥的地方请指出1.增加了74HC165,在不增加任何I/O口的情况下提供8个按键2.板载LCD阻容复位,LCD_reset可以外部控制也可以阻容复位3.背光可以控制4.最少4个I/O端口就可以控制液晶和读取8个按键不放心,按照上图接线进行实物测试结果通过,程序如下:$Device= m16 使用mega16$Stack = 32 堆栈32字节$Clock = 4 时钟4MHz$ShiftOut Data=PORTB.5 ,Clk=PORTB.7,Msb 申明一个简易SPI口$GLCD Nokia3310, SCLK=PORTB.7, SDIN=PORTB.5, DC=PORTB.1, SCE=PORTB.4 3310液晶连接定义$Def RES=PORTB.0 复位脚$LeadChar=" ", Format(3,0) 显示数据格式化$Def SL = PORTB.1 去74HC165锁存$Def led = PORTB.3 去3310背光控制Dim n_key As Byte 保存按键键值Dim n As Byte 显示一个变量n好观察3310有没有运行Dim F0HD As Flash Byte 英文字库F0HDn_key=255Set DDRB.0: Nop 3: Set RES 复位3310LCDSet DDRB.3Reset led 点亮3310背光灯GLcdInit 初始化3310LCDFontSet F0HD 选择字体GLcd(0,5),"" 显示一个字符串DoGLcd(0,2),"key=";n_key 显示键值GLcd(60, 0), n 显示一个变量n好观察3310有没有运行Incr nReset SLSet SL 锁存74HC165Reset DDRB.5 将SDIN变为输入为读取74HC165做准备Set DDRB.7n_key=ShiftIn 获得键值n_key=Not n_keyWaitMs 100Set DDRB.5 将SDIN变为输出为写3310LCD做准备Loop$Include "C:\FastAVR\Nokia3310\F0HD.bas"图片附件:该帖子在2006-1-7 0:26:48 编辑过本站有售:30元/片Nokia 3310手机的点阵LCD模块不仅小巧、省电、驱动容易,而且价钱也便宜。

单片机LCD液晶显示实习报告

单片机LCD液晶显示实习报告

目录引言1、设计题目2、设计要求及实现功能3、硬件电路原路图4、软件流程图5、程序代码6、实验结果7、实验总结8、参考文献引言当今是一个信息化时代,信息的重要性是不言而喻的,获取手段显得尤为重要。

人们所接受的信息有70%来自于人的视觉,无论用何种方式获取信息最终需要有某种显示方式来表示。

在当代显示技术中,主流的有LED显示屏及LCD液晶显示,其中主流的是液晶显示器LCD为代表的平板显示器发展最快、应用最广。

在信息显示技术中,人们发现了信息数字化的重要作用和意义。

数字化的信息更加准确,同一性,更易传输和识别。

很多信息可以直接由数字表示,从而数字化信息显示又成为信息显示的又一个重要内容。

又从数字化显示发展到字符显示,它把人类特有的语言文字用于显示,这种显示与数字显示合在一起用途更广用量更大。

在这同时,人们还希望用图形和图像进行显示,且显示的内容为五彩缤纷,并且可以实时活动和具有三维立体效果。

这些在二十世纪尾声时都已经陆续实现。

LCD的计算机器,手机,便携式计算机,半导体发光数码管显示(LED)的汽车计价器,商场的大屏幕广告,证券所的股票交易显示牌,荧光显示器件(VFD)显示的电子秤,家电,VCD,最新上市的平板等离子(PDP)显示的大彩电,以及CRT显示的彩电。

字符型液晶显示模块由字符型液晶显示屏(LCD),控制驱动主电路HD44780及其扩展电路HD44100,少量阻、容元件,结构件等装配在PCB板上而成。

LCD 产品制造涉及光学、半导体、电机、化工、材料等各项领域,上下游所需技术层面极广,所以少有单一厂商能从材料到成品全部都做,因此各领域分工明显,上游材料包括玻璃基板、ITO导电玻璃厂、偏光板、彩色滤光片、光源模块、液晶、半导体制造工序所需光罩,液晶驱动IC、印刷电路板(PCB)等;中游则集合各材料,制造LCD面板,提供给下游应用厂商使用,由于下游应用产品众多,所需面板规格几乎都不相同,需根据产品切割面板尺寸,因此LCD面板较没有规格产品;下游应用产品种类众多,从各式家电、消费性、信息、通信及工业产品,只要是需要显示的器具,都需使用LCD产品。

(整理)诺基亚LCD5110液晶接线图和程序

(整理)诺基亚LCD5110液晶接线图和程序

该模块具有以下特点:●84x48 的点阵LCD,可以显示4 行汉字,●采用串行接口与主处理器进行通信,接口信号线数量大幅度减少,包括电源和地在内的信号线仅有9 条。

支持多种串行通信协议(如AVR 单片机的SPI、MCS51 的串口模式0等),传输速率高达4Mbps,可全速写入显示数据,无等待时间。

●可通过导电胶连接模块与印制版,而不用连接电缆,用模块上的金属钩可将模块固定到印制板上,因而非常便于安装和更换。

●LCD 控制器/驱动器芯片已绑定到LCD 晶片上,模块的体积很小。

●采用低电压供电,正常显示时的工作电流在200μA 以下,且具有掉电模式。

LPH7366 的这些特点非常适合于电池供电的便携式通信设备和测试设备中C8051F学习笔记:Nokia 5110驱动Nokia5110是一款经典机型,可能由于经典的缘故,旧机器很多,所以很多电子工程师就把旧机器的屏幕拆下来,自己驱动Nokia5110,用于开发的设备显示,取代LCD1602。

使用Nokia5110液晶的四大理由1)性价比高,LCD1602可以显示32个字符,而Nokia5110可以显示15个汉字,30个字符。

Nokia5110裸屏仅8.8元,LCD1602一般15元左右,LCD12864一般50~70元。

2)接口简单,仅四根I/O线即可驱动,LCD1602需11根I/O线,LCD12864需12根。

3)速度快,是LCD12864的20倍,是LCD1602的40倍。

4)Nokia5110工作电压3.3V,正常显示时工作电流200uA以下,具有掉电模式,适合电池供电的便携式移动设备。

可以在市场上买到Nokia5110的裸屏和带PCB的Nokia5110屏幕,因为Nokia5110是不带背光的,所以通常商家会在PCB上按了几个背光LED,上电就能亮,建议大家还是买那种连上PCB的51 10。

Nokia5110原理图:商家把该引出的管脚都引出了,下面就可以连接C8051F的相应管脚,写程序驱动5110了。

完整的NOKIA-5110液晶51单片机驱动程序

完整的NOKIA-5110液晶51单片机驱动程序

Nokia 5110驱动*说明:本驱动适用于51单片机(5V或3.3V),液晶的VCC接5V 或3.3V修改偏置电压可改变5110点阵显示的亮度5110接5V时偏置电压改为(0xa7,0),接3.3V时改为(0xc0,0)*作者:JK*创建日期:2013/1/26*修改日期:#include <reg52.h>#include "font.h"#define uint unsigned int#define uchar unsigned charIO口定义区sbit LCD_RST = P0^0;sbit LCD_CE = P0^1;sbit LCD_DC = P0^2;sbit LCD_DIN = P0^3;sbit LCD_CLK = P0^4;函数声明区void LCD_Init(void);void LCD_WriteByte(unsigned char dat, unsigned char command);void LCD_Set_XY(unsigned char X, unsigned char Y);void LCD_Clear(void);void LCD_WriteChar(unsigned char x,unsigned char y,unsigned char c); void LCD_WriteString(unsigned char X,unsigned char Y,char *s);void LCD_WriteNum(unsigned char X,unsigned char Y,unsigned int num);void LCD_Write_12X16Font(unsigned char x,unsigned char y,unsigned char c[2]);void LCD_DrawPicture(unsigned char X,unsigned char Y,unsigned char const *map,unsigned char Pix_x,unsigned char Pix_y);*函数名:LCD_Init*功能:初始化LCD*参数:无*返回值:无*备注:void LCD_Init(void){unsigned char i;LCD_RST=0; //复位for(i=0;i<150;i++);LCD_RST=1;LCD_WriteByte(0x21, 0); // 使用扩展命令设置LCD模式LCD_WriteByte(0xc0, 0); // 设置偏置电压,修改可改变5110点阵显示的亮度/*5110接5V时偏置电压改为(0xa7,0),接3.3V时改为(0xc0,0)*/LCD_WriteByte(0x20, 0); // 使用基本命令。

51单片机制作诺基亚5110时间可调的时钟

51单片机制作诺基亚5110时间可调的时钟

该表时间可以调整,当按下调整按键的时候,时钟的时位开始闪烁,可以移动调整闪烁位,然后可以加时间,当再按下调整键的时候就不再闪烁了#include "reg52.h"#include "shu.h" 数据的编码不过没写在上面#include "zi.h" 汉字的字模表#include "xzimu.h" 小写字母的字模表sbit sce=P2^0; 芯片使能sbit res=P2^1; 复位端sbit dc=P2^2; 数据命令端口sbit sdin=P2^3; 串行数据输入端口sbit sclk=P2^4; 串行时钟输入端sbit k4=P1^3; 调整时间,时间加,选择位左移右移。

具体是哪个键后面会提到sbit k3=P1^2;sbit k2=P1^1;sbit k1=P1^0;unsigned char shi=12,fen=0,miao=0,count=0,dingwei=0; 时分秒定位等全局变量bit wei; 位定义全局变量这个主要是控制哪位开始闪烁void delay_1ms(void) 延时子程序{unsigned int i; 定义无符号数for(i=0;i<50;i++);}void LCD_write_byte(unsigned char dt,unsigned char command) 液晶写数据命令函数{unsigned char i;sce=0; 使芯片使能,低电平有效dc=command; dc即为数据命令选择控制端口for(i=0;i<8;i++){if(dt&0x80) 判断最高位,如果为1,则数据输出为1sdin=1;elsesdin=0;dt=dt<<1; 左移一位,即次高位,通过循环八次即把一个字节的数据传输出去sclk=0; 时钟的一个上升沿才能把数据传输出去,芯片接收数据的时候只认上升沿,一个上升沿传输一个数据sclk=1;}dc=1;sce=1; 使芯片接下来不受控制sdin=1; 相当于数据输入端的初始化}void LCD_init(void) LCD初始化{res=0; 使芯片复位delay_1ms(); 延时一小段时间res=1; 复位不再有效LCD_write_byte(0x21,0); 功能设置,选择扩展指令集LCD_write_byte(0xd0,0); 设置V OPLCD_write_byte(0x20,0); 功能设置,选择标准指令集LCD_write_byte(0x0C,0); 显示控制}void LCD_set_xy(unsigned char y,unsigned char x) 设定地址行列此显示分为6页(即行),84列{LCD_write_byte(0x40|y,0); 设定y地址LCD_write_byte(0x80|x,0); 设定x地址}void LCD_write_shu(unsigned char x,unsigned char y,unsigned char z) 写数字如果数据比较会占用两页的话就得设置两次地址,分为上下两页写{unsigned char i;LCD_set_xy(x,y*8); 设定显示的位置第N页for(i=1;i<=8;i++){LCD_write_byte(shu[z*16+i],1); 写shu这个数组中的数据}LCD_set_xy(x+1,y*8); 设定显示的位置第N+1页for(i=9;i<=16;i++){LCD_write_byte(shu[z*16+i],1); 写shu这个数组中的紧接下来的数据}}void LCD_write_zi(unsigned char x,unsigned char y,unsigned char z) 写字和上个函数一样{unsigned char i;LCD_set_xy(x,y*8);for(i=1;i<=16;i++){LCD_write_byte(zi[z*32+i],1);}LCD_set_xy(x+1,y*8);for(i=17;i<=32;i++){LCD_write_byte(zi[z*32+i],1);}}void LCD_write_xzimu(unsigned char x,unsigned char y,unsigned char z) 写小字母函数一样{unsigned char i;LCD_set_xy(x,y*8);for(i=1;i<=8;i++){LCD_write_byte(xzimu[z*16+i],1);}LCD_set_xy(x+1,y*8);for(i=9;i<=16;i++){LCD_write_byte(xzimu[z*16+i],1);}}void LCD_clear(void) LCD清屏{unsigned char t;unsigned char k;LCD_set_xy(0,0); 设定清屏的起始地址for(t=0;t<=6;t++) 循环清屏六页{for(k=0;k<84;k++){LCD_write_byte(0x00,1); 全屏写数据零即为清屏}}}timer0()interrupt 1 using 1{ 定时器0TH0=0x4b;TL0=0xff; count++; 定时值可以自己查}void LCD_san(unsigned char x,unsigned char y,unsigned char z) LCD闪烁函数{if(count==8) 定时器定时周期到了八次之后就写空白{LCD_write_xzimu(x,y,4);}if(count==18) 等定时器定时周期到了十八次的时候就写此刻的时间,这样就能实现闪烁的功能了{LCD_write_shu(x,y,z);}}void LCD_tiaoshi(void) 时间调试函数{if(k4==0) 如果k4按键按下{delay_1ms(); 延时去抖动if(k4!=0) 如果按键松开了,则再处理程序,这样可以防止一次按键,程序被执行多次{wei=~wei; wei即为闪烁控制标志位,如果wei==0;则不闪dingwei=1;if(wei==0){LCD_write_shu(2,1,shi/10);LCD_write_shu(2,2,shi%10);LCD_write_shu(2,4,fen/10);LCD_write_shu(2,5,fen%10);}}}if(wei==1){switch(dingwei) dingwei即选择哪一位闪烁,相当于一个闪烁标志位{case 1: LCD_san(2,1,shi/10);break;case 2: LCD_san(2,2,shi%10);break;case 3: LCD_san(2,4,fen/10);break;case 4: LCD_san(2,5,fen%10);break;default: break;}if(k3==0&dingwei!=1) 闪烁位左移{delay_1ms();if(k3!=0){dingwei--;switch(dingwei){case 1: LCD_write_shu(2,2,shi%10);break;case 2: LCD_write_shu(2,4,fen/10);break;case 3: LCD_write_shu(2,5,fen%10);break;default: break;}}}if(k1==0) 时间加{delay_1ms();if(k1!=0){switch(dingwei){case 1: {if(shi/10<=1){shi=shi+10;}else shi=shi-20;};break;case 2: {if(shi%10<9){shi++;}else shi=shi-9;};break;case 3: {if(fen/10<5){fen+=10;}else fen-=50;};break;case 4: {if(fen%10<9){fen++;}else fen-=9;};break;default: break;}}}if(k2==0&dingwei!=4) 闪烁位右移{delay_1ms();if(k2!=0){dingwei++ ;switch(dingwei){case 2: LCD_write_shu(2,1,shi/10);break;case 3: LCD_write_shu(2,2,shi%10);break;case 4: LCD_write_shu(2,4,fen/10);break;default: break;}}}}if(shi>=24){shi-=4;}}void main(){unsigned char k;res=0; 液晶复位for(k=0;k<250;k++);res=1;LCD_init(); 液晶初始化LCD_clear(); 液晶清屏LCD_write_zi(0,1,0); //chong “重”这个汉字这些就是一开机液晶屏显示的初始时间LCD_write_zi(0,3,1); //qing “庆”LCD_write_zi(0,5,2); //shi “时”LCD_write_zi(0,7,3); //jian “间”LCD_write_shu(2,3,10); //mao hao 冒号LCD_write_shu(2,6,10); // mao haoLCD_write_shu(2,1,1); //shi gao 写时的高位LCD_write_shu(2,2,2); //shi di 时的地位LCD_write_shu(2,4,0); //fen gao 分的高位LCD_write_shu(2,5,0); //shi diLCD_write_shu(2,7,0); //miao gaoLCD_write_shu(2,8,0); //miao diLCD_write_xzimu(4,0,0); //cLCD_write_xzimu(4,1,1); //oLCD_write_xzimu(4,2,2); //mLCD_write_xzimu(4,3,3); //eLCD_write_xzimu(4,4,7); //LCD_write_xzimu(4,5,8); //bLCD_write_xzimu(4,6,9); //aLCD_write_xzimu(4,7,10); //bLCD_write_xzimu(4,8,11); //yEA=1;TMOD=0x01; //工作方式定时0TH0=0x4b;TL0=0xff; //定时50msET0=1; //定时器0中断允许TR0=1;while(1){if(count==10) 半秒到了就开始闪烁时间之间的冒号{LCD_write_xzimu(2,3,4);LCD_write_xzimu(2,6,4);}if(count==20) 到了一秒则开始处理时间{LCD_write_shu(2,3,10);LCD_write_shu(2,6,10);count=0;if(miao!=60) 若秒没到60则秒加一{miao++;LCD_write_shu(2,7,miao/10);LCD_write_shu(2,8,miao%10);}if(miao==60){fen++;miao=0;LCD_write_shu(2,7,0);LCD_write_shu(2,8,0);LCD_write_shu(2,4,fen/10);LCD_write_shu(2,5,fen%10);if(fen==60){shi++;LCD_write_shu(2,1,shi/10);LCD_write_shu(2,2,shi%10);fen=0;LCD_write_shu(2,4,0);LCD_write_shu(2,5,0);if(shi==24){shi=0;LCD_write_shu(2,1,0);LCD_write_shu(2,2,0);}}}} LCD_tiaoshi();}}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

XS128单片机实验:诺基亚5110液晶显示
/*********包含的头文件
*****************************/
#include ;
/* common defines and macros */
#include &quot;derivative.h&quot;
/* derivative-specific definitions */
#include &quot;WQ.h&quot;
#include &quot;Font6_8.h&quot;
#include &quot;Bitmap.h&quot;
#include &quot;Font16_16.h&quot;
#include &quot;Font8_16.h&quot;
/****************宏定义
*****************************/
#define SCLK
PTM_PTM4
#define SDIN
PTM_PTM3
#define LCD_DC PTM_PTM5
#define LCD_CE PTM_PTM2
#define LCD_RES PTM_PTM1
#define LED
PTM_PTM0
/****************函数申明
***************************/
void LCD_int(void);
void LCD_write_byte(uchar dt,uchar command); void LCD_write_char(uchar *font);
void LCD_set_XY(uchar x,uchar y);
void LCD_clear(void);
/*1.********************************************* *****/
// LCD_write_byte: 使用spi接口写数据到LCD
// 输入参数:dt 写入的数据
// 使用I/o口模拟SPI总线通讯发送一个字节数据到LCD显示
// Command : 写数据/命令选择
// Data
: 2013、4、26
/************************************************ ***/
void LCD_write_byte(uchar dt,uchar command) { uchar i;
LCD_CE=0;
//使能LCD
delay_us(40);
//延时30us;
if(command==0)
//判断发送数据还是发送命令
LCD_DC=0;
else
LCD_DC=1;
delay_us(40);
//延时30us;
for(i=0;i<8;i++){
if(dt&0x80)
SDIN=1;
// 发送高位
else
SDIN=0;
delay_us(40);
//延时30us;
SCLK=0;
dt=dt<<1;
SCLK=1;
}
LCD_CE=1;
//关闭LCD
}
/*2.********************************************* ****/
// 函数 :LCD_set_xy
// 功能 :设置LCD坐标函数
// 说明:x:横坐标 Y纵坐标
// Date:
2013/4/26
/************************************************ */
void LCD_set_XY(uchar x,uchar y){
LCD_write_byte(0x40|y,0);
//列按位或设置y坐标
LCD_write_byte(0x80|x,0);
//行按位或设置x坐标
}
/*3.********************************************/ // LCD_write_char() ;显示英文字符
// 输入参数:C
:显示的字符
// Date:
2013/4/26
/********************************************/
void LCD_write_char (uchar *font) {
uint i;
for(i=0;i<6;i++)
LCD_write_byte(font[i],1);
}
/*4.********************************************* /
// 函数:LCD_clear
// 功能:清屏
// 参数:无
// Date:2013/4/26
/************************************************ /
void LCD_clear(void) {
uint i;
LCD_write_byte(0x0c,0);
LCD_write_byte(0x80,0);
for(i=0;i<504;i++) {
LCD_write_byte(0,1);
}
}
/************************************************ */
// LCD_init: LCD初始化
// 输入参数无
// Date :2013、4、26
/************************************************ /
void LCD_int(void) {
LCD_RES=0;
delay_ms(2);
LCD_RES=1;
LCD_write_byte(0x21,0);//初始化LCD,功能设定使用扩充指令
LCD_write_byte(0xd0,0);//设定液晶偏置电压; LCD_write_byte(0x20,0);//使用基本指令
LCD_write_byte(0x0c,0);//设定显示模式,正常显示
}
/************************************************ ****/
// 主函数:void mian
// 功能:在诺基亚5110液晶屏上显示字符
// 作者:wangqi
// 时间;2013、4、26
/************************************************ ****/
void main(){
unsigned char
A[6]={0x00,0x7c,0x12,0x11,0x12,0x7c};
unsigned char
B[6]={0x00,0x7f,0x49,0x49,0x49,0x36};
DDRM = 0xFF;
LCD_int();
LCD_clear();
LED=1;
delay_s(5);
LED=0;
while(1){
LCD_set_XY(0,1); LCD_write_char(A); delay_ms(100);
LCD_set_XY(10,1);
LCD_write_char(A);
delay_ms(100);
LCD_set_XY(0,3); LCD_write_char(B); delay_ms(100);
LCD_set_XY(10,4) ; LCD_write_char(B);
}
}。

相关文档
最新文档