搜索
bottom↓
回复: 13

ATMEGA 16驱动NOKIA5110

[复制链接]

出0入0汤圆

发表于 2011-4-26 22:38:03 | 显示全部楼层 |阅读模式
刚来的新手,先来报个到。
以前一直在用1602,后来发现了NOKIA5110,价格便宜,功能又强大,于是前几天花了15块钱买了一块NOKIA5110,绿色背光的,用ATMEGA16,调了一下.结果引发了一些问题,最终终于解决了,在这里写出来,供大家参考。看了一下它的PDF,发现工作电压2.7-3.3v.而ATMEGA16工作电压为4.5-5.5v(ATMEGA16L为2.7-5.5v),能直接用AVR驱动5110吗?需不需要电平转换?
用ASM1117给NOKIA5110供电,用AVR驱动,结果失败,屏幕什么都没有显示。程序是从网上考的,看了一遍程序,改动了一下,还是没有显示。问题究竟在哪里?回头仔细看了一下5110 pdf,发现外部供电电压不能低于输入电压,于是,直接改用5v给5110供电,这时发现终于可以了。长期运行,一切正常。所以,5110是可以在5v下工作的。
程序如下:(第一次发帖,还不知道怎么上传附件)
/*****************************************************************************************************************                        
     文件功能: NOKIA5110 液晶显示程序
         液晶48行*84列点阵驱动  2.7-3.3v   5V 使用                                
AVR系统的处理器为:   ATMega16       AVR系统的晶振频率:   8 Mhz               
系统板引脚说明:
1----------VCC
2----------GND
3----------芯片使能 SCE
4----------复位 RST
5----------模式选择 数据命令 R\C(低电平为命令)
6----------串行数据线 DIN
7----------串行时钟线 SCLK
8----------LED 高电平启动背光
函数说明:       
void LCD_Write_Byte(INT8U dat, INT8U com);写入一个字节
void LCD_Write_Byte(INT8U dat, INT8U com);5110LCD初始化 功能设置
void LCD_Set_XY(INT8U X, INT8U Y);设置坐标位置
void LCD_Clear(void);清屏函数
void LCD_Write_Char(INT8U c);显示英文字符
void LCD_Write_String(INT8U X,INT8U Y,INT8 *s);英文字符串显示
void LCD_Write_Shu(INT8U row, INT8U page,INT8U c);写一个字符到LCD函数(8*16点阵) page 0 2 4 row 84/8
void LCD_Write_Hanzi(INT8U row, INT8U page,INT8U c);x,y:写入汉字的地址 address: 写入汉字在han表格中的位置       
void LCD_Write_Num(INT8U row, INT8U page,INT8U c)位图绘制的起始X、Y坐标;*map    :位图点阵数据;Pix_x   :位图像素(长)Pix_y   :位图像素(宽)       
2011.4.6 by afei                                                       
******************************************************************************************************************/  
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
//-----------------宏定义---------------------
#define INT8U unsigned char
#define INT8 signed char
#define INT16u unsigned int
#define INT16 signed int
//-----------------连线方式---------------------
#define SCE_0()   PORTD &=~_BV(PD0)  //片选
#define SCE_1()   PORTD |=_BV(PD0)
#define RST_0()   PORTD &=~_BV(PD1)  //复位,0复位
#define RST_1()   PORTD |=_BV(PD1)
#define DC_0()   PORTD &=~_BV(PD2)  //1写数据,0写指令
#define DC_1()   PORTD |=_BV(PD2)
#define DIN_0()   PORTD &=~_BV(PD3)  //数据
#define DIN_1()   PORTD |=_BV(PD3)
#define SCLK_0()   PORTD &=~_BV(PD4)  //时钟
#define SCLK_1()   PORTD |=_BV(PD4)
#define LED_0()   PORTD &=~_BV(PD5)  //背光关闭
#define LED_1()   PORTD |=_BV(PD5)
//-----------------全局变量 定义字库-------------------
char LCD_BUFFER[10];
const prog_char  font6x8[] =
{
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// horiz lines
};
const prog_char  shuzi[]={
/*--  文字:  0  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,
/*--  文字:  1  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
/*--  文字:  2  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,
/*--  文字:  3  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,
/*--  文字:  4  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,
/*--  文字:  5  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,
/*--  文字:  6  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,
/*--  文字:  7  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,
/*--  文字:  8  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,
/*--  文字:  9  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,
/*--  文字:  a  --10*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,
/*--  文字:  b  --11*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,
/*--  文字:  c  --12*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,
/*--  文字:  d  --13*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,
/*--  文字:  e  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,
/*--  文字:  f  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
/*--  文字:  g  --16*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,
/*--  文字:  h  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,
/*--  文字:  i  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
/*--  文字:  j  --19*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,
/*--  文字:  k  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00,
/*--  文字:  l  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
/*--  文字:  m  --22*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,
/*--  文字:  n  --23*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,
/*--  文字:  o  --24*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,
/*--  文字:  p  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00,
/*--  文字:  q  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80,
/*--  文字:  r  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,                                                                                                                                                          
/*-  文字:  s  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,
/*--  文字:  t  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,
/*--  文字:  u  --30*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,
/*--  文字:  v  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00,
/*--  文字:  w  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00,
/*--  文字:  x  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00,
/*--  文字:  y  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00,
/*--  文字:  z  --35*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,
/*--  文字:  -  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
/*--  文字:  =  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,
/*--  文字:  \  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00,
/*--  文字:     --39*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*--  文字:  [  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,
/*--  文字:  ]  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,
/*--  文字:  ;  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,
/*--  文字:  '  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*--  文字:  ,  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00,
/*--  文字:  .  --45*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,
/*--  文字:  /  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,
};
const prog_char  hanzi[]=
{
/*--  文字:  武  --*/
/*--  幼圆12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x20,0x24,0xA4,0xA4,0x24,0xE4,0xE4,0x24,0x24,0x7E,0xFE,0xE4,0x2C,0x3C,0x38,0x00,
0x80,0xFF,0xFF,0xFF,0xC0,0x7F,0x7F,0x42,0x62,0x22,0x27,0x3F,0xFC,0xE0,0xF8,0x00,

/*--  文字:  汉  --*/
/*--  幼圆12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x40,0x44,0xCC,0x98,0x38,0x34,0x3C,0xFC,0xE4,0x04,0x04,0x84,0xF4,0xFC,0x18,0x00,
0x80,0xE0,0xF0,0x3D,0x8D,0xC0,0x60,0x61,0x37,0x1F,0x1E,0x3F,0x73,0x60,0xC0,0x00,

/*--  文字:  大  --*/
/*--  幼圆12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x20,0x20,0x20,0x20,0x20,0x20,0xA0,0xFE,0xFE,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
0x80,0x80,0xC0,0x60,0x70,0x3C,0x1F,0x07,0x07,0x0F,0x3C,0x70,0x60,0xC0,0x80,0x00,

/*--  文字:  学  --*/
/*--  幼圆12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xE0,0xE0,0xEC,0xBC,0xB8,0xA0,0xA6,0xBE,0xBC,0xB0,0xA0,0xB8,0xBE,0xEE,0xE0,0x00,
0x08,0x08,0x08,0x08,0x88,0x88,0x88,0x0E,0xFE,0xFB,0x6B,0x09,0x08,0x09,0x09,0x00,
};
const prog_char AVR_bmp[]=
{
/*--  调入了一幅图像:C:\Documents and Settings\armok\桌面\1.bmp  --*/
/*--  宽度x高度=60x47  --*/
0x00,0x00,0x00,0x00,0x80,0xE0,0xFC,0xFF,0xFF,0xFF,0x7F,0xFF,0xFE,0xFC,0xF0,0xC1,
0x0F,0x7F,0xFF,0xFF,0xFE,0xF0,0xC0,0x00,0x00,0x00,0xC0,0xF8,0xFE,0xFF,0xFF,0x3F,
0x07,0xC1,0xF0,0xFE,0xFF,0xFF,0xFF,0x1F,0x07,0x8F,0xCF,0xFF,0xFF,0xFF,0xFE,0xFC,
0x00,0x80,0xF0,0xFC,0xFF,0xFF,0xFF,0x7F,0x7F,0x78,0x78,0x79,0x7F,0x7F,0xFF,0xFF,
0xFC,0xF0,0xC1,0x07,0x1F,0xFF,0xFF,0xFE,0xFC,0xFF,0xFF,0xFF,0x1F,0x07,0xC1,0xF0,
0xFE,0xFF,0xFF,0x3F,0x0F,0x0F,0x7F,0xFF,0xFF,0xFF,0xFF,0xE7,0x07,0x03,0x01,0x00,
0x02,0x03,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,
0x03,0x03,0x03,0x03,0x00,0x00,0x03,0x1F,0x3F,0x1F,0x07,0x00,0x00,0x02,0x03,0x03,
0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x03,0x03,0x00,0x00,0x00
  };
