Nokia_3310_LCD显示模块
- 格式:pdf
- 大小:466.97 KB
- 文档页数:28
Nokia 3310 LCD显示原创Nokia 3310手机的点阵LCD模块不仅小巧、省电、驱动容易,而且价钱也便宜。
因此,最近网上常见到不少朋友都在用单片机来驱动该模块,制做出很多作品。
在此,我要特别感谢神舟兄,是在他的热情帮助下,我才购得这款3310的液晶显示模块。
如果有朋友需要的话也可以和他联系(神舟emal:conglp@ )。
实验目标本实验我们就采用Atmega8或者Atmega48来驱动3310的LCD。
在LCD上显示和移动汉字;在LCD的最上一行显示“欢迎光临电子爱好者俱乐部!”,并且让这串汉字在LCD上从左至右不停地移动。
在LCD上显示英文字符串;在LCD的最底一行固定显示“”。
在LCD上显示位图。
在LCD的中间位置显示“AVR”和“实验室”两个位图。
本站商城提供该LCD模块邮购:/shop/index.asp实验器材Atmega8或者Atmega48芯片一只、3.3V稳压二极管一只、3310LCD点阵液晶显示屏。
Atmega8和Atmega48的管脚顺序完全相同,硬件可以直接替用。
实验电路图及工作原理由于3310LCD的工作电压范围是2.7-3.3V,因此实验中使用一个3.3V的稳压二极管D1将5V电源稳压为3.3V左右,为MCU和LCD供电。
MCU和LCD之间使用SPI接口传输数据。
LCD模块的引脚排列:从模块的背面看,管脚排列顺序从左至右分别为1至8脚。
如下图所示:注意:LCD模块的引脚即使用导线直接焊接上,也要用东西将金属引脚压下去,否则还是不能接触到内部电路实验源程序主程序:文件名是3310LCDTest.c#include <iom48v.h>#include <macros.h>#include "lcd.h"#include "bmp.h"/*******************************************/void main(void){OSCCAL=0x99;// 8M系统内部时钟校准//设置MCU的I/O口DDRB |= LCD_RST | LCD_DC | LCD_CE | SPI_MOSI | SPI_CLK| 0X02;SPSR |= BIT(SPI2X);// 设置SPI时钟倍速SPCR |= BIT(SPE)|BIT(MSTR);// 使能SPI接口,主机模式,4M时钟LCD_init(); //初始化LCD模块LCD_write_String(1,5,""); //显示英文字符串”“LCD_draw_map(0,2,AVR_bmp,40,24); //显示“AVR”位图LCD_draw_map(44,3,china_bmp,36,15); //显示”实验室“位图PORTB |= 0x02; //LED亮while(1){LCD_move_chi(0, 0, 25); //汉字移动显示}}LCD3310驱动程序:文件名3310LCD.c#include <iom48v.h>#include <macros.h>#include "lcd.h"#include "6x8.h"#include "chinese.h"/*---------------------------------------LCD_init: 3310LCD初始化编写日期:2004-8-10最后修改日期:2004-8-10----------------------------*/void LCD_init(void){PORTB &= ~LCD_RST;// 产生一个让LCD复位的低电平脉冲delay_1us();PORTB |= LCD_RST;PORTB &= ~LCD_CE ;// 关闭LCDdelay_1us();PORTB |= LCD_CE;// 使能LCDdelay_1us();LCD_write_byte(0x21, 0);// 使用扩展命令设置LCD模式LCD_write_byte(0xc8, 0);// 设置偏置电压LCD_write_byte(0x06, 0);// 温度校正LCD_write_byte(0x13, 0);// 1:48LCD_write_byte(0x20, 0);// 使用基本命令LCD_clear();// 清屏LCD_write_byte(0x0c, 0);// 设定显示模式,正常显示PORTB &= ~LCD_CE ;// 关闭LCD}/*----------------------------------------------------------------------- LCD_clear: LCD清屏函数编写日期:2004-8-10最后修改日期:2004-8-10-----------------------------------------------------------------------*/ void LCD_clear(void){unsigned int i;LCD_write_byte(0x0c, 0);LCD_write_byte(0x80, 0);for (i=0; i<504; i++)LCD_write_byte(0, 1);}/*----------------------------------------------------------------------- LCD_set_XY: 设置LCD坐标函数输入参数:X:0-83Y:0-5编写日期:2004-8-10最后修改日期:2004-8-10-----------------------------------------------------------------------*/ void LCD_set_XY(unsigned char X, unsigned char Y){LCD_write_byte(0x40 | Y, 0);// columnLCD_write_byte(0x80 | X, 0);// row}/*----------------------------------------------------------------------- LCD_write_char: 显示英文字符输入参数:c:显示的字符;编写日期:2004-8-10最后修改日期:2004-8-10-----------------------------------------------------------------------*/ void LCD_write_char(unsigned char c){unsigned char line;c -= 32;for (line=0; line<6; line++)LCD_write_byte(font6x8[c][line], 1);}/*----------------------------------------------------------------------- LCD_write_char: 英文字符串显示函数输入参数:*s:英文字符串指针;X、Y: 显示字符串的位置编写日期:2004-8-10最后修改日期:2004-8-10-----------------------------------------------------------------------*/ void LCD_write_String(unsigned char X,unsigned char Y,char *s){LCD_set_XY(X,Y);while (*s){LCD_write_char(*s);s++;}}/*----------------------------------------------------------------------- LCD_write_chi: 在LCD上显示汉字输入参数:X、Y:显示汉字的起始X、Y坐标;ch_with :汉字点阵的宽度num:显示汉字的个数;line:汉字点阵数组中的起始行数row:汉字显示的行间距编写日期:2004-8-11最后修改日期:2004-8-12-----------------------------------------------------------------------*/ void LCD_write_chi(unsigned char X, unsigned char Y,unsigned char ch_with,unsigned char num,unsigned char line,unsigned char row){unsigned char i,n;LCD_set_XY(X,Y);//设置初始位置for (i=0;i<num;){for (n=0; n<ch_with*2; n++)//写一个汉字{if (n==ch_with)//写汉字的下半部分{if (i==0) LCD_set_XY(X,Y+1);elseLCD_set_XY((X+(ch_with+row)*i),Y+1);}LCD_write_byte(china_char[line+i][n],1);}i++;LCD_set_XY((X+(ch_with+row)*i),Y);}}/*----------------------------------------------------------------------- LCD_write_chi: 汉字移动输入参数:X、Y:显示汉字的起始X、Y坐标;T:移动速度;编写日期:2004-8-13最后修改日期:2004-8-13-----------------------------------------------------------------------*/ void LCD_move_chi(unsigned char X, unsigned char Y, unsigned char T){unsigned char i,n,j=0;unsigned char buffer_h[84]={0};unsigned char buffer_l[84]={0};for (i=0; i<156; i++){buffer_h[83] = china_char[i/12][j];buffer_l[83] = china_char[i/12][j+12];j++;if (j==12) j=0;for (n=0; n<83; n++){buffer_h[n]=buffer_h[n+1];buffer_l[n]=buffer_l[n+1];}LCD_set_XY(X,Y);for (n=0; n<83; n++){LCD_write_byte(buffer_h[n],1);}LCD_set_XY(X,Y+1);for (n=0; n<83; n++){LCD_write_byte(buffer_l[n],1);}delay_nms(T);}}/*----------------------------------------------------------------------- LCD_draw_map: 位图绘制函数输入参数:X、Y:位图绘制的起始X、Y坐标;*map:位图点阵数据;Pix_x:位图像素(长)Pix_y:位图像素(宽)编写日期:2004-8-13最后修改日期:2004-8-13-----------------------------------------------------------------------*/ void LCD_draw_map(unsigned char X,unsigned char Y,unsigned char *map, unsigned char Pix_x,unsigned char Pix_y){unsigned int i,n;unsigned char row;if (Pix_y%8==0) row=Pix_y/8;//计算位图所占行数elserow=Pix_y/8+1;for (n=0;n<row;n++){LCD_set_XY(X,Y);for(i=0; i<Pix_x; i++){LCD_write_byte(map[i+n*Pix_x], 1);}Y++;//换行}}/*----------------------------------------------------------------------- LCD_write_byte: 使用SPI接口写数据到LCD输入参数:data:写入的数据;command :写数据/命令选择;编写日期:2004-8-10最后修改日期:2004-8-13-----------------------------------------------------------------------*/ void LCD_write_byte(unsigned char data, unsigned char command){PORTB &= ~LCD_CE ;// 使能LCDif (command == 0)PORTB &= ~LCD_DC ;// 传送命令elsePORTB |= LCD_DC ;// 传送数据SPDR = data;// 传送数据到SPI寄存器while ((SPSR & 0x80) == 0);// 等待数据传送完毕PORTB |= LCD_CE ;// 关闭LCD}o延时程序:文件名delay.c/*----------------------------------------------------------------------- 延时函数系统时钟:8M-----------------------------------------------------------------------*/ void delay_1us(void)//1us延时函数{asm("nop");}void delay_nus(unsigned int n)//N us延时函数{unsigned int i=0;for (i=0;i<n;i++)delay_1us();}void delay_1ms(void)//1ms延时函数{unsigned int i;for (i=0;i<1140;i++);}void delay_nms(unsigned int n)//N ms延时函数{unsigned int i=0;for (i=0;i<n;i++)delay_1ms();}o lcd.h头文件//Mega48/8port B pinout for LCD.#define LCD_DC0x01//PB0#define LCD_CE0x04//PB2#define SPI_MOSI0x08//PB3#define LCD_RST0x10//PB4#define SPI_CLK0x20//PB5void LCD_init(void);void LCD_clear(void);void LCD_write_String(unsigned char X,unsigned char Y,char *s);void LCD_write_chi(unsigned char X, unsigned char Y,unsigned char ch_with,unsigned char num,unsigned char line,unsigned char row);void LCD_move_chi(unsigned char X, unsigned char Y, unsigned char T);void LCD_write_char(unsigned char c);void LCD_draw_map(unsigned char X,unsigned char Y,unsigned char *map,unsigned char Pix_x,unsigned char Pix_y);void LCD_write_byte(unsigned char data, unsigned char dc);void delay_1us(void);void delay_nus(unsigned int n);void delay_1ms(void);void delay_nms(unsigned int n);o点阵数据文件chinese.h文件:/*------------------------------------------------------------------------------;源文件 / 文字 : 欢迎光临电子爱好者俱乐部!;宽×高(像素): 12×13;字模格式/大小 : 单色点阵液晶字模,纵向取模,字节倒序/24字节;数据转换日期: 2004-8-12 14:22:30------------------------------------------------------------------------------*/const unsigned char china_char[][24]={{0x14,0x24,0xC4,0x3C,0x04,0x30,0x0E,0xE8,0x08,0x28,0x18,0x00,0x04,0x03, 0x00,0x09,0x0A,0x04,0x03,0x00,0x03,0x04,0x08,0x00},//汉字“欢”{0x10,0xF2,0x04,0x00,0xFC,0x84,0x82,0xFC,0x04,0x04,0xFC,0x00,0x0C,0x03, 0x04,0x04,0x09,0x08,0x08,0x0B,0x08,0x09,0x09,0x00},//汉字“迎”{0x20,0x24,0x28,0xF0,0x20,0x3E,0xE0,0x30,0x28,0x24,0x20,0x00,0x08,0x08, 0x04,0x03,0x00,0x00,0x07,0x08,0x08,0x08,0x0E,0x00},//汉字“光”{0xF8,0x00,0xFE,0x00,0x20,0x98,0x8E,0x98,0xA8,0x88,0x88,0x00,0x03,0x00, 0x0F,0x00,0x00,0x0F,0x04,0x07,0x04,0x04,0x0F,0x00},//汉字“临”{0x00,0xF8,0x28,0x28,0x28,0xFE,0x28,0x28,0x28,0xFC,0x08,0x00,0x00,0x03, 0x01,0x01,0x01,0x07,0x09,0x09,0x09,0x09,0x0C,0x00},//汉字“电”{0x40,0x42,0x42,0x42,0x42,0xF2,0x52,0x4A,0x46,0x62,0x40,0x00,0x00,0x00, 0x00,0x08,0x08,0x0F,0x00,0x00,0x00,0x00,0x00,0x00},//汉字“子”{0x30,0x54,0x54,0x5C,0xF4,0x5C,0x52,0x5A,0x56,0x52,0x30,0x00,0x08,0x08,0x04,0x0A,0x0B,0x05,0x05,0x0B,0x09,0x08,0x08,0x00},//汉字“爱”{0x88,0x78,0x0E,0x88,0x78,0x42,0x42,0xF2,0x4A,0x46,0x40,0x00,0x09,0x05, 0x02,0x03,0x04,0x00,0x08,0x0F,0x00,0x00,0x00,0x00},//汉字“好”{0x20,0x24,0x24,0xA4,0xFE,0xA4,0xB4,0xAC,0xA4,0x32,0x20,0x00,0x02,0x02, 0x01,0x0F,0x0A,0x0A,0x0A,0x0A,0x0F,0x00,0x00,0x00},//汉字“者”{0x20,0xF8,0x06,0x00,0xFE,0x52,0x52,0x52,0x52,0xFE,0x00,0x00,0x00,0x0F, 0x01,0x09,0x05,0x03,0x01,0x01,0x03,0x05,0x09,0x00},//汉字“俱”{0x00,0x60,0x5C,0xC4,0x44,0x44,0xFA,0xC2,0x42,0x60,0x40,0x00,0x04,0x02, 0x01,0x00,0x08,0x08,0x0F,0x00,0x01,0x02,0x04,0x00},//汉字“乐”{0x24,0xAC,0xB4,0xA6,0xB4,0xAC,0x24,0xFC,0x04,0x74,0x8C,0x00,0x00,0x0F, 0x04,0x04,0x04,0x0F,0x00,0x0F,0x02,0x04,0x03,0x00},//汉字“部”{0x00,0x38,0xFC,0xFC,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x06,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//汉字“!”};6x8.h文件:// 6 x 8 font// 1 pixel space at left and bottom// index = ASCII - 32const unsigned char font6x8[][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, 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, 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, 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, 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, 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, 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};bmp.h文件/*------------------------------------------------------------------------------;源文件 / 文字 : AVR;宽×高(像素): 40×24;字模格式/大小 : 单色点阵液晶字模,纵向取模,字节倒序/120字节;数据转换日期: 2004-8-13------------------------------------------------------------------------------*/unsigned char AVR_bmp[]={0x00,0x00,0x00,0x80,0xF0,0xF0,0x70,0xF0,0xF0,0x80,0x00,0x00,0x00,0x30, 0xF0,0xF0,0xC0,0x00,0x00,0x00,0x00,0x00,0xC0,0xF0,0xF0,0x30,0x00,0xF0, 0xF0,0xF0,0x70,0x70,0x70,0x70,0x70,0xF0,0xE0,0xC0,0x00,0x00,0x00,0xC0, 0xF8,0xFF,0xFF,0xE3,0xE0,0xE3,0xFF,0xFF,0xFC,0xC0,0x00,0x00,0x01,0x0F, 0x7F,0xFE,0xF0,0x80,0xF0,0xFE,0x7F,0x0F,0x01,0x00,0x00,0xFF,0xFF,0xFF, 0x1C,0x1C,0x3C,0x7C,0xFC,0xEF,0xCF,0x07,0x00,0x00,0x06,0x07,0x07,0x01, 0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x07,0x06,0x00,0x00,0x00,0x00,0x03, 0x07,0x07,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x00,0x00, 0x00,0x00,0x01,0x07,0x07,0x07,0x04,0x00};/*------------------------------------------------------------------------------;源文件 / 文字 : 实验室;宽×高(像素): 36×15;字模格式/大小 : 单色点阵液晶字模,纵向取模,字节倒序/72字节;数据转换日期: 2004-8-13------------------------------------------------------------------------------*/unsigned char china_bmp[]={0x20,0x18,0x88,0x28,0x48,0x0C,0xE8,0x08,0x08,0x28,0x18,0x00,0x84,0xF4, 0x84,0xFC,0x40,0x20,0x50,0x4C,0x50,0x20,0x40,0x00,0x10,0x18,0x28,0xA8, 0x68,0x2C,0x28,0x68,0xA8,0x28,0x18,0x00,0x02,0x12,0x12,0x13,0x0A,0x06, 0x03,0x06,0x0A,0x12,0x02,0x00,0x04,0x14,0x12,0x0F,0x10,0x17,0x10,0x17, 0x18,0x17,0x10,0x00,0x10,0x10,0x15,0x15,0x15,0x1F,0x15,0x15,0x15,0x11, 0x10,0x00}。
单片机之路—诺基亚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的。
LED数码管的驱动是比较简单也容易理解的,多位数码管一般是LED阵列的形式,每个数字使用一个公共端,不同数字的对应同笔段使用一个控制端;驱动采用分时扫描没个数字位,动态显示。
但是LED比较费电,我想做一个用电池供电的钟,用发光管电池就撑不了多久了。
于是我考虑用液晶。
在这边的电子市场我买到一个4位笔段式液晶屏,4个数字最中间有冒号,边上还有几个箭头符号,一共有15个引脚,正合适用AVR来驱动做一个钟。
笔段式LCD屏的结构与LED数码管很相似,但是由于是液晶,工作机理上不同,驱动方式也有很大差异:(1) LED有正负之分,液晶笔划没有。
(2) LED在直流电压下工作,液晶需要交流电压,防止电解效应。
(3) LED需要电流提供发光的能量,液晶笔划显示状态下电流非常微弱。
(4) LED对微小电流不反应,液晶则很敏感。
不难看出,用LED的驱动方式来对待LCD屏是行不通的。
我在买回来测试这块屏之前没有意识到,于是走了不少的弯路。
与LED驱动不同的是需要给每个笔划加上一个交流电压。
一般用30-60Hz的方波就可以了,频率再低显示会有所波动,频率高了功耗也会增加,因为LCD对电路呈现容性。
而且,正负电压都可以“点亮”液晶。
好在AVR的I/O口可以三态输出,也就是除了高/低电平,还可以呈现高阻抗,相当于断开连接。
于是我想到了这样的办法:不需要显示的那一组笔划对应的公共端悬空(I/O口选择三态),那么就不会加上电压了。
照这个思路,我的实验电路焊好,出来的显示却是一团糟:笔划都黑了看不清。
我这才考虑到液晶本身的问题:阻抗高,而且有电容,是不可一边悬空的!这个道理也许跟CMOS输入端差不多。
查找了一些关于液晶的资料,大致知道LCD屏不是那么简单的,驱动方式通常是1/N, 也就是电压不止高低两档。
可是单片机I/O没有那么多输出状态可以选择。
1/2 Bias驱动不显示的液晶笔划两端电压相等,显示的不等。
这样一个要求在扫描方式下不能满足,于是改为电压等级不同。
NOKIA3310结构设计分析-图文NOKIA 3310 机构设计分析1. 上盖部分A. 基本肉厚1.5B. 材料 ABS+PCC. 共有组件8pcs(上盖)如下图键盘﹑镜片﹑保护薄膜﹑NOKIA logo﹑饰条﹑显示屏处密封圈﹑喇叭处密封圈﹑D. 产品结构定位孔A 入水口定位孔A为饰条装配时定位孔﹐饰条采用胶固定在上盖产品采用扣位与下盖及电路部分固定连接E. 模具结构采用热流道模具结构﹐图中标示处为入水位置。
共有倒扣位8处﹐采用6斜顶﹐2行位抽芯1. 下盖部分A. 基本肉厚1.5B. 材料 ABS+PCC. 共有组件3pcs(含下盖)如下图NOKIA logo﹑POM塑料弹钮 (与下盖热融)﹑D. 主要结构柱B 卡勾B 柱B为塑料按扭之热融柱卡勾A与上盖固定卡勾B与电池固定板固定 E.模具结构采用热流道模具结构﹐图中标示处为入水位置。
共有倒扣位10处﹐采用6斜顶顶出卡勾A入水口 2. 电池&主板固定板A. B. C. D.基本肉厚1.0 材料﹕ABS+PC功能﹕固定电子元器件及主板电池等主要结构组件此零件下為入水位置麥克風位耳機插孔位充電插孔位电池连接器 SIM卡连接器电池折卸辅助器弹片电源按钮马达连接器此處四卡勾與下蓋連接卡緊螺紋孔(共6處)與電路板鎖緊六處卡勾定位電路板 E. 模具结构采用细水中三板模模胚﹐图中标示处为入水位置。
两侧有各有一大行位抽芯3. 安装顺序及特点A. 特点﹕电子产品与前后盖相互独立﹐电子产品(包括电池)安装在主板固定板上B. 安装顺序﹕第一步﹕将主板固定板(包括电子产品)放到适当的位置后﹐按下卡勾卡住主板固定板第二步﹕把后盖放到一定的位置后向前推进通过主板固定板上弹片顶住后盖而实现安装C. 总结﹕可以很容易实现前后盖的互换﹐使手机外形多样化更多行业资料尽在://.ugproe.NOKIA 8210 机构设计分析材质﹕ABS +PC,镜片用PMMA 肉厚﹕前面板平均肉厚1.00mm 后盖平均肉厚1.00mm 电池盖平均肉厚0.87mm 结构﹕1. 前面板组立﹕分件﹕前面板按钮组立电源按钮镜片滤网123 装配方式﹕(1) 从前面板正面装入电源按钮(2) 利用1处的卡钩及2处的定位柱将镜片固定在前面板上﹐用超声波将两件熔接在一起(3) 贴上滤网﹐装入按钮组立(以3处的定位柱定位)2. 后盖组立﹕分件﹕后盖板电池盖板固定按钮及弹片电子组件电池盖板A BCA,B,C三件是为了降低整个后盖板的复杂程度﹐同时仍能实现相应功能而设计的装配方式﹕(1) 采用超声波压入6个带螺牙的插件(2) 将A与相关的五金件(用于EMI防护)结合后装入图中位置﹐利用后盖板上相应位置的倒勾将A固定(3) 将B﹐C两件装入相应位置﹐同样利用倒勾固定(4) 压入电池盖板固定按钮及弹片﹐依靠金属弹片的配合固定 (5) 将电子零件装入﹐用后盖板上相关的肋定位(6) 装上主板及人机界面板﹐用其外形定位﹐以6颗螺丝固定﹐同时也起到了对后盖上电子零件的固定作用 (7) 将电池盖放在后盖板相应位置向上轻推到位﹐依靠四周十个卡钩及电池盖板固定按钮定位及固定(8) 将前面板组立与后盖组立结合﹐先卡住底部两卡钩﹐向上轻推到位﹐卡住中间及上面的卡钩﹐完成整个手机组立特点﹕1. 不是所有电子零件都焊在主板上﹐而是装在不同部位以弹片进行接触2. 除电子组件与机构件固定用螺丝外﹐其余固定方式均采用卡钩﹐便于拆装下图是Nokia传送的ID图面,我们可以看到他的外观部分发生了变化,变化有以下几点:C B。
2013年重庆地区第7届“盛群杯”大学生单片机应用设计竞赛作品创意书********************************************************** ********************************************************** 作品编号:20130146基于HT66F50的智能花盆********************************************************** ********************************************************** 学校名称:重庆邮电大学院系名称:计算机科学与技术学院光电工程/国际半导体学院指导老师:周应华参赛学生1:冉敏参赛学生2:吕功建参赛学生3:史啸作品创意书一、摘要本作品主要采用HT66F50为核心采用来对花盆温度、湿度、光强、进行实时监控与调节的智能花盆系统。
在这个作品中我们采用数字式DS18B20作为温度传感器、土壤湿度计检测、可见光照度传感器On9658来实现对花盆的环境温度、土壤湿度、光照强度进行检测,并实时显示在液晶屏上。
通过键盘输入花盆中的植物在不同的时间段最适宜的生长条件(湿度、温度、光强),如若超过这一范围则会进行自动调控,如若经过调控后的花盆环境温湿度等依旧不达标,则通过报警的方式来提醒植物栽培者植物的生长处于不健康的状态,需要对其采取相应的措施。
本作品充分利用了HT66F50的A/D转换、时钟控制等功能,减少外部电路的扩展,以优良的软件设计来实现作品强大的功能。
在方案中我们的智能温度处理方法为采用电加热器升温,采用冷机进行降温处理;采用电磁阀滴灌加湿的方法来为植物提供水分,采用滴灌的方法的好处不仅是节约了水资源,而且有效的保证了植物生长期间不存在湿度过高的情况;LED灯组为植物补足光照,采用LED红蓝灯形成的灯组来为植物提供生长的光源。
单片机原理及应用课程设计电气工程学院一、课程设计任务书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集成电路相匹配.电池作为电源,适合于便携式显示。
诺基亚3310液晶是一种OEM产品48X84 pixels matrix LCD controller/driver生产厂家Philips, 型号为:PCD8544可显示84*48点,被评为性价比最好的AVR液晶3310lcd驱动电路:Vdd接3.3V(注意:工作电压是3.3V)或者如图接(1、接100欧姆电阻接5V 2、接二极管再接地)V out接4.7uF电容后接地,电容作用是调对比度GND接地其它的接普通IO口编码显示原理:LCD3310屏幕由84*48个点组成,划分为84列*6行个显示单元,每一个显示单元由1*8个点组成,编程控制显示时按坐标定位,X轴从左到右为0、1、。
83,Y轴从上到下为0、1.。
5,每一个显示单元用一个十六进制0x**控制,0x**转换成二进制后是8个01位,每一个显示单元从上到下为点1到点8,分别对应二进制数的最低到最高位,为1的显示黑点,为0的不显示下面将要讲到的字符显示是用六个连续的显示单元控制显示的,将会显示符号*所以我们可以自由的显示字母、汉字、图片,只要将对应的十六进制控制码写入LCD即可,汉字和图片的控制码可借助于专用的字模生成软件生成。
Pin Signal Description Port1:VDDPower Input. Logic supply voltage range VDD to GND : 2.7 to 3.3 V2:SCLKSerial clock. Input for the clock signal: 0.0 to 4.0 Mbits/s.3:SDINSerial data. Input for the data line.4:D/CMode Select. To select either command/address or data input.5:SCEChip enable input. The enable pin allows data to be clocked in. The signal is active LOW.6:GNDGround7:VOUTOuptut voltage. Add external 1-10 uF electrolytic capacitor from VOUT to GND8:RESExternal reset. This signal will reset the device and must be applied to properlyinitialize the chip. The signal is active LOW.程序:(完整可运行)下面的程序是针对飞思卡尔的十六位单片机MC9S12XS128开发的用于其它MCU时只要将端口改一下,就可移植#include <hidef.h> /* common defines and macros */#include "derivative.h" /* derivative-specific definitions */#define sclk PTM_PTM0 //时钟#define sdin PTM_PTM1 //数据#define dc PTM_PTM2 //1写数据,0写指令#define sce PTP_PTP4 //片选#define res PTP_PTP7 //复位byte const mask_table[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};void Initlcd(void);//LCD初始化void write_byte(byte dd,byte a);//写一个字节到LCDvoid qp(void);//清屏void setadd(byte a,byte d);//设置坐标void DelaymS(word delay);//延时byte const dal1[][6]={//字符显示对应的二维十六进制数组,本程序中没有用到{0x00,0x00,0x00,0x00,0x00,0x00}, // 0位显示空白{0x00,0x00,0x00,0x00,0x00,0x00}, // 1{0x00,0x00,0x00,0x00,0x00,0x00}, // 2{0x00,0x00,0x00,0x00,0x00,0x00}, // 3{0x00,0x00,0x00,0x00,0x00,0x00}, // 4{0x00,0x00,0x00,0x00,0x00,0x00}, // 5{0x00,0x00,0x00,0x00,0x00,0x00}, // 6{0x00,0x00,0x00,0x00,0x00,0x00}, // 7{0x00,0x00,0x00,0x00,0x00,0x00}, // 8{0x00,0x00,0x00,0x00,0x00,0x00}, // 9{0x00,0x00,0x00,0x00,0x00,0x00}, // 10{0x00,0x00,0x00,0x00,0x00,0x00}, // 11{0x00,0x00,0x00,0x00,0x00,0x00}, // 12{0x00,0x00,0x00,0x00,0x00,0x00}, // 13{0x00,0x00,0x00,0x00,0x00,0x00}, // 14{0x00,0x00,0x00,0x00,0x00,0x00}, // 15{0x00,0x00,0x00,0x00,0x00,0x00}, // 16{0x00,0x00,0x00,0x00,0x00,0x00}, // 17{0x00,0x00,0x00,0x00,0x00,0x00}, // 18{0x00,0x00,0x00,0x00,0x00,0x00}, // 19{0x00,0x00,0x00,0x00,0x00,0x00}, // 20{0x00,0x00,0x00,0x00,0x00,0x00}, // 21{0x00,0x00,0x00,0x00,0x00,0x00}, // 22{0x00,0x00,0x00,0x00,0x00,0x00}, // 23{0x00,0x00,0x00,0x00,0x00,0x00}, // 24{0x00,0x00,0x00,0x00,0x00,0x00}, // 25{0x00,0x00,0x00,0x00,0x00,0x00}, // 26{0x00,0x00,0x00,0x00,0x00,0x00}, // 27{0x00,0x00,0x00,0x00,0x00,0x00}, // 28{0x00,0x00,0x00,0x00,0x00,0x00}, // 29{0x00,0x00,0x00,0x00,0x00,0x00}, // 30{0x00,0x00,0x00,0x00,0x00,0x00}, // 31{0x00,0x00,0x00,0x00,0x00,0x00}, // sp 32{0x00,0x00,0x2f,0x00,0x00,0x00}, // ! 33{0x00,0x07,0x00,0x07,0x00,0x00}, // " 34{0x14,0x7f,0x14,0x7f,0x14,0x00}, // # 35{0x24,0x2a,0x7f,0x2a,0x12,0x00}, // $ 36{0x36,0x49,0x55,0x22,0x50,0x00}, // & 38 {0x00,0x05,0x03,0x00,0x00,0x00}, // ' 39 {0x00,0x1c,0x22,0x41,0x00,0x00}, // ( 40 {0x00,0x41,0x22,0x1c,0x00,0x00}, // ) 41 {0x14,0x08,0x3E,0x08,0x14,0x00}, // * 42 {0x08,0x08,0x3E,0x08,0x08,0x00}, // + 43 {0x00,0x00,0x50,0x30,0x00,0x00}, // , 44 {0x10,0x10,0x10,0x10,0x10,0x00}, // - 45 {0x00,0x60,0x60,0x00,0x00,0x00}, // . 46 {0x20,0x10,0x08,0x04,0x02,0x00}, // / 47 {0x3E,0x51,0x49,0x45,0x3E,0x00}, // 0 48 {0x00,0x42,0x7F,0x40,0x00,0x00}, // 1 49 {0x42,0x61,0x51,0x49,0x46,0x00}, // 2 50 {0x21,0x41,0x45,0x4B,0x31,0x00}, // 3 51 {0x18,0x14,0x12,0x7F,0x10,0x00}, // 4 52 {0x27,0x45,0x45,0x45,0x39,0x00}, // 5 53 {0x3C,0x4A,0x49,0x49,0x30,0x00}, // 6 54 {0x01,0x71,0x09,0x05,0x03,0x00}, // 7 55 {0x36,0x49,0x49,0x49,0x36,0x00}, // 8 56 {0x06,0x49,0x49,0x29,0x1E,0x00}, // 9 57 {0x00,0x36,0x36,0x00,0x00,0x00}, // : 58 {0x00,0x56,0x36,0x00,0x00,0x00}, // ; 59 {0x08,0x14,0x22,0x41,0x00,0x00}, // < 60 {0x14,0x14,0x14,0x14,0x14,0x00}, // = 61 {0x00,0x41,0x22,0x14,0x08,0x00}, // > 62 {0x02,0x01,0x51,0x09,0x06,0x00}, // ? 63 {0x32,0x49,0x59,0x51,0x3E,0x00}, // @ 64 {0x7E,0x11,0x11,0x11,0x7E,0x00}, // A 65 {0x7F,0x49,0x49,0x49,0x36,0x00}, // B 66 {0x3E,0x41,0x41,0x41,0x22,0x00}, // C 67 {0x7F,0x41,0x41,0x22,0x1C,0x00}, // D 68 {0x7F,0x49,0x49,0x49,0x41,0x00}, // E 69 {0x7F,0x09,0x09,0x09,0x01,0x00}, // F 70 {0x3E,0x41,0x49,0x49,0x7A,0x00}, // G 71 {0x7F,0x08,0x08,0x08,0x7F,0x00}, // H 72 {0x00,0x41,0x7F,0x41,0x00,0x00}, // I 73 {0x20,0x40,0x41,0x3F,0x01,0x00}, // J 74 {0x7F,0x08,0x14,0x22,0x41,0x00}, // K 75 {0x7F,0x40,0x40,0x40,0x40,0x00}, // L 76 {0x7F,0x02,0x0C,0x02,0x7F,0x00}, // M 77 {0x7F,0x04,0x08,0x10,0x7F,0x00}, // N 78 {0x3E,0x41,0x41,0x41,0x3E,0x00}, // O 79 {0x7F,0x09,0x09,0x09,0x06,0x00}, // P 80{0x7F,0x09,0x19,0x29,0x46,0x00}, // R 82{0x46,0x49,0x49,0x49,0x31,0x00}, // S 83{0x01,0x01,0x7F,0x01,0x01,0x00}, // T 84{0x3F,0x40,0x40,0x40,0x3F,0x00}, // U 85{0x1F,0x20,0x40,0x20,0x1F,0x00}, // V 86{0x3F,0x40,0x38,0x40,0x3F,0x00}, // W 87{0x63,0x14,0x08,0x14,0x63,0x00}, // X 88{0x07,0x08,0x70,0x08,0x07,0x00}, // Y 89{0x61,0x51,0x49,0x45,0x43,0x00}, // Z 90{0x00,0x7F,0x41,0x41,0x00,0x00}, // [ 91{0x55,0x2A,0x55,0x2A,0x55,0x00}, //55 92{0x00,0x41,0x41,0x7F,0x00,0x00}, // ] 93{0x04,0x02,0x01,0x02,0x04,0x00}, // ^ 94{0x40,0x40,0x40,0x40,0x40,0x00}, // _ 95{0x00,0x01,0x02,0x04,0x00,0x00}, // ' 96{0x20,0x54,0x54,0x54,0x78,0x00}, // a 97{0x7F,0x48,0x44,0x44,0x38,0x00}, // b 98{0x38,0x44,0x44,0x44,0x20,0x00}, // c 99{0x38,0x44,0x44,0x48,0x7F,0x00}, // d 100{0x38,0x54,0x54,0x54,0x18,0x00}, // e 101{0x08,0x7E,0x09,0x01,0x02,0x00}, // f 102{0x0C,0x52,0x52,0x52,0x3E,0x00}, // g 103{0x7F,0x08,0x04,0x04,0x78,0x00}, // h 104{0x00,0x44,0x7D,0x40,0x00,0x00}, // i 105{0x20,0x40,0x44,0x3D,0x00,0x00}, // j 106{0x7F,0x10,0x28,0x44,0x00,0x00}, // k 107{0x00,0x41,0x7F,0x40,0x00,0x00}, // l 108{0x7C,0x04,0x18,0x04,0x78,0x00}, // m 109{0x7C,0x08,0x04,0x04,0x78,0x00}, // n 110{0x38,0x44,0x44,0x44,0x38,0x00}, // o 111{0x7C,0x14,0x14,0x14,0x08,0x00}, // p 112{0x08,0x14,0x14,0x18,0x7C,0x00}, // q 113{0x7C,0x08,0x04,0x04,0x08,0x00}, // r 114{0x48,0x54,0x54,0x54,0x20,0x00}, // s 115{0x04,0x3F,0x44,0x40,0x20,0x00}, // t 116{0x3C,0x40,0x40,0x20,0x7C,0x00}, // u 117{0x1C,0x20,0x40,0x20,0x1C,0x00}, // v 118{0x3C,0x40,0x30,0x40,0x3C,0x00}, // w 119{0x44,0x28,0x10,0x28,0x44,0x00}, // x 120{0x0C,0x50,0x50,0x50,0x3C,0x00}, // y 121{0x44,0x64,0x54,0x4C,0x44,0x00}, // z 122{0xD5,0x01,0x80,0x01,0x80,0xAB}, // <50 123 {0xFF,0x81,0x81,0x81,0x81,0xFF}, //50<= <100 124{0xFF,0x81,0xBD,0xBD,0x81,0xFF}, //100<= <150 125{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}, //>=150 126{0x00,0x00,0x00,0x00,0x00,0x00} // sp 127};/*******************显示一幅图****************/uchar dal11[]={//------------------------------------------------------------------------------/*--图像的数据*//*-- 图像宽度*高度=84x48 --*/0xE0,0xFE,0xFE,0xFE,0xFF,0xFF,0xFF,0xE7,0xFB,0xBB,0xBB,0x5B,0xE7,0xFF,0xFF,0xE7,0xFB,0xBB,0xBB,0x5B,0xE7,0xFF,0xFF,0xF7,0xF7,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0xF7,0xFB,0xFB,0xF7,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF3,0xFB,0xFB,0x03,0xFB,0xFB,0xF3,0xFF,0xFF,0x3F,0x5F,0x5F,0x5F,0x5F,0x3F,0xFF,0xFF,0x3F,0xDF,0xDF,0xDF,0x9F,0xFF,0xFF,0xFF,0xDF,0xDF,0x07,0xDF,0xDF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFE,0xFE,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF9,0xF7,0xF7,0xF7,0xF7,0xF8,0xFF,0xFF,0xF9,0xF7,0xF7,0x37,0xF7,0xF8,0xFF,0xFF,0xF7,0xF7,0xF0,0xF7,0xF7,0x7F,0x7F,0x7F,0x7C,0x7B,0x77,0x77,0x7B,0x7C,0x7F,0x7F,0x3F,0x7F,0xFF,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x77,0xB0,0x77,0xFF,0xFF,0x3F,0xFF,0xF8,0xF7,0xF7,0xF7,0xF7,0xFB,0xFF,0xFF,0xF3,0xF6,0xF6,0x36,0xF9,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0xF7,0xF7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x81,0xBD,0xBD,0xBD,0xBD,0x00,0xBD,0xBD,0xBD,0xBD,0x80, 0xFD,0xFF,0xFF,0xFF,0x00,0xFF,0xFD,0xED,0xED,0x01,0xED,0xCD,0xAD,0xFD,0xFF,0x00, 0xFF,0xFF,0xFF,0x00,0xDB,0xDB,0x00,0x7F,0x5B,0xDB,0xDA,0x03,0xDA,0xDB,0xDB,0xDB, 0xFF,0xF7,0x76,0xB6,0xC6,0xF6,0x36,0xF7,0xFB,0x7B,0x80,0xFB,0xFB,0x01,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0xFB,0xFA,0xFA,0xFA,0xFA,0xFA,0xFA,0xFA,0xFA,0xFA,0xF0,0xFF,0xDF,0x1D,0xFC,0xFE,0xFE,0xF0,0xFF,0xF7,0xFB,0xFC,0xFF,0xFE,0xFD,0xF3,0xFB,0xFF,0xFE,0xFC,0xFE,0xFE,0xFE,0xF6,0xFA,0xFD,0xFE,0xFF,0xFB, 0xF7,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE3,0xDD,0xBE,0xBE,0xBE,0xDD,0xFF,0xBE,0xBE,0x80,0xBD,0xBE,0xFE,0xFC,0xFF,0xFF,0xCD,0xB6,0xBA,0xBA,0x81,0xBF, 0xFF,0xFF,0x99,0xB6,0xB6,0xB6,0xCC,0xFF,0xFF,0xFF,0x80,0xBD,0xBE,0xBE,0xBE,0xC1, 0xFF,0xFE,0xFC,0xE2,0x1F,0xCF,0xF2,0xFC,0xFE,0xFF,0xE3,0xDD,0xBE,0xBE,0xDD,0xE3, 0xFF,0xFF,0xC1,0xBA,0xBA,0xBA,0xBA,0xD9,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x7F,0x7F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFE,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x7F,0x7F,0x0F,};void xp11()//写图函数{uchar e;uchar t;uchar k1;uint d;d=0;for(t=0;t<6;t++){for(k1=0;k1<84;k1++){setadd(k1,t);e=dal11[d];write_byte(e,1);d=d+1;}}}//主函数实现的功能是循环显示图片和擦除void main(void){/* put your own code here */DisableInterrupts;/******************SetClock*******************/CLKSEL=0X00; //disengage PLL to systemPLLCTL_PLLON=1; //turn on PLLSYNR =0xc0 | 0x07;REFDV=0xc0 | 0x01;POSTDIV=0x00; //pllclock=2*osc*(1+SYNR)/(1+REFDV)=128MHz;_asm(nop); //BUS CLOCK=64M_asm(nop);while(!(CRGFLG_LOCK==1)); //when pll is steady ,then use it;CLKSEL_PLLSEL =1; //engage PLL to system;while(FSTAT_CCIF == 0); //wait if command in progressFCLKDIV = 0x0F; //set prescaler//EnableInterrupts;for(;;){xp11();DelaymS(2000);qp();DelaymS(2000);_FEED_COP(); /* feeds the dog */} /* loop forever *//* please make sure that you never leave main */ }void Initlcd(void){//LCD端口初始化,GPIO输出DDRM_DDRM0=1;DDRM_DDRM1=1;DDRM_DDRM2=1;DDRP_DDRP4=1;DDRP_DDRP7=1;DelaymS(1);res=0;DelaymS(1);res=1;sce=0;DelaymS(1);sce=1;sdin=1;sclk=1;write_byte(0x21,0);//初始化LCD,write_byte(0xcc,0);//设置液晶偏执电压write_byte(0x20,0);//使用基本指令qp();//write_byte(0x0c,0); //设定显示模式,正常显示sce=0;}void write_byte(byte dd,byte a)//{char i;dc=a;for(i=0;i<8;i++){if(dd&mask_table[i]) {sdin=1;} else {sdin=0;}sclk=0;sclk=1;}dc=1;sce=1;sdin=1;}void setadd(byte a,byte d)//{write_byte((a|0x80),0); //Xwrite_byte((d|0x40),0); //Y}void qp(void)//{byte t;byte k;for(t=0;t<6;t++){for(k=0;k<84;k++){setadd(k,t);write_byte(0,1);}}}void DelaymS(word delay){word i, j;for ( i = delay; i != 0; i -- ){for ( j = 7000; j != 0; j -- ) ;for ( j = 6320; j != 0; j -- ) ;} }。
lcd显示模块工作原理
LCD显示模块是一种将电信号转化为可见光的装置,其工作
原理主要是利用液晶分子在电场作用下的排列变化来实现图像显示。
LCD显示模块首先由若干层不同的材料组成,包括两层偏振
片之间的液晶层、两层玻璃基板以及导电层等。
当液晶显示器模块接收到来自计算机或其他设备的图像信号时,电路会根据信号的控制来控制模块中的液晶分子排列。
液晶分子在无电场作用下呈现一种无序排列的状态,光线穿过液晶层后会被其随机分布的分子转向,无法通过第二层偏振片,因而无法看清屏幕上的图像。
当电场被加入,电场强度高时,液晶分子会排列成垂直于基板的方向,这种排列状态下的液晶分子能够使光线经过第一层偏振片进入液晶层后,继续保持同样的方向,然后透过第二层偏振片出射,从而显示出图像。
而当电场强度低或无电场时,液晶分子就会呈现无序排列的状态,光线会被其随机分布的分子转向,无法通过第二层偏振片,屏幕上的图像也就不可见。
因此,通过控制电场的强度,LCD显示模块能够实现不同像
素的液晶分子排列状态,从而显示出丰富的图像。
/******************************************************************** 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轴。