Nokia_3310_LCD显示模块
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{ 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
实验目标
本实验我们就采用 Atmega8 或者 Atmega48 来驱动 3310 的 LCD。
在 LCD 上显示和移动汉字; 在 LCD 的最上一行显示“欢迎光临电子爱好者俱乐部!”,并且让这串汉字在 LCD 上从左至右不停地移动。 在 LCD 上显示英文字符串; 在 LCD 的最底一行固定显示“www.527dz.com”。 在 LCD 上显示位图。
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 复位的低电平脉冲
在 LCD 的中间位置显示“AVR”和“实验室”两个位图。
本站商城提供该 LCD 模块邮购:http://www.527dz.com/shop/index.asp 实验器材
Atmega8 或者 Atmega48 芯片一只、3.3V 稳压二极管一只、3310LCD 点阵液晶显示屏。 Atmega8 和 Atmega48 的管脚顺序完全相同,硬件可以直接替用。
delay_1us(); PORTB |= LCD_RST; PORTB &= ~LCD_CE ;// 关闭 LCD delay_1us(); PORTB |= LCD_CE;// 使能 LCD delay_1us(); LCD_write_byte(0x21, 0);// 使用扩展命令设置 LCD 模式 LCD_write_byte(0xc8, 0);// 设置偏置电压 LCD_write_byte(0x06, 0);// 温度校正 LCD_write_byte(0x13, 0);// 1:48 LCD_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-83 Y:0-5 编写日期:2004-8-10 最后修改日期:2004-8-10 -----------------------------------------------------------------------*/ void LCD_set_XY(unsigned char X, unsigned char Y) { LCD_write_byte(0x40 | Y, 0);// column LCD_write_byte(0x80 | X, 0);// row } /*----------------------------------------------------------------------LCD_write_char: 显示英文字符 输入参数:c:显示的字符; 编写日期:2004-8-10 最后修改日期:2004-8-10 -----------------------------------------------------------------------*/ void LCD_write_char(unsigned char c) {
LCD_write_String(1,5,"www.527dz.com"); //显示英文字符串”www.527dz.com“ LCD_draw_map(0,2,AVR_bmp,40,24); //显示“AVR”位图 LCD_draw_map(44,3,china_bmp,36,15); //显示”实验室“位图 PORTB |= 0x02; //LED 亮 while(1) {
Nokia 3310 LCD 显示
www.527dz.com 原创
Nokia 3310 手机的点阵 LCD 模块不仅小巧、省电、驱动容易,而且价钱也便宜。因 此,最近网上常见到不少朋友都在用单片机来驱动该模块,制做出很多作品。 在此,我要特别感谢神舟兄,是在他的热情帮助下,我才购得这款 3310 的液晶显示 模块。如果有朋友需要的话也可以和他联系(神舟 emal:conglp@beelink.com )。
实验电路图及工作原理
Biblioteka Baidu
由于 3310LCD 的工作电压范围是 2.7-3.3V,因此实验中使用一个 3.3V 的稳压二极 管 D1 将 5V 电源稳压为 3.3V 左右,为 MCU 和 LCD 供电。 MCU 和 LCD 之间使用 SPI 接口传输数据。
LCD 模块的引脚排列:从模块的背面看,管脚排列顺序从左至右分别为 1 至 8 脚。如下图所示:
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 坐标;
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 模块
} 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++)
•
注意: • LCD 模块的引脚即使用导线直接焊接上,也要用东西将金属引脚压
下去,否则还是不能接触到内部电路
实验源程序
主程序:文件名是 3310LCDTest.c
#include <iom48v.h> #include <macros.h> #include "lcd.h" #include "bmp.h" /*******************************************/ void main(void) {
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); else LCD_set_XY((X+(ch_with+row)*i),Y+1); } LCD_write_byte(china_char[line+i][n],1);