//-----------------函数声明-------------------

//---------------------------------------
/****************** 写入一个字节 **********************
函数原型:void LCD_Write_Byte(INT8U dat, INT8U com)
函数功能:写入一个字节
输入参数:dat-写入的数据 com-1 为数据 0为命令
输出参数:无
***********************************************************/
void LCD_Write_Byte(INT8U dat, INT8U com)
{
        INT8U i;         
    SCE_0(); //片选
        _delay_us(20);       
        if(com==0)
                DC_0();
        else
                DC_1();
        for(i=0;i<8;i++)//串行写入八位数据 先写高位 上升沿写入
        {
                if(dat&0x80)
                        DIN_1();
                else
                        DIN_0();
                dat=dat<<1;       
                SCLK_0();
                SCLK_1();
        }       
        SCE_0();
         
}
/****************** 5110LCD初始化函数 **********************
函数原型:void LCD_Write_Byte(INT8U dat, INT8U com)
函数功能:5110LCD初始化 功能设置
输入参数:无
输出参数:无
***********************************************************/
void LCD_init(void)
{
        RST_0();
        _delay_ms(2);
        RST_1();         
        LCD_Write_Byte(0x21,0);//LCD功能设置:芯片活动,水平寻址,使用扩展指令
        LCD_Write_Byte(0xd0,0);//设置VOP值,室温下的编程范围为3.00-10.68
        //Vlcd=3.06+(VOP)*0.06,本例VOP为0B0101 0000为十进制的80,Vlcd=7.86V
        //LCD_Write_Byte(0x06, 0);        // 温度校正
    //LCD_Write_Byte(0x13, 0);        // 1:48
        LCD_Write_Byte(0x20,0);//LCD功能设置:芯片活动,水平寻址,使用基本指令
        LCD_Write_Byte(0x0C,0);//设定显示配置:普通模式
}
/****************** 设置坐标函数 **********************
函数原型:void LCD_Set_XY(INT8U X, INT8U Y)
函数功能:设置坐标位置
输入参数:X-横坐标 Y-纵坐标
输出参数:无
***********************************************************/
void LCD_Set_XY(INT8U X, INT8U Y)
{
        LCD_Write_Byte(0x40 | Y, 0);// column
        LCD_Write_Byte(0x80 | X, 0);// row
}
/****************** LCD清屏函数 **********************
函数原型:void LCD_Clear(void)
函数功能:清屏函数
输入参数:无
输出参数:无
***********************************************************/
void LCD_Clear(void)
{
        INT8U i;
        INT8U j;
        LCD_Set_XY(0,0);
        for(i=0;i<6;i++)//6排*8位*84
        {
                for(j=0;j<84;j++)
                {
                        LCD_Write_Byte(0x00,1);                                                        
                }
        }
}
/******************显示英文字符 **********************
函数原型:void LCD_Write_Char(INT8U c)
函数功能:显示英文字符
输入参数:c-要显示的字符
输出参数:无
***********************************************************/        
void LCD_Write_Char(INT8U c)
{
        INT8U line;
        c -=32;
        for (line=0; line<6; line++)
        LCD_Write_Byte(pgm_read_byte(font6x8+c*6+line), 1);
       
}
/******************英文字符串显示函数 **********************
函数原型:void LCD_Write_String(INT8U X,INT8U Y,INT8 *s)
函数功能:英文字符串显示
输入参数:*s:英文字符串指针
输出参数:无
***********************************************************/
void LCD_Write_String(INT8U X,INT8U Y,INT8 *s)
{
        LCD_Set_XY(X,Y);
        while (*s)
        {
                LCD_Write_Char(*s);
                s++;
        }
}
/******************写一个字符到LCD函数(8*16点阵) ********
函数原型:void LCD_Write_Shu(INT8U row, INT8U page,INT8U c)
函数功能:写一个字符到LCD函数(8*16点阵
输入参数:row,page:写入字符的地址 c: 写入字符在shuzi表格中的位置
输出参数:无
***********************************************************/
void LCD_Write_Shu(INT8U row, INT8U page,INT8U c) //row:列 page:页 C:字符
{
        INT8U i;         
        LCD_Set_XY(row*8, page);// 列,页
        for(i=0; i<8;i++)
        {
                LCD_Write_Byte(pgm_read_byte(shuzi+c*16+i),1);
        }       
    LCD_Set_XY(row*8, page+1);// 列,页
        for(i=8; i<16;i++)
        {
                LCD_Write_Byte(pgm_read_byte(shuzi+c*16+i),1);
        }
}
/******************写一个汉字到LCD函数(16*16点阵) ********
函数原型:void LCD_Write_Hanzi(INT8U row, INT8U page,INT8U c)
函数功能:x,y:写入汉字的地址 address: 写入汉字在han表格中的位置
输入参数:row,page:写入字符的地址 c: 写入字符在shuzi表格中的位置
输出参数:无
***********************************************************/
void LCD_Write_Hanzi(INT8U row, INT8U page,INT8U c,INT8U width) //row:列 page:页 dd:字符 点阵数
{
        INT8U i;  
        LCD_Set_XY(row*width/2, page);// 列,页
        for(i=0; i<width;i++)
        {
                LCD_Write_Byte(pgm_read_byte(hanzi+c*width*2+i),1);                
        }
    LCD_Set_XY(row*width/2, page+1);// 列,页
        for(i=width; i<width*2;i++)
        {
                LCD_Write_Byte(pgm_read_byte(hanzi+c*width*2+i),1);
        }
}
/******************位图绘制函数 ********
函数原型:void LCD_Write_Hanzi(INT8U row, INT8U page,INT8U c)
函数功能:位图绘制
输入参数:X、Y    :位图绘制的起始X、Y坐标;
          *map    :位图点阵数据;
          Pix_x   :位图像素(长)
          Pix_y   :位图像素(宽)
输出参数:无
***********************************************************/
void LCD_Draw_Bmp_Pixel(INT8U X,INT8U Y,INT8U *map,INT8U Pix_x,INT8U Pix_y)
{
    INT16U i,n;
    INT8U row;
    if (Pix_y%8==0) row=Pix_y/8;      //计算位图所占行数
      else
        row=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++;                         //换行
      }      
}
/******************在指定位置显示一个整型数字 ********
函数原型:vvoid  LCD_Write_Num(INT8U X, INT8U Y, INT16 Num)
函数功能:显示一个整型数字
输入参数:
输出参数:无
*********************************************************
void  LCD_Write_Num(INT8U X, INT8U Y, INT16 Num)
{
                sprintf(LCD_BUFFER,"%d",Num);
        LCD_Write_String(X,Y,LCD_BUFFER);
}**/

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2011-5-11 20:25:48 | 显示全部楼层
楼主很强大,谢谢分享!
mark!

出0入12汤圆

发表于 2011-5-11 23:06:15 | 显示全部楼层
不是我打击你噢,这个LCD的驱动是非常非常古老了,如果你能玩出啥新鲜花样来,一定有意思
比如,显示5行汉字............

出0入0汤圆

发表于 2011-6-12 19:48:07 | 显示全部楼层
main函数呢?

出0入0汤圆

发表于 2011-6-27 14:20:44 | 显示全部楼层
"外部供电电压不能低于输入电压",这句话的意思是,屏幕的VCC电压不能低于单片机输出到屏幕的电压,是吗?
我看到不少电路图,都是屏幕输入用二极管降压,单片机用的是5V电压的,难道那些电路图有问题?

出0入0汤圆

发表于 2011-7-5 01:29:14 | 显示全部楼层
为什么我用16就可以驱动,用32就没反应呢?

出0入0汤圆

发表于 2012-1-2 17:13:52 | 显示全部楼层
Mark!!!

出0入0汤圆

发表于 2012-1-2 22:52:39 | 显示全部楼层
为什么不用AVR的SPI接口呢??

出0入0汤圆

发表于 2012-2-22 20:14:51 | 显示全部楼层
回复【楼主位】perfect_fei
-----------------------------------------------------------------------

请问 你在哪里买的5110的屏幕?

出0入0汤圆

发表于 2012-5-20 14:50:35 | 显示全部楼层
楼主,你是否隐藏了一些东西,比如:prog_char ?这是你自己声明的类型吗?pgm_read_byte(hanzi+c*width*2+i)?这又是什么函数?

出0入169汤圆

发表于 2012-5-20 16:06:32 | 显示全部楼层
sunhaojie 发表于 2012-5-20 14:50
楼主,你是否隐藏了一些东西,比如:prog_char ?这是你自己声明的类型吗?pgm_read_byte(hanzi+c*width*2+ ...

呵呵,这是GCC带的的函数。

出0入0汤圆

发表于 2013-8-13 22:31:50 来自手机 | 显示全部楼层
mark……
顶一个…

出0入0汤圆

发表于 2013-10-30 23:12:40 | 显示全部楼层
不错,支持一下啦。。。。。。@@@

出0入0汤圆

发表于 2014-3-9 12:46:30 | 显示全部楼层
5110很好用,我用的stm32驱动5110
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-25 12:47

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表