📄 lcd_3310.h
字号:
#include <avr/io.h>
#include <avr/wdt.h>
//#include "ascII.h"
#define LCD_DC_PIN 0x01 // PA0
#define LCD_RST_PIN 0x02 // PA1
#define LCD_CE_PIN 0x04 // PA2
#define SPI_MOSI_PIN 0x20 // PB5
#define SPI_CLK_PIN 0x80 // PB7
#define X_Length 45
#define X_Init 2
#define Y_Init 2
#define BIT(x) (1<<(x))
#define WDR() asm("wdr")
/*--------------------------------------------------------------------------------------------------
Public function prototypes
--------------------------------------------------------------------------------------------------*/
void LcdInit ( void );
void LcdClear ( void );
void display_one_char(unsigned char x,unsigned char y,unsigned char char_data);
void display_list_char(unsigned char x,unsigned char y,unsigned char *data_s);
static void LcdSend ( unsigned char, unsigned char);
static void Delay ( void );
void LcdGotoXY ( unsigned char, unsigned char );
unsigned char TIME_NUM[3]={12,0,0};
unsigned char TIME_ASC[9]={'[',0x31,0x32,0x3A,0x30,0x30,']',' ',' '};
const unsigned char TIME_TAB[]=
{
0xFE,0x82,0x82,0x82,0xFE, //0
0xFE,0xFE,0x00,0x00,0x00, //1
0xF2,0x92,0x92,0x92,0x9E, //2
0x00,0x92,0x92,0x92,0xFE, //3
0x1E,0x10,0x10,0x10,0xFE, //4
0x9E,0x92,0x92,0x92,0xF2, //5
0xFE,0x92,0x92,0x92,0xF2, //6
0x02,0x02,0x02,0x02,0xFE, //7
0xFE,0x92,0x92,0x92,0xFE, //8
0x9E,0x92,0x92,0x92,0xFE, //9
};
void display_T(unsigned char x,unsigned char y,unsigned char char_data)
{
unsigned char D;
LcdGotoXY(x*6,y);
char_data-=0x30;
char_data*=5;
for(D=0;D<5;D++)LcdSend(TIME_TAB[char_data+D],1);
LcdSend(0x00,1);
}
void display_TIME(void)
{
display_one_char(0,0,TIME_ASC[0]);
display_T(1,0,TIME_ASC[1]);
display_T(2,0,TIME_ASC[2]);
display_one_char(3,0,TIME_ASC[3]);
display_T(4,0,TIME_ASC[4]);
display_T(5,0,TIME_ASC[5]);
display_one_char(6,0,TIME_ASC[6]);
display_one_char(7,0,TIME_ASC[7]);
display_one_char(8,0,TIME_ASC[8]);
}
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
{ 0x00, 0x06, 0x0A, 0xFE, 0x0A, 0x06 } // ANT
};
/*--------------------------------------------------------------------------------------------------
Name : LcdInit
Description : Performs MCU SPI & LCD controller initialization.
Argument(s) : None.
Return value : None.
--------------------------------------------------------------------------------------------------*/
void LcdInit( void )
{
//unsigned char Clear;
// Pull-up on reset pin,上电复位端口,此时为高,不复位;
PORTA |= LCD_RST_PIN;
DDRA |= LCD_RST_PIN | LCD_CE_PIN | LCD_DC_PIN ;
DDRB |= SPI_MOSI_PIN | SPI_CLK_PIN;
Delay();
// Toggle display reset pin.
PORTA &= ~LCD_RST_PIN; //上电复位;
Delay();
PORTA |= LCD_RST_PIN; //复位完;
// SPI初始化;Enable SPI port: No interrupt, MSBit first, Master mode, CPOL->0, CPHA->0, Clk/4
SPCR = BIT(SPE)|BIT(MSTR); //使能SPI,主机模式;
//SPSR = 0x00; //似乎不用这几句也能正常运行;
//Clear= SPSR;
//Clear= SPDR;
// Disable LCD controller
PORTA |= LCD_CE_PIN;
LcdSend( 0x21, 0 ); // LCD Extended Commands.
LcdSend( 0xC8, 0 ); // Set LCD Vop (Contrast).
LcdSend( 0x06, 0 ); // Set Temp coefficent.
LcdSend( 0x13, 0 ); // LCD bias mode 1:48.
LcdSend( 0x20, 0 ); // LCD Standard Commands, Horizontal addressing mode.
LcdSend( 0x0C, 0 ); // LCD in normal mode.
//LcdSend( 0x0d, 0 ); // LCD in normal mode.
LcdClear();
}
/*--------------------------------------------------------------------------------------------------
Name : LcdClear
Description : Clears the display.
Argument(s) : None.
Return value : None.
--------------------------------------------------------------------------------------------------*/
void LcdClear(void)
{
unsigned int i;
LcdSend(0x0c, 0);
LcdSend(0x80, 0); //此时默认操作为清屏
for (i=0; i<504; i++)
LcdSend(0, 1);
}
/*--------------------------------------------------------------------------------------------------
Name : LcdGotoXY 设置块坐标
Description : Sets cursor location to xy location corresponding to basic font size.
Argument(s) : x, y -> Coordinate for new cursor position. Range: 1,1 .. 14,6
Return value : None.
--------------------------------------------------------------------------------------------------*/
void LcdGotoXY(unsigned char X, unsigned char Y)
{
LcdSend(0x40 | Y, 0); // column
LcdSend(0x80 | X, 0); // row
}
/*--------------------------------------------------------------------------------------------------
Name : LcdSend
Description : Sends data to display controller.
Argument(s) : data -> Data to be sent
cd -> Command or data (see/use enum)
Return value : None.
--------------------------------------------------------------------------------------------------*/
static void LcdSend (unsigned char data, unsigned char command)
{
PORTA &= ~LCD_CE_PIN ; // 使能LCD
if (command == 0)
PORTA &= ~LCD_DC_PIN ; // 传送命令
else
PORTA |= LCD_DC_PIN ; // 传送数据
SPDR = data; // 传送数据到SPI寄存器
while ((SPSR & 0x80) == 0); // 等待数据传送完毕
PORTA |= LCD_CE_PIN ; // 关闭LCD
}
/*--------------------------------------------------------------------------------------------------
Name : Delay
Description : Uncalibrated delay for LCD init routine.
Argument(s) : None.
Return value : None.
--------------------------------------------------------------------------------------------------*/
static void Delay ( void )
{
int i;
for ( i = -12000; i < 12000; i++ )WDR();//喂狗
}
/*--------------------------------------------------------------------------------------------------
Name : display_one_char
Description : display a char on led's X and Y
Argument(s) : unsigned char x,unsigned char y,unsigned char char_data
Return value : None.
--------------------------------------------------------------------------------------------------*/
void display_one_char(unsigned char x,unsigned char y,unsigned char char_data)
{
unsigned char i;
LcdGotoXY(x*6,y);
char_data-=32;
for (i=0;i<6;i++)
{
LcdSend(font6x8[char_data][i],1);
}
LcdSend(0,1);
}
/*--------------------------------------------------------------------------------------------------
Name : display_list_char
Description : display list char on led's X and Y
Argument(s) : unsigned char x,unsigned char y,unsigned char s*
Return value : None.
--------------------------------------------------------------------------------------------------*/
void display_list_char(unsigned char x,unsigned char y,unsigned char *data_s)
{
unsigned char ListLength=0;
while(ListLength<14)
{
if (x <= 14) //X坐标应小于14
{
display_one_char(x, y, data_s[ListLength]); //显示单个字符
ListLength++;
x++;
}
}
Delay();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -