📄 lcd.c
字号:
#include "config.h"
#define DISPLAY_ON 0X3F
#define DISPLAY_START_LINE 0XC0
#define SET_X_ADDRESS 0XB8
#define SET_Y_ADDRESS 0X40
void Write_LCDByte(uint8 comd_word)
{
if(comd_word&0x01) IO0SET|=LCD_D0;
else IO0CLR|=LCD_D0;
if(comd_word&0x02) IO1SET|=LCD_D1;
else IO1CLR|=LCD_D1;
if(comd_word&0x04) IO0SET|=LCD_D2;
else IO0CLR|=LCD_D2;
if(comd_word&0x08) IO0SET|=LCD_D3;
else IO0CLR|=LCD_D3;
if(comd_word&0x10) IO1SET|=LCD_D4;
else IO1CLR|=LCD_D4;
if(comd_word&0x20) IO0SET|=LCD_D5;
else IO0CLR|=LCD_D5;
if(comd_word&0x40) IO1SET|=LCD_D6;
else IO1CLR|=LCD_D6;
if(comd_word&0x80) IO0SET|=LCD_D7;
else IO0CLR|=LCD_D7;
}
//========================================================================//
void lcd_delay(uint8 delay_timer)
{
uint8 delay_t;
for(delay_t=0;delay_t<delay_timer;delay_t++);
}
void Busy(void)
{
IO0DIR = IO0DIR|LCD_CS1|LCD_CS2|LCD_RW|LCD_E|LCD_D0|LCD_D2|LCD_D3|LCD_D5|LCD_D7;
IO1DIR = IO1DIR|LCD_RS|LCD_D1|LCD_D4|LCD_D6;
IO1CLR|=LCD_RS; //D/I=0
lcd_delay(10);
IO0SET|=LCD_RW; //R/W=1
lcd_delay(10);
Write_LCDByte(0X80);//PORTD=0X\F;
IO0DIR=IO0DIR&0xff7fffff;
while(1)
{
IO0SET|=LCD_E; //E=1
lcd_delay(5);
IO0CLR|=LCD_E; //E=0
if((IO0PIN&0x00800000)==0) break;
}
}
void init_LCD(void)
{
IO0SET|=LCD_CS2;
lcd_delay(10);
IO0CLR|=LCD_CS1;
lcd_delay(10);
write_LCD_comd1(DISPLAY_ON,0);
write_LCD_comd1(DISPLAY_START_LINE,0);
clr_LCD_screen0(0);
lcd_delay(10);
IO0SET|=LCD_CS1;
lcd_delay(10);
IO0CLR|=LCD_CS2;
write_LCD_comd1(DISPLAY_ON,0);
write_LCD_comd1(DISPLAY_START_LINE,0);
clr_LCD_screen0(1);
}
//===========================================================================//
void write_LCD_comd0(uint8 comd_word)
{
Busy();
IO0DIR = IO0DIR|LCD_CS1|LCD_CS2|LCD_RW|LCD_E|LCD_D0|LCD_D2|LCD_D3|LCD_D5|LCD_D7;
IO1DIR = IO1DIR|LCD_RS|LCD_D1|LCD_D4|LCD_D6;
lcd_delay(10);
IO1SET|=LCD_RS;
lcd_delay(10);
IO0CLR|=LCD_RW;
lcd_delay(10);
Write_LCDByte(comd_word);
lcd_delay(10);
IO0SET|=LCD_E;
lcd_delay(10);
IO0CLR|=LCD_E;
}
//===========================================================================//
void write_LCD_comd1(uint8 d1,uint8 comd_word)
{
Busy();
IO0DIR = IO0DIR|LCD_CS1|LCD_CS2|LCD_RW|LCD_E|LCD_D0|LCD_D2|LCD_D3|LCD_D5|LCD_D7;
IO1DIR = IO1DIR|LCD_RS|LCD_D1|LCD_D4|LCD_D6;
lcd_delay(10);
IO0CLR|=LCD_RS;
lcd_delay(10);
IO0CLR|=LCD_RW;
lcd_delay(10);
Write_LCDByte(comd_word|d1);
lcd_delay(10);
IO0SET|=LCD_E;
lcd_delay(10);
IO0CLR|=LCD_E;
}
//----------------------------------------
void clr_LCD_screen0(uint8 Bselect_area)////// clear the LCD_screen
{
unsigned char i,j;
if(Bselect_area)
{
IO0CLR|=LCD_CS2;
IO0SET|=LCD_CS1;
}
else
{
IO0CLR|=LCD_CS1;
IO0SET|=LCD_CS2;
}
lcd_delay(10);
for (i=0;i<8;i++)
{
write_LCD_comd1(SET_X_ADDRESS,i);//set the page address
write_LCD_comd1(SET_Y_ADDRESS,0);//set the list address
for (j=0;j<64;j++)
{
write_LCD_comd0(0);
}
}
}
void clr_LCD_screen(void)
{
clr_LCD_screen0(1);
clr_LCD_screen0(0);
}
//*******************************************************************************
//function:
//description: picture modle
//
//parameter: *word_tab---the first address of the word modle in code area
// word_position_x,word_position_y---the coordinate of the word or
// picture corresponding to the character
// word in the screen
// m---the dots number per row ex. 8,16,24,32....
// n---the dots number per list ex. 8,16,24,32....
//return value:
//*******************************************************************************
void show_picture(uint8 const *word_tab,uint8 word_position_x,uint8 word_position_y,uint8 m,uint8 n)
{
uint8 const *temp_pointer;
uint8 i,j;
uint8 Bchange_area;
temp_pointer=word_tab;
for (i=0;i<n/8;i++)
{
if(word_position_y<64&&word_position_y+m>64)
Bchange_area=1;
else
Bchange_area=0;
if(word_position_y/64)
{
IO0CLR|=LCD_CS2;
IO0SET|=LCD_CS1;
}
else
{
IO0CLR|=LCD_CS1;
IO0SET|=LCD_CS2;
}
lcd_delay(10);
write_LCD_comd1(SET_X_ADDRESS,word_position_x/8+i);//写地址命令
write_LCD_comd1(SET_Y_ADDRESS,word_position_y%64);
for (j=0;j<m;j++)
{
if(Bchange_area)
{
if(word_position_y+j>=64)
{
Bchange_area=0;
IO0CLR|=LCD_CS2;
IO0SET|=LCD_CS1;
write_LCD_comd1(SET_X_ADDRESS,word_position_x/8+i);
write_LCD_comd1(SET_Y_ADDRESS,0);
}
}
write_LCD_comd0(*temp_pointer++);
}
}
}
void show_picture_n(uint8 const *word_tab,uint8 word_position_x,uint8 word_position_y,uint8 m,uint8 n)
{
uint8 const *temp_pointer;
uint8 i,j;
uint8 Bchange_area;
temp_pointer=word_tab;
for (i=0;i<n/8;i++)
{
if(word_position_y<64&&word_position_y+m>64)
Bchange_area=1;
else
Bchange_area=0;
if(word_position_y/64)
{
IO0CLR=LCD_CS2;
IO0SET=LCD_CS1;
}
else
{
IO0CLR=LCD_CS1;
IO0SET=LCD_CS2;
}
lcd_delay(10);
write_LCD_comd1(SET_X_ADDRESS,word_position_x/8+i);
write_LCD_comd1(SET_Y_ADDRESS,word_position_y%64);
for (j=0;j<m;j++)
{
if(Bchange_area)
{
if(word_position_y+j>=64)
{
Bchange_area=0;
IO0CLR=LCD_CS2;
IO0SET=LCD_CS1;
lcd_delay(10);
write_LCD_comd1(SET_X_ADDRESS,word_position_x/8+i);
write_LCD_comd1(SET_Y_ADDRESS,0);
}
}
write_LCD_comd0(~(*temp_pointer++));
}
}
}
void erase_picture(uint8 word_position_x,uint8 word_position_y,uint8 m,uint8 n)
{
uint8 i,j;
uint8 Bchange_area;
lcd_delay(10);
for (i=0;i<n/8;i++)
{
if(word_position_y<64&&word_position_y+m>64)
Bchange_area=1;
else
Bchange_area=0;
if(word_position_y/64)
{
IO0CLR=LCD_CS2;
IO0SET=LCD_CS1;
}
else
{
IO0CLR=LCD_CS1;
IO0SET=LCD_CS2;
}
lcd_delay(10);
write_LCD_comd1(SET_X_ADDRESS,word_position_x/8+i);
write_LCD_comd1(SET_Y_ADDRESS,word_position_y%64);
lcd_delay(10);
for (j=0;j<m+1;j++)
{
if(Bchange_area)
{
if(word_position_y+j>=64)
{
Bchange_area=0;
IO0CLR=LCD_CS2;
IO0SET=LCD_CS1;
lcd_delay(10);
write_LCD_comd1(SET_X_ADDRESS,word_position_x/8+i);
write_LCD_comd1(SET_Y_ADDRESS,0);
}
}
write_LCD_comd0(0);
}
}
}
//===========================================================================//
void Show_Picture_data(uint8 data,uint8 x,uint8 y)
{
uint8 w=8,h=16;
switch(data)
{
case '0':
show_picture(ASCII_0,x,y,w,h);
break;
case '1':
show_picture(ASCII_1,x,y,w,h);
break;
case '2':
show_picture(ASCII_2,x,y,w,h);
break;
case '3':
show_picture(ASCII_3,x,y,w,h);
break;
case '4':
show_picture(ASCII_4,x,y,w,h);
break;
case '5':
show_picture(ASCII_5,x,y,w,h);
break;
case '6':
show_picture(ASCII_6,x,y,w,h);
break;
case '7':
show_picture(ASCII_7,x,y,w,h);
break;
case '8':
show_picture(ASCII_8,x,y,w,h);
break;
case '9':
show_picture(ASCII_9,x,y,w,h);
break;
case 'A':
show_picture(asc_A,x,y,w,h);
break;
case 'B':
show_picture(asc_B,x,y,w,h);
break;
case 'C':
show_picture(asc_C,x,y,w,h);
break;
case 'D':
show_picture(asc_D,x,y,w,h);
break;
case 'E':
show_picture(asc_E,x,y,w,h);
break;
case 'F':
show_picture(asc_F,x,y,w,h);
break;
case 'G':
show_picture(asc_G,x,y,w,h);
break;
case 'H':
show_picture(asc_H,x,y,w,h);
break;
case 'I':
show_picture(asc_I,x,y,w,h);
break;
case 'J':
show_picture(asc_J,x,y,w,h);
break;
case 'K':
show_picture(asc_K,x,y,w,h);
break;
case 'L':
show_picture(asc_L,x,y,w,h);
break;
case 'M':
show_picture(asc_M,x,y,w,h);
break;
case 'N':
show_picture(asc_N,x,y,w,h);
break;
case 'O':
show_picture(asc_O,x,y,w,h);
break;
case 'P':
show_picture(asc_P,x,y,w,h);
break;
case 'Q':
show_picture(asc_Q,x,y,w,h);
break;
case 'R':
show_picture(asc_R,x,y,w,h);
break;
case 'S':
show_picture(asc_S,x,y,w,h);
break;
case 'T':
show_picture(asc_T,x,y,w,h);
break;
case 'U':
show_picture(asc_U,x,y,w,h);
break;
case 'V':
show_picture(asc_V,x,y,w,h);
break;
case 'W':
show_picture(asc_W,x,y,w,h);
break;
case 'X':
show_picture(asc_X,x,y,w,h);
break;
case 'Y':
show_picture(asc_Y,x,y,w,h);
break;
case 'Z':
show_picture(asc_Z,x,y,w,h);
break;
/*
case 'a':
show_picture(asc_a,x,y,w,h);
break;
case 'b':
show_picture(asc_b,x,y,w,h);
break;
case 'c':
show_picture(asc_c,x,y,w,h);
break;
case 'd':
show_picture(asc_d,x,y,w,h);
break;
case 'e':
show_picture(asc_e,x,y,w,h);
break;
case 'f':
show_picture(asc_f,x,y,w,h);
break;
case 'g':
show_picture(asc_g,x,y,w,h);
break;
case 'h':
show_picture(asc_h,x,y,w,h);
break;
case 'i':
show_picture(asc_i,x,y,w,h);
break;
case 'j':
show_picture(asc_j,x,y,w,h);
break;
case 'k':
show_picture(asc_k,x,y,w,h);
break;
case 'l':
show_picture(asc_l,x,y,w,h);
break;
case 'm':
show_picture(asc_m,x,y,w,h);
break;
case 'n':
show_picture(asc_n,x,y,w,h);
break;
case 'o':
show_picture(asc_o,x,y,w,h);
break;
case 'p':
show_picture(asc_p,x,y,w,h);
break;
case 'q':
show_picture(asc_q,x,y,w,h);
break;
case 'r':
show_picture(asc_r,x,y,w,h);
break;
case 's':
show_picture(asc_s,x,y,w,h);
break;
case 't':
show_picture(asc_t,x,y,w,h);
break;
case 'u':
show_picture(asc_u,x,y,w,h);
break;
case 'v':
show_picture(asc_v,x,y,w,h);
break;
case 'w':
show_picture(asc_w,x,y,w,h);
break;
case 'x':
show_picture(asc_x,x,y,w,h);
break;
case 'y':
show_picture(asc_y,x,y,w,h);
break;
case 'z':
show_picture(asc_z,x,y,w,h);
break;
case ':':
show_picture(maohao,x,y,w,h);
break;
case '_':
show_picture(Xhx,x,y,w,h);
break;
case '|':
show_picture(Shx,x,y,w,h);
break;
case '.':
show_picture(dian,x,y,w,h);
break;
default:
show_picture(ASCII_0,x,y,w,h);
break;
*/
}
}
void Show_Str(uint8 *str,uint8 x,uint8 y,uint8 lenth)
{
uint8 i;
for(i=0;i<lenth;i++)
{
Show_Picture_data(str[i],x,(y+(8*i)));
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -