📄 menudrive.c
字号:
#ifndef _MENU_DRIVE_C_
#define _MENU_DRIVE_C_
#include "menudrive.h"
#if _LCD_MENU_
const char CODE_TYPE char_code[5][8] =
{
{0x04,0x0e,0x15,0x04,0x04,0x04,0x04,0x00},/*向上箭头符号*/
{0x02,0x06,0x0e,0x1e,0x0e,0x06,0x02,0x00},/*右三角*/
{0x04,0x04,0x04,0x04,0x15,0x0e,0x04,0x00},/*向下箭头符号*/
{0x18,0x04,0x02,0x01,0x01,0x02,0x04,0x18},/*右括号)*/
{0x03,0x04,0x08,0x10,0x10,0x08,0x04,0x03}/*左括号(*/
};
void LcdWriteInstruction(char value);
void LcdWriteData(char value);
void init_particular_char(void);
void InitLcd(void);
void _delay_time_(unsigned int time)
{
unsigned int data cnt;
for(cnt=0; cnt<time; cnt++) _nop_();
}
void InitLcd(void)
{
_delay_time_(_30_MS_);/*上电到初始化lcd必须有>30ms间隔*/
WriteChip(WRITE_EN_ADDR,0x00);
/*function set ,为2 line,5*8dots,8 bit*/
LcdWriteInstruction(0x38);
/*display on/off control*/
_delay_time_(_39_US_);
LcdWriteInstruction(0x0c);/*不显示光标指针*/
/*clear display*/
_delay_time_(_39_US_);
LcdWriteInstruction(0x01);
/*entry mode set*/
_delay_time_(_1530_US_);
LcdWriteInstruction(0x06);
_delay_time_(_1530_US_);
init_particular_char();
}
void LcdWriteInstruction(char value)
{
WRITE_INSTRUCTION;
WriteChip(WRITE_EN_ADDR,0x01);/*enable*/
WriteChip(WRITE_CODE_ADDR,value);/*write commad code*/
LCD_CLK_WAIT;
WriteChip(WRITE_EN_ADDR,0x00);/*disable*/
}
void LcdWriteData(char value)
{
WRITE_DATA_CHAR;
WriteChip(WRITE_EN_ADDR,0x01);/*enable*/
WriteChip(WRITE_CODE_ADDR,value);
LCD_CLK_WAIT;
WriteChip(WRITE_EN_ADDR,0x00);/*disable*/
}
void diaplay_up_char(void)
{
char cnt;
LcdWriteInstruction(0x40);
for(cnt=0;cnt<8;cnt++)
LcdWriteData(char_code[0][cnt]);
}
void display_triangle_char(void)
{
char cnt;
LcdWriteInstruction(0x48);
for(cnt=0;cnt<8;cnt++)
LcdWriteData(char_code[1][cnt]);
}
void display_down_char(void)
{
char cnt;
LcdWriteInstruction(0x50);
for(cnt=0;cnt<8;cnt++)
LcdWriteData(char_code[2][cnt]);
}
void display_arcR_char(void)
{
char cnt;
LcdWriteInstruction(0x58);
for(cnt=0;cnt<8;cnt++)
LcdWriteData(char_code[3][cnt]);
}
void display_arcL_char(void)
{
char cnt;
LcdWriteInstruction(0x60);
for(cnt=0;cnt<8;cnt++)
LcdWriteData(char_code[4][cnt]);
}
void init_particular_char(void)
{
diaplay_up_char();
display_triangle_char();
display_down_char();
display_arcR_char();
display_arcL_char();
}
void diaplay_char(char row, char col, char value)
{
char initAddr;
(row == 0)? (initAddr = 0x80) : (initAddr = 0xc0);
LcdWriteInstruction(initAddr+col);
LcdWriteData(value);
}
void LcdDisplay_length(char row, char col, char *string, char length)
{
char initAddr;
char len_display = length;
(row == 0)? (initAddr = 0x80) : (initAddr = 0xc0);
LcdWriteInstruction(initAddr+col);/*设置出初始位置*/
while((*string) && (len_display>0))
{
if((*string>0x19) && (*string<0x7f))
{
LcdWriteData(*string);
string++;
}
len_display--;
}
// _delay_time_(100);
}
void back_light_status( char status )
{
/*lcd 背光1 : 亮0:灭*/
WriteChip( MENU_BACK_LIGHT, status );
}
void scrol_control( char status )
{
switch( status )
{
case SCROL_FIRST_ROW_NULL:
diaplay_char( ROW_1, LCD_LAST_CASE, LCD_PRINT_SPACE );
break;
case SCROL_FIRST_ROW_UP:
diaplay_char( ROW_1, LCD_LAST_CASE, LCD_PRINT_UP );
break;
case SCROL_SECOND_ROW_NULL:
diaplay_char( ROW_2, LCD_LAST_CASE, LCD_PRINT_SPACE );
break;
case SCROL_SECOND_ROW_DOWN:
diaplay_char( ROW_2, LCD_LAST_CASE, LCD_PRINT_DOWN );
break;
}
}
void backlight_control( char *status )
{
back_light_status( *status );
}
#endif
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -