一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 14217|回复: 33
收起左侧

[avr] 看看我做的M8/48+5110液晶的小系统板

  [复制链接]
发表于 2010-3-18 15:47 | 显示全部楼层 |阅读模式
先上传图片看看效果,后面再写详细资料:
DSCF0635.JPG
全景图片,显示内容没看清
yl5110.jpg
YLEEE的图标,参考网站LOGO做的,使用白色贴片侧面发光LED,4个LED总计20MA就很亮了,电源直接使用USBASP提供。
发表于 2010-3-18 15:58 | 显示全部楼层
我坐下来看下楼怎么说,
发表于 2010-3-18 16:40 | 显示全部楼层
好漂亮,请教李老师5510的屏和3310的屏是否通用?
发表于 2010-3-18 17:05 | 显示全部楼层
很漂亮!
发表于 2010-3-18 19:27 | 显示全部楼层
好漂亮,好漂亮,好漂亮,
 楼主| 发表于 2010-3-18 19:28 | 显示全部楼层
好漂亮,请教李老师5510的屏和3310的屏是否通用?
fujiachun 发表于 2010-3-18 16:40 https://www.yleee.com.cn/images/common/back.gif


记得在OURDEV论坛看到过,5110跟3310的液晶程序可以通用,但是管脚顺序不太一样
发表于 2010-3-19 18:14 | 显示全部楼层
好东西啊。
发表于 2010-3-23 13:08 | 显示全部楼层
漂亮!!!!!!
 楼主| 发表于 2010-3-23 13:21 | 显示全部楼层
原理图很简单,就不上了。再上几幅实物图:
nokia5110_1.jpg
使用的5110LCD
m8_5110_1.jpg
焊接好元件的正面照
m8_5110_2.jpg
背面
m8_5110_4.jpg
空白PCB正面(下一版用镀金板做,会更漂亮)
m8_5110_3.jpg
PCB背面
C语言代码(ICCAVR)
#include <iom48v.h>
#include <MACROS.h>
// Define I/O pins
#define BIT7 0x80
#define BIT6 0x40
#define BIT5 0x20
#define BIT4 0x10
#define BIT3 0x08
#define BIT2 0x04
#define BIT1 0x02
#define BIT0 0x01
#define LCD_PORT PORTB
#define LCD_DIR  DDRB
#define LCD_IN  PINB
#define LCD_PORT2 PORTD
#define LCD_DIR2 DDRD
#define LCD_IN2  PIND
#define SCLK    BIT0
#define SDIN    BIT6
#define LCD_DC  BIT7
#define LCD_CE  BIT0
#define LCD_RST BIT1
//enable global interrupts
#define GIE (SREG |= BIT(7))
//disable global interrupts
#define GID (SREG &= ~BIT(7))
#define SLEEP() asm("sleep")
/* enables an unsigned char to be used as a series of booleans */
#define BIT(x)        (1 << (x))
#define SETBIT(x, y)   (x |= y)
#define CLEARBIT(x, y) (x &= ~y)
#define CHECKBIT(x, y) (x & y)
#define true 1
#define True 1
#define false 0
#define False 0
unsigned char yleee_bmp[]=
{
/*60x47  84x32*/
0x00,0x00,0x80,0xC0,
0xE0,0x70,0x70,0x78,0x7C,0x3C,0x1C,0x1C,0x1C,0x1E,0x1E,0x1E,0x1E,0x0E,0x0E,0x1E,
0x1C,0x1C,0x3C,0x3C,0x38,0x70,0x70,0xE0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x06,0x03,0x01,0x00,0x00,0x00,0x00,0x06,
0x1E,0x78,0xF0,0xC0,0x80,0x00,0xE0,0xF0,0xF0,0xE0,0x00,0x80,0xC0,0xF0,0x78,0x1C,
0x06,0x00,0x00,0x00,0x01,0x03,0x03,0x07,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,
0x1F,0x3E,0xFC,0xF9,0xF1,0xFC,0x7E,0x1F,0x0F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
0x80,0xF0,0xF8,0x7E,0x0F,0x06,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0xFA,0xFE,0xFE,
0xCE,0xC6,0xC6,0x46,0x46,0x46,0x06,0x06,0x00,0x00,0x80,0x80,0xEE,0xFE,0xFE,0xFE,
0xCE,0xC6,0x46,0x46,0x46,0x46,0x06,0x06,0x00,0x00,0xE0,0xF8,0xFE,0xFE,0xC6,0xC6,
0xCE,0xC6,0x46,0x46,0x06,0x06,0x06,0x06,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x7F,
0x7F,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x3C,0x3F,0x3F,0x19,0x18,
0x18,0x18,0x18,0x18,0x18,0x38,0x30,0x3F,0x3F,0x1D,0x1D,0x1C,0x1C,0x1C,0x1C,0x1C,
0x1C,0x0C,0x0C,0x0C,0x00,0x38,0x3F,0x3F,0x0F,0x1D,0x1D,0x1D,0x0C,0x0C,0x0C,0x0C,
0x0C,0x0C,0x00,0x00,0x00,0x38,0x3F,0x3F,0x1F,0x1F,0x1C,0x0C,0x0C,0x0C,0x0C,0x0C,
0x0C,0x0C,0x08,0x00
};
const unsigned char HZK[][24]={
//我
{0x8A,0x8A,0x4A,0xFE,0x49,0x28,0x7F,0x88,0x49,0x2A,0x08,0x00,0x00,0x04,0x04,0x07,0x02,0x02,0x01,0x01,0x02,0x04,0x07,0x00},
//爱
{0x18,0x2A,0x2A,0x2E,0xFA,0xAE,0xA9,0xAD,0xAB,0x29,0x18,0x00,0x04,0x04,0x02,0x05,0x05,0x02,0x02,0x05,0x04,0x04,0x04,0x00},
//一
{0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x30,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
//乐
{0x00,0x30,0xAE,0x62,0x22,0x22,0xFD,0x61,0xA1,0x30,0x20,0x00,0x02,0x01,0x00,0x00,0x04,0x04,0x07,0x00,0x00,0x01,0x02,0x00},
};
/**********************************
6 x 8 font
1 pixel space at left and bottom
index = ASCII - 32
***********************************/
const 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, 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
};
void LCD_init(void);
void LCD_clear(void);
void delay_1us(void);
void LCD_set_XY(unsigned char x,unsigned char y);
void LCD_write_char(unsigned char c);
void LCD_write_english_string(unsigned char X,unsigned char Y,char *s);
void LCD_write_chinese_string(unsigned char X, unsigned char Y,unsigned char ch_with,unsigned char num,unsigned char line,unsigned char row);
void LCD_draw_bmp_pixel(unsigned char X,unsigned char Y,unsigned char *map,unsigned char Pix_x,unsigned char Pix_y);
void LCD_write_byte(unsigned char dat, unsigned char command);
/******************************************/
void LCD_init(void)
{
    //先设置为输出
    SETBIT(LCD_DIR,SCLK);
    SETBIT(LCD_DIR,SDIN);
    SETBIT(LCD_DIR,LCD_DC);
    SETBIT(LCD_DIR2,LCD_CE);
    SETBIT(LCD_DIR2,LCD_RST);
   
    // 产生一个让LCD复位的低电平脉冲
CLEARBIT(LCD_PORT2,LCD_RST);//LCD_RST = 0;
    delay_1us();
SETBIT(LCD_PORT2,LCD_RST);//LCD_RST = 1;
   
// 关闭LCD
CLEARBIT(LCD_PORT2,LCD_CE);//LCD_CE = 0;
    delay_1us();

// 使能LCD
SETBIT(LCD_PORT2,LCD_CE);//LCD_CE = 1;
    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); // 设定显示模式,正常显示
        
    // 关闭LCD
    CLEARBIT(LCD_PORT2,LCD_CE);  //LCD_CE = 0;
}
/********************************/
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);
}   
}
/************************************/
void delay_1us(void)    //1us延时函数
{
   unsigned int i;
   for(i=0;i<12000;i++);
}
/************************************/
void LCD_set_XY(unsigned char X, unsigned char Y)
{
    LCD_write_byte(0x40 | Y, 0);// column
    LCD_write_byte(0x80 | X, 0);// row
}
/*******************************************/
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_english_String  : 英文字符串显示函数
输入参数:*s      :英文字符串指针;
          X、Y    : 显示字符串的位置,x 0-83 ,y 0-5
--------------------------------------------------*/
void LCD_write_english_string(unsigned char X,unsigned char Y,char *s)
{
    LCD_set_XY(X,Y);
    while (*s)
    {
     LCD_write_char(*s);
     s++;
    }
}
/**************************************************************/
/*-------------------------------------------------
LCD_write_chinese_string: 在LCD上显示汉字
输入参数:X、Y    :显示汉字的起始X、Y坐标;
          ch_with :汉字点阵的宽度
          num     :显示汉字的个数;  
          line    :汉字点阵数组中的起始行数
          row     :汉字显示的行间距
--------------------------------------------------*/                        
void LCD_write_chinese_string(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(HZK[line+i][n],1);
       }
       i++;
       LCD_set_XY((X+(ch_with+row)*i),Y);
    }
}
/***********************************************/
/*----------------------------------------------
LCD_draw_map      : 位图绘制函数
输入参数:X、Y    :位图绘制的起始X、Y坐标;
          *map    :位图点阵数据;
          Pix_x   :位图像素(长)
          Pix_y   :位图像素(宽)
-----------------------------------------------*/
void LCD_draw_bmp_pixel(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;      //计算位图所占行数
    }
    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++;                         //换行
    }      
}
/**********************************************/
/*---------------------------------------------
LCD_write_byte    : 写数据到LCD
输入参数:data    :写入的数据;
          command :写数据/命令选择;
---------------------------------------------*/
void LCD_write_byte(unsigned char dat, unsigned char command)
{
    unsigned char i;
CLEARBIT(LCD_PORT2,LCD_CE);// 使能LCD_CE = 0
    if (command == 0)
{
     CLEARBIT(LCD_PORT,LCD_DC);// 传送命令 LCD_DC = 0;
}
    else
{
     SETBIT(LCD_PORT,LCD_DC);// 传送数据LCD_DC = 1;
}

for(i=0;i<8;i++)
{
  if(dat&0x80)
  {
   SETBIT(LCD_PORT,SDIN);//SDIN = 1;
  }
  else
  {
   CLEARBIT(LCD_PORT,SDIN);//SDIN = 0;
  }
  CLEARBIT(LCD_PORT,SCLK);//SCLK = 0;
  dat = dat << 1;
  SETBIT(LCD_PORT,SCLK);//SCLK = 1;
}
    SETBIT(LCD_PORT2,LCD_CE);//LCD_CE = 1;
}
/*********************************************/
void main(void)
{
DDRB=0xFF;
PORTB=0x3F;
LCD_init();//初始化液晶   
LCD_clear();
{
  //LCD_write_chinese_string(4,0,12,2,0,0);
  LCD_draw_bmp_pixel(0,0,yleee_bmp,84,32);
  LCD_write_chinese_string(44,0,12,2,2,8);
  LCD_write_english_string(0,4," --- FCDZ --- ");
  LCD_write_english_string(0,5," QQ:344219608 ");
}   
}
发表于 2010-3-24 00:03 | 显示全部楼层
PCB有富裕的吗, 能买我几块吗?

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-5-18 13:13 , Processed in 0.069958 second(s), 45 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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