📄 lcd.c
字号:
#include <lcd.h>
#include <ctype.h>
#include <intr.h>
#include <mutex.h>
unsigned char col = 0;
unsigned char line = 0;
unsigned char page = 7;
unsigned char startline = 0;
struct mutex lcdmutex;
extern const unsigned char fontdata_8x8[];
//extern const unsigned char fontdata_12x12[];
void lcd_reset() // 复位lcd
{
char i=0;
LCD_RES_OUT(); // 使 LCD_RES 引脚为输出状态
LCD_RES_0(); // LCD_RES = 0
for(i=0;i<10;i++); // 延时
LCD_RES_1(); // LCD_RES = 0
}
unsigned char
lcd_read_status() // 读出lcd的状态
{
return(LCD_STATUS_REG);
}
void lcd_set_contrast(unsigned char i) // i <= 63,设置灰度
{
LCD_COMMAND_REG = LCD_CONTRAST;
LCD_COMMAND_REG = i&0x3f;
}
void lcd_set_startline(unsigned char i) // i <= 63 设置行
{
LCD_COMMAND_REG =0x40 + (i & 0x3f);
}
void lcd_set_ratio(unsigned char i) // i <= 7,设置反馈电阻值
{
LCD_COMMAND_REG = (0x20+(i&0x07));
}
void lcd_cls() // 液晶清屏
{
unsigned char i,j;
for(i=0;i<=8;i++)
{
LCD_COMMAND_REG = 0XB0+i; // 设置行
LCD_COMMAND_REG = 0X10; // 设置列h
LCD_COMMAND_REG = 0X00; // 设置列l
for(j=0;j<132;j++)
{
LCD_DATA_REG = 0x00; // 写显示数据
}
}
col = 0;
line = 0;
page = 7;
lcd_set_page(page);
lcd_set_col(STARTCOL);
lcd_write_char('>');
}
void lcd_set_col(unsigned char i)
{
LCD_COMMAND_REG = i % 16;
LCD_COMMAND_REG = 0x10 + i /16;
}
void lcd_set_page(unsigned char i)
{
LCD_COMMAND_REG = 0xB0 + (i & 0x07);
}
void lcd_init() // 液晶初始化
{
lcd_reset();
lcd_power_on();
lcd_set_ratio(0x03); // 设置反馈电阻
lcd_set_contrast(20); // 设置灰度
lcd_cls();
lcd_display_on();
mutex_clear(&lcdmutex);
}
void lcd_write_char(unsigned char i) // 往lcd中写入英文字模
{
unsigned char j;
lcd_scroll();
for(j=0;j<8;j++)
{
LCD_DATA_REG = fontdata_8x8[(i * 8) + j];
}
col = col + 1;
}
void lcd_scroll()
{
unsigned char i;
if(col == COLS )
{
col = 0;
line = line + 1;
lcd_set_col(STARTCOL);
if(line == LINES)
{
line = 7;
if(startline == 0)
{
startline = 64;
page = 8;
}
startline = startline -8;
lcd_set_startline(startline);
}
if(page == 0)
{
page = LINES;
}
page = page - 1;
lcd_set_page(page);
for(i=0;i<132;i++)LCD_DATA_REG = 0X00;
lcd_set_col(STARTCOL);
}
}
void lcd_backspace()
{
if(col != 0)
{
col--;
}
else
{
if(line != 0)
{
line--;
page++;
col = COLS -1;
if(page == LINES)page = 0;
}
}
lcd_set_page(page);
lcd_set_col(col * 8 + STARTCOL);
}
void lcd_put(char c)
{
unsigned char i;
mutex_lock(&lcdmutex);
if (isprint(c)) {
lcd_write_char(c);
} else if (c == '\n') {
col = COLS;
lcd_scroll();
for(i=0;i<8;i++)LCD_DATA_REG = fontdata_8x8['>' * 8 + i];
for(i=8;i<132;i++)LCD_DATA_REG = 0X00;
col = col +1;
lcd_set_col(STARTCOL + 8);
} else if (c == '\b') {
lcd_backspace();
}
mutex_unlock(&lcdmutex);
}
void lcd_put_xy(char x, char y, char z)
{
mutex_lock(&lcdmutex);
col = y;
lcd_set_col(y);
lcd_write_char(z);
mutex_unlock(&lcdmutex);
}
/*
void lcd_write_hz(char * s)
{
char i;
unsigned long d;
unsigned short c;
//c =(unsigned short)*s;
//s +=2;
//d = (c - 0xa1a1)*24;
d= 36;
for(i=0;i<12;i++)
{
LCD_DATA_REG = fontdata_12x12[d + i];
}
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -