📄 lcd6610.c
字号:
#include<iom16v.h>
#define set_lcd_data (PORTB|=(1<<5))
#define clr_lcd_data (PORTB&=~(1<<5))
#define set_lcd_clk (PORTB|=(1<<7))
#define clr_lcd_clk (PORTB&=~(1<<7))
#define set_lcd_cs (PORTB|=(1<<3))
#define clr_lcd_cs (PORTB&=~(1<<3))
#define set_lcd_reset (PORTB|=(1<<4))
#define clr_lcd_reset (PORTB&=~(1<<4))
#define LCD_CMD_SWRESET 0x01
#define LCD_CMD_SLEEPOUT 0x11
#define LCD_CMD_DISPON 0x29
#define LCD_CMD_BSTRON 0x03
#define LCD_CMD_MADCTL 0x36
/*next is a data byte*/
#define MADCTL_HORIZ 0x48
#define LCD_CMD_COLMOD 0x3A
/*第8步是02,256色*/
#define LCD_CMD_INVON 0x21
#define LCD_CMD_RGBSET 0x2D
#define LCD_CMD_SETCON 0x25
#define LCD_CMD_SLEEPIN 0x10
#define LCD_CMD_CASET 0x2A
#define LCD_CMD_PASET 0x2B
#define LCD_CMD_RAMWR 0x2C
#define MADCTL_VERT 0x68
unsigned char Bmp004[]=
{
/*------------------------------------------------------------------------------
源文件 / 文字 : www.smart-io.com
宽×高(像素): 128×16
字模格式/大小 : 单色点阵液晶字模,横向取模,字节倒序/256字节
数据转换日期 : 2004-5-27 2:04:32
------------------------------------------------------------------------------*/
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,0x0C,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xEB,0xEB,0xEB,0x00,0x7C,0x7F,0x3C,0x77,0x3E,0x00,0x0E,0x3C,0x00,0x38,0x3C,0x7F,
0x49,0x49,0x49,0x00,0x42,0x92,0x42,0x4C,0x08,0xFE,0x08,0x42,0x00,0x44,0x42,0x92,
0x49,0x49,0x49,0x00,0x02,0x92,0x78,0x04,0x08,0x00,0x08,0x42,0x00,0x02,0x42,0x92,
0x55,0x55,0x55,0x00,0x3C,0x92,0x44,0x04,0x08,0x00,0x08,0x42,0x00,0x02,0x42,0x92,
0x55,0x55,0x55,0x00,0x40,0x92,0x42,0x04,0x08,0x00,0x08,0x42,0x00,0x02,0x42,0x92,
0x22,0x22,0x22,0x06,0x42,0x92,0x42,0x04,0x08,0x00,0x08,0x42,0x06,0x44,0x42,0x92,
0x22,0x22,0x22,0x06,0x3E,0xB7,0xFC,0x1F,0x30,0x00,0x3E,0x3C,0x06,0x38,0x3C,0xB7,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
};
const unsigned char Bmp_ascii[]=
{
/*------------------------------------------------------------------------------
源文件 / 文字 : a ~Z
宽×高(像素): 5*7
字模格式/大小 : 单色点阵液晶字模,纵向取模,字节倒序/44字节
数据转换日期 : 2004-7-31 2:36:43
------------------------------------------------------------------------------*/
0x7E,0x81,0x81,0x81,0x7E,
0x00,0x82,0xFF,0x80,0x00,
0xC6,0xA1,0x91,0x89,0x86,
0x42,0x81,0x89,0x89,0x76,
0x30,0x2C,0x22,0xFF,0x20,
0x4F,0x89,0x89,0x89,0x71,
0x7E,0x89,0x89,0x89,0x72,
0x03,0x01,0xF9,0x07,0x01,
0x76,0x89,0x89,0x89,0x76,
0x4E,0x91,0x91,0x91,0x7E,
0x28,0x54,0x54,0x78,0x40,
0x01,0x7F,0x48,0x48,0x30,
0x38,0x44,0x44,0x4C,0x00,
0x30,0x48,0x49,0x7F,0x40,
0x38,0x54,0x54,0x58,0x00,
0x48,0x7E,0x49,0x49,0x01,
0x3A,0x55,0x55,0x53,0x21,
0x41,0x7F,0x08,0x48,0x70,
0x00,0x44,0x7D,0x40,0x00,
0x40,0x44,0x44,0x3D,0x00,
0x41,0x7F,0x10,0x68,0x4C,
0x00,0x41,0x7F,0x40,0x00,
0x7C,0x04,0x7C,0x04,0x78,
0x7C,0x04,0x04,0x78,0x00,
0x00,0x38,0x44,0x44,0x38,
0x42,0x7E,0x52,0x12,0x0C,
0x0C,0x12,0x52,0x7E,0x42,
0x44,0x7C,0x48,0x04,0x04,
0x4C,0x54,0x54,0x64,0x00,
0x04,0x3F,0x44,0x40,0x00,
0x3C,0x40,0x40,0x7C,0x40,
0x0C,0x30,0x60,0x30,0x0C,
0x0C,0x70,0x1C,0x70,0x0C,
0x44,0x6C,0x10,0x6C,0x44,
0x02,0x4E,0x50,0x70,0x0E,
0x00,0x64,0x54,0x4C,0x44
};
void LCD_write(unsigned char data,unsigned char dc);
void LCD_contrast(unsigned char data);
void lcd_ascii(char *s,unsigned char len);
void lcd_color(unsigned char bkg,unsigned char text);
void lcd_window(unsigned char xp,unsigned char yp,unsigned char xe,unsigned char ye);
void lcd_gotoxy(unsigned char x, unsigned char y);
void lcd_bar(unsigned char len,unsigned char val,unsigned char bkgcol,unsigned char fillcol);
unsigned char lcd_bkg_color;
unsigned char lcd_text_color;
unsigned char lcd_x;
unsigned char lcd_y;
/***********LCD WRITE******************/
/**********基础程序直接调用即可*********/
void LCD_write(unsigned char data,unsigned char dc)
{
unsigned char temp;
temp=0;
clr_lcd_data;
clr_lcd_clk;
if (dc) set_lcd_data; /*dc=0 instrution*/
else clr_lcd_data;
set_lcd_clk;
clr_lcd_clk;
if (data&0x80) set_lcd_data; //high 4 bit
else clr_lcd_data;
set_lcd_clk;
clr_lcd_clk;
if (data&0x40) set_lcd_data;
else clr_lcd_data;
set_lcd_clk;
clr_lcd_clk;
if (data&0x20) set_lcd_data;
else clr_lcd_data;
set_lcd_clk;
clr_lcd_clk;
if (data&0x10) set_lcd_data;
else clr_lcd_data;
set_lcd_clk;
clr_lcd_clk;
if (data&0x08) set_lcd_data;//low 4 bit
else clr_lcd_data;
set_lcd_clk;
clr_lcd_clk;
if (data&0x04) set_lcd_data;
else clr_lcd_data;
set_lcd_clk;
clr_lcd_clk;
if (data&0x02) set_lcd_data;
else clr_lcd_data;
set_lcd_clk;
clr_lcd_clk;
if (data&0x01) set_lcd_data;
else clr_lcd_data;
set_lcd_clk;
clr_lcd_clk;
}
/***********液晶初始化******************/
/**********基础程序直接调用即可*********/
/*****************************/
void lcd_init(void)
{
clr_lcd_cs; //enable lcd
clr_lcd_reset;
delay_ms(50);
set_lcd_reset;
delay_ms(50);
LCD_write(LCD_CMD_SWRESET,0);
LCD_write(LCD_CMD_SLEEPOUT,0);
LCD_write(LCD_CMD_DISPON,0);
LCD_write(LCD_CMD_BSTRON,0);
LCD_write(LCD_CMD_MADCTL,0);
LCD_write(MADCTL_HORIZ,1);
LCD_write(LCD_CMD_COLMOD,0);
LCD_write(2,1); //2\3\5
LCD_write(LCD_CMD_INVON,0);
LCD_write(LCD_CMD_RGBSET,0);
//wrtab1
LCD_write(0,1);
LCD_write(2,1);
LCD_write(4,1);
LCD_write(6,1);
LCD_write(9,1);
LCD_write(11,1);
LCD_write(13,1);
LCD_write(15,1);
LCD_write(0,1);
LCD_write(2,1);
LCD_write(4,1);
LCD_write(6,1);
LCD_write(9,1);
LCD_write(11,1);
LCD_write(13,1);
LCD_write(15,1);
//wrtab1
LCD_write(00,1);
LCD_write(07,1);
LCD_write(0x0b,1);
LCD_write(0x0f,1);
LCD_contrast(54); //对比度00~127
set_lcd_cs; //disable lcd
}
/***********液晶对比度******************/
void LCD_contrast(unsigned char data) //对比度00~127
{
LCD_write(LCD_CMD_SETCON,0);
LCD_write(data,1);
}
/***********液晶颜色******************/
/******bkg=背景颜色***text=前景颜色*****/
void lcd_color(unsigned char bkg,unsigned char text)
{
lcd_bkg_color=bkg;
lcd_text_color=text;
}
/********液晶窗口*P=原点***e=终点******/
void lcd_window(unsigned char xp,unsigned char yp,unsigned char xe,unsigned char ye)
{
LCD_write(LCD_CMD_CASET,0);
LCD_write(xp,1);
LCD_write(xe,1);
LCD_write(LCD_CMD_PASET,0);
LCD_write(yp,1);
LCD_write(ye,1);
}
/********液晶窗口跳转**128x128*******/
void lcd_gotoxy(unsigned char x, unsigned char y)
{
clr_lcd_cs; //enable lcd
lcd_x=x;
lcd_y=y;
lcd_window(x,y,129,129);
set_lcd_cs; //disable lcd
}
/***********用底色清屏******************/
void lcd_clr(void)
{
unsigned int count;
clr_lcd_cs; //enable lcd
lcd_x=0;
lcd_y=0;
lcd_window(0x00,0x00,0x82,0x83);
LCD_write(LCD_CMD_RAMWR,0);
for (count=0;count<18000;count++)
{
LCD_write(lcd_bkg_color,1);
}
set_lcd_cs; //disable lcd
}
/**********显示一个进度条****粗=14点************/
void lcd_bar(unsigned char len,unsigned char val,unsigned char bkgcol,unsigned char fillcol)
{
unsigned int count;
clr_lcd_cs; //enable lcd
LCD_write(LCD_CMD_MADCTL,0);
LCD_write(MADCTL_VERT,1);
lcd_window(lcd_x,lcd_y,lcd_x+len+1,lcd_y+13);
LCD_write(LCD_CMD_RAMWR,0);
for (count=0;count<14;count++)
{
LCD_write(0,1);
}
for (count=0;count<val*14;count++)
{
LCD_write(fillcol,1);
}
for (count=0;count<(len-val)*14;count++)
{
LCD_write(bkgcol,1);
}
for (count=0;count<14;count++)
{
LCD_write(0,1);
}
LCD_write(LCD_CMD_MADCTL,0);
LCD_write(MADCTL_HORIZ,1);
set_lcd_cs; //disable lcd
}
/**********显示一个8x8点ascii***********/
void lcd_ascii(char *s,unsigned char len)
{
unsigned int count;
lcd_window(lcd_x,lcd_y,lcd_x+len*16-1,lcd_y+15);
LCD_write(LCD_CMD_RAMWR,0);
for (count=0;count<len*32;count++)
{
if (s[count]&0x1) LCD_write(lcd_text_color,1); //high 8 bit
else LCD_write(lcd_bkg_color,1);
if (s[count]&0x2) LCD_write(lcd_text_color,1);
else LCD_write(lcd_bkg_color,1);
if (s[count]&0x4) LCD_write(lcd_text_color,1);
else LCD_write(lcd_bkg_color,1);
if (s[count]&0x8) LCD_write(lcd_text_color,1);
else LCD_write(lcd_bkg_color,1);
if (s[count]&0x10) LCD_write(lcd_text_color,1);
else LCD_write(lcd_bkg_color,1);
if (s[count]&0x20) LCD_write(lcd_text_color,1);
else LCD_write(lcd_bkg_color,1);
if (s[count]&0x40) LCD_write(lcd_text_color,1);
else LCD_write(lcd_bkg_color,1);
if (s[count]&0x80) LCD_write(lcd_text_color,1);
else LCD_write(lcd_bkg_color,1);
}
}
/**********显示一个5x7点ascii***********/
void lcd_ascii_5_7(unsigned char chr_ascii);
void lcd_ascii_5_7(unsigned char chr_ascii)
{
const unsigned char *s;
unsigned char count;
lcd_bkg_color=3;
lcd_text_color=247;
clr_lcd_cs; //enable lcd
s=Bmp_ascii+chr_ascii*5;
lcd_window(lcd_x,lcd_y,lcd_x+6,lcd_y+7);
LCD_write(LCD_CMD_MADCTL,0);
LCD_write(MADCTL_VERT,1);
LCD_write(LCD_CMD_RAMWR,0);
for (count=0;count<5;count++)
{
if (*s&0x1) LCD_write(lcd_text_color,1); //high 8 bit
else LCD_write(lcd_bkg_color,1);
if (*s&0x2) LCD_write(lcd_text_color,1);
else LCD_write(lcd_bkg_color,1);
if (*s&0x4) LCD_write(lcd_text_color,1);
else LCD_write(lcd_bkg_color,1);
if (*s&0x8) LCD_write(lcd_text_color,1);
else LCD_write(lcd_bkg_color,1);
if (*s&0x10) LCD_write(lcd_text_color,1);
else LCD_write(lcd_bkg_color,1);
if (*s&0x20) LCD_write(lcd_text_color,1);
else LCD_write(lcd_bkg_color,1);
if (*s&0x40) LCD_write(lcd_text_color,1);
else LCD_write(lcd_bkg_color,1);
if (*s&0x80) LCD_write(lcd_text_color,1);
else LCD_write(lcd_bkg_color,1);
s++;
}
LCD_write(lcd_bkg_color,1); //字体之间隔一竖行
LCD_write(lcd_bkg_color,1);
LCD_write(lcd_bkg_color,1);
LCD_write(lcd_bkg_color,1);
LCD_write(lcd_bkg_color,1);
LCD_write(lcd_bkg_color,1);
LCD_write(lcd_bkg_color,1);
LCD_write(lcd_bkg_color,1);
lcd_x=lcd_x+6; //自动换下一个位置
if (lcd_x>128)
{
lcd_x=0;
lcd_y=lcd_y+8;
}
if (lcd_y>128) lcd_y=0;
set_lcd_cs; //disable lcd
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -