📄 ch452_lcd.i
字号:
if((input_position==1)||(input_banjing==1))
postion=7;
}
if(key_press==0xD0) //8号按键
{
if((input_position==1)||(input_banjing==1))
postion=8;
}
if(key_press==0xD1) //9号按键
{
if((input_position==1)||(input_banjing==1))
postion=9;
}
if(key_press==0xD2) //10号按键
{
}
if(key_press==0xD3) //11号按键
{
}
if(key_press==0xD8) //12号按键
{
}
if(key_press==0xD9) //13号按键 //设定保存键
{
save();
}
if(key_press==0xDA) //14号按键 //清屏键
{
W_1byte(0,0,0x0C); //关光标
LCD_Clear();//清屏
//LCD_set_xy(0,0);
input_position=0;
}
if(key_press==0xDB) //15号按键 //返回主菜单
{
monitor=0;
input_position=0;
W_1byte(0,0,0x0C); //关光标
print_root_page();
}
input();
}
/*******************************************************************
函 数 名:W_1byte
入口参数:RW、RS、W_data
出口参数:无
建立日期:2007年8月15日
修改日期:
函数作用:写一个字节的数据到12864液晶,包括指令和数据
说 明:RW=1,从液晶读数据到MCU;RW=0,写一个数据到液晶;
(一般RW都设为0,即只向液晶写数据,不读数据)
RS=1,写入的是数据;RS=0,写入的是指令;
一般模式:RW=0,RS=1;写数据
RW=0,RS=0;写指令
********************************************************************/
void W_1byte(unsigned char RW, unsigned char RS, unsigned char W_data)
{
unsigned int H_data,L_data,S_ID = 0xf8; //11111RWRS0
if(RW == 0)
{
S_ID &=~ 0x04;
}
else //if(RW==1)
{
S_ID |= 0X04;
}
if(RS == 0)
{
S_ID &=~ 0x02;
}
else //if(RS==1)
{
S_ID |= 0X02;
}
H_data = W_data;
H_data &= 0xf0; //屏蔽低4位的数据 //为什么要这样,见SG12864J501C2.pdf第18页
L_data = W_data; //xxxx0000格式
L_data &= 0x0f; //屏蔽高4位的数据
L_data <<= 4; //xxxx0000格式
DDRB.0=1;PORTB.0=1;
Write_8bits(S_ID); //发送S_ID
Write_8bits(H_data); //发送H_data
Write_8bits(L_data); //发送L_data
DDRB.0=1;PORTB.0=0;
}
/********************************************************************
函 数 名:Write_8bits
入口参数:W_bits
出口参数:无
建立日期:2007年8月15日
修改日期:
函数作用:负责串行输出8个bit位
说 明:
********************************************************************/
void Write_8bits(unsigned int W_bits)
{
unsigned int i,Temp_data;
for(i=0; i<8; i++)
{
Temp_data = W_bits;
Temp_data <<= i;
if((Temp_data&0x80)==0) //bit7 is zero
{
DDRB.1=1;PORTB.1=0;
#asm("nop");
DDRB.2=1;PORTB.2=1;
#asm("nop");
#asm("nop");
DDRB.2=1;PORTB.2=0;
#asm("nop");
DDRB.1=1;PORTB.1=0;
}
else //bit7 is one
{
DDRB.1=1;PORTB.1=1;
#asm("nop");
DDRB.2=1;PORTB.2=1;
#asm("nop");
#asm("nop");
DDRB.2=1;PORTB.2=0;
#asm("nop");
DDRB.1=1;PORTB.1=0;
}
}
}
/*******************************************************************
函 数 名:LCD_Init
入口参数:无
出口参数:无
建立日期:2007年8月15日
修改日期:
函数作用:液晶初始化
说 明:
********************************************************************/
void LCD_Init(void)
{
W_1byte(0,0,0x30); //功能设置 8位数据,基本指令
Delay(2);
W_1byte(0,0,0x0C); //显示状态 ON,游标OFF,反白OFF
Delay(2);
W_1byte(0,0,0x01); //清除显示
Delay(2);
W_1byte(0,0,0x02); //地址归位
Delay(2);
W_1byte(0,0,0x80); //设置DDRAM地址
Delay(2);
}
/********************************************************************
函 数 名:LCD_set_xy
入口参数:X:0-3 Y:0-15
出口参数:无
建立日期:2007年8月15日
修改日期:
函数作用:写地址
说 明:y为字体顶行位置,x为字体的列位置 ,
********************************************************************/
void LCD_set_xy(unsigned char y, unsigned char x)
{
unsigned char address;
switch(y)
{
case 0: address = 0x80 + x; break;
case 1: address = 0x90 + x; break;
case 2: address = 0x88 + x; break;
case 3: address = 0x98 + x; break;
default: break;
}
W_1byte(0,0,address);
}
/********************************************************************
函 数 名:LCD_Display
入口参数:*message
出口参数:无
建立日期:2007年8月15日
修改日期:
函数作用:在LCD上显示*message所指向的内容
说 明:
********************************************************************/
void LCD_Display(unsigned char *message)
{
unsigned char i = 0;
for(i=0;message[i]!='\0';i++)
{
W_1byte(0,1,message[i]);
}
}
/*******************************************************************
函 数 名:LCD_Clear
入口参数:无
出口参数:无
建立日期:2007年8月17日
修改日期:
函数作用:清屏
说 明:
********************************************************************/
void LCD_Clear(void)
{
#asm("nop");
W_1byte(0,0,0x01);
#asm("nop");
}
/********************************************************************
函 数 名:Draw_Pic
入口参数:x, y, *Draw
出口参数:无
建立日期:2007年8月18日
修改日期:
函数作用:在LCD上(x,y)处开始显示*Draw所指向的内容
说 明:
********************************************************************/
void Draw_Pic(unsigned char x, unsigned char y, flash unsigned char *Draw)
{
unsigned char i, j, temp_x, temp_y;
W_1byte(0,0,0x34); //8BIT控制界面,扩充指令集,,绘图显示OFF
temp_x = x;
temp_y = y;
temp_x |= 0x80;
temp_y |= 0x80;
for(i=0;i<32;i++ )
{
W_1byte(0,0,temp_y++);//设置绘图区的Y地址坐标
W_1byte(0,0,temp_x);//设置绘图区的X地址坐标
for(j=0;j<16;j++)
{
W_1byte(0,1,*Draw);
Draw++;
}
}
temp_x = 0x88;
temp_y = 0x80;
j = 0;
for(;i<64;i++ )
{
W_1byte(0,0,temp_y++);//设置绘图区的Y地址坐标
W_1byte(0,0,temp_x);//设置绘图区的X地址坐标
for(j=0;j<16;j++)
{
W_1byte(0,1,*Draw);
Draw++;
}
}
W_1byte(0,0,0x36);//8BIT控制界面,扩充指令集,,绘图显示OFF
}
/********************************************************************
函 数 名:Draw_Pic_Clear
入口参数:无
出口参数:无
建立日期:2007年8月18日
修改日期:
函数作用:绘图模式下的清屏
说 明:
********************************************************************/
void Draw_Pic_Clear(void)
{
unsigned char i, j, temp_x, temp_y;
W_1byte(0,0,0x34); //8BIT控制界面,扩充指令集,,绘图显示OFF
temp_x = 0x80;
temp_y = 0x80;
for(i=0;i<32;i++ )
{
W_1byte(0,0,temp_y++);//设置绘图区的Y地址坐标
W_1byte(0,0,temp_x);//设置绘图区的X地址坐标
for(j=0;j<16;j++)
{
W_1byte(0,1,0x00);
}
}
temp_x = 0x88;
temp_y = 0x80;
j = 0;
for(;i<64;i++ )
{
W_1byte(0,0,temp_y++);//设置绘图区的Y地址坐标
W_1byte(0,0,temp_x);//设置绘图区的X地址坐标
for(j=0;j<16;j++)
{
W_1byte(0,1,0x00);
}
}
W_1byte(0,0,0x36);//8BIT控制界面,扩充指令集,,绘图显示OFF
}
/********************************************************************
函 数 名:Draw_Pic_Logo
入口参数:*Draw
出口参数:无
建立日期:2007年8月18日
修改日期:
函数作用:显示启动画面
说 明:
********************************************************************/
void Draw_Pic_Logo(flash unsigned char *Draw)
{
unsigned char i, j, temp_x, temp_y;
W_1byte(0,0,0x34); //8BIT控制界面,扩充指令集,,绘图显示OFF
temp_x = 0x80;
temp_y = 0x80;
for(i=0;i<32;i++ )
{
W_1byte(0,0,temp_y++);//设置绘图区的Y地址坐标
W_1byte(0,0,temp_x);//设置绘图区的X地址坐标
for(j=0;j<16;j++)
{
W_1byte(0,1,*Draw);
Draw++;
}
}
W_1byte(0,0,0x36);//8BIT控制界面,扩充指令集,,绘图显示OFF
}
/********************************************************************
函 数 名:Draw_Pic_LogoBar
入口参数:无
出口参数:无
建立日期:2007年8月18日
修改日期:
函数作用:显示进度条
说 明:
********************************************************************/
void Draw_Pic_LogoBar(void)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -