📄 lcd.c
字号:
//***************************** lcd.c ****************************//
//************************ LCM19264驱动程序 **********************//
#include<lcd\lcd.h>
/*****************************************************************
*函数:wiat_ready_left()
*功能:判断液晶左侧屏是否在忙状态
*形式参数:无;
*返回值:无
******************************************************************/
void wait_ready_left(void)
{
unsigned char temp;
while(1)
{
temp=XBYTE[0x9002]; //读状态端口
if((temp&stat_busy)==0)
break;
}
return;
}
/*****************************************************************
*函数:wiat_ready_middle()
*功能:判断液晶中间屏是否在忙状态
*形式参数:无;
*返回值:无
******************************************************************/
void wait_ready_middle(void)
{
unsigned char temp;
while(1)
{
temp=XBYTE[0x9102]; //读状态端口
if((temp&stat_busy)==0)
break;
}
return;
}
/*****************************************************************
*函数:wiat_ready_right()
*功能:判断液晶右侧屏是否在忙状态
*形式参数:无;
*返回值:无
******************************************************************/
void wait_ready_right(void)
{
unsigned char temp;
while(1)
{
temp=XBYTE[0x9202]; //读状态端口
if((temp&stat_busy)==0)
break;
}
return;
}
/*****************************************************************
*函数:set_line()
*功能:设置行
*形式参数:line-行号;
*返回值:无
******************************************************************/
void set_line(unsigned char line)
{
wait_ready_left();
write_inst_left(disp_star_line|line);
wait_ready_middle();
write_inst_middle(disp_star_line|line);
wait_ready_right();
write_inst_right(disp_star_line|line);
return;
}
/*****************************************************************
*函数:set_page()
*功能:设置页
*形式参数:page-页号;
*返回值:无
******************************************************************/
void set_page(unsigned char page)
{
wait_ready_left();
write_inst_left(page_addr_set|page);
wait_ready_middle();
write_inst_middle(page_addr_set|page);
wait_ready_right();
write_inst_right(page_addr_set|page);
return;
}
/*****************************************************************
*函数:set_col()
*功能:设置列
*形式参数:col-列号;
*返回值:无
******************************************************************/
void set_col(unsigned char col)
{
wait_ready_left();
write_inst_left(col_addr_set|col);
wait_ready_middle();
write_inst_middle(col_addr_set|col);
wait_ready_right();
write_inst_right(col_addr_set|col);
return;
}
/*****************************************************************
*函数:lcd_clr_quarter()
*功能:液晶模块横向清1/4屏
*形式参数:part-清除的部分;
*返回值:无
******************************************************************/
extern void lcd_clr_quarter(unsigned char part)
{
unsigned char i,page;
set_line(0);
for (page=part*2;page<part*2+2;page++)
{
set_page(page); //设置当前页
set_col(0); //设置当前列
for (i=0;i<64;i++)
{
wait_ready_left();
write_data_left(0x00); //左侧屏当前列数据为0
wait_ready_middle();
write_data_middle(0x00); //中间屏当前列数据为0
wait_ready_right();
write_data_right(0x00); //右侧屏当前列数据为0
}
}
return;
}
/*****************************************************************
*函数:lcd_clr()
*功能:液晶模块清全屏
*形式参数:无;
*返回值:无
******************************************************************/
extern void lcd_clr(void)
{
unsigned char i,page;
set_line(0);
for (page=0;page<8;page++)
{
set_page(page); //设置当前页
set_col(0); //设置当前列
for (i=0;i<64;i++)
{
wait_ready_left();
write_data_left(0x00); //左侧屏当前列数据为0
wait_ready_middle();
write_data_middle(0x00); //中间屏当前列数据为0
wait_ready_right();
write_data_right(0x00); //右侧屏当前列数据为0
}
}
return;
}
/*****************************************************************
*函数:init_lcd()
*功能:液晶模块初始化
*形式参数:无;
*返回值:无
******************************************************************/
extern void init_lcd(void)
{
wait_ready_left();
write_inst_left(disp_off); //关显示
wait_ready_middle();
write_inst_middle(disp_off);
wait_ready_right();
write_inst_right(disp_off);
set_line(0); //设置开始行为0
set_page(0); //设置开始页地址为0
set_col(0); //设置开始列为0
wait_ready_left();
write_inst_left(disp_on); //开显示
wait_ready_middle();
write_inst_middle(disp_on);
wait_ready_right();
write_inst_right(disp_on);
lcd_clr(); //清屏
return;
}
/*****************************************************************
*函数:disp_bmp()
*功能:在指定位置显示一个高16个点阵宽W个点阵的位图
*形式参数:x-位图横坐标;y-位图纵坐标;width-位图宽度;bmp-位图代码指针;
*返回值:无
******************************************************************/
/*void disp_bmp(unsigned char x,unsigned char y,unsigned char width,unsigned char *bmp)
{
unsigned char i,*p;
p=bmp;
set_line(0);
switch(x/64)
{
case 0: //左侧屏显示
set_page(y/8); //显示位图的上半部
set_col(x%64);
for(i=0;i<width;i++)
{
wait_ready_left();
write_data_left(*p);
p++;
}
set_page(y/8+1);//显示位图的下半部
set_col(x%64);
for(i=0;i<width;i++)
{
wait_ready_left();
write_data_left(*p);
p++;
}
break;
case 1: //中间屏显示
set_page(y/8); //显示位图的上半部
set_col(x%64);
for(i=0;i<width;i++)
{
wait_ready_middle();
write_data_middle(*p);
p++;
}
set_page(y/8+1);//显示位图的下半部
set_col(x%64);
for(i=0;i<width;i++)
{
wait_ready_middle();
write_data_middle(*p);
p++;
}
break;
default: //右侧屏显示
set_page(y/8); //显示位图的上半部
set_col(x%64);
for(i=0;i<width;i++)
{
wait_ready_right();
write_data_right(*p);
p++;
}
set_page(y/8+1);//显示位图的下半部
set_col(x%64);
for(i=0;i<width;i++)
{
wait_ready_right();
write_data_right(*p);
p++;
}
}
return;
}*/
void disp_bmp(unsigned char x,unsigned char y,unsigned char width,unsigned char *bmp)
{
unsigned char i,k,*p;
k=x;
p=bmp;
set_line(0);
for(i=0;i<width;i++) //显示位图的上半部
{
switch(k/64)
{
case 0: //左侧屏显示
set_page(y/8);
set_col(k%64);
wait_ready_left();
write_data_left(*p);
k++;
p++;
break;
case 1: //中间屏显示
set_page(y/8);
set_col(k%64);
wait_ready_middle();
write_data_middle(*p);
k++;
p++;
break;
default: //右侧屏显示
set_page(y/8);
set_col(k%64);
wait_ready_right();
write_data_right(*p);
k++;
p++;
}
}
k=x;
for(i=0;i<width;i++) //显示位图的下半部
{
switch(k/64)
{
case 0: //左侧屏显示
set_page(y/8+1);
set_col(k%64);
wait_ready_left();
write_data_left(*p);
k++;
p++;
break;
case 1: //中间屏显示
set_page(y/8+1);
set_col(k%64);
wait_ready_middle();
write_data_middle(*p);
k++;
p++;
break;
default: //右侧屏显示
set_page(y/8+1);
set_col(k%64);
wait_ready_right();
write_data_right(*p);
k++;
p++;
}
}
}
/*****************************************************************
*函数:disp_one_chinese()
*功能:在指定位置显示一个汉字字符
*形式参数:x-字符横坐标;y-字符纵坐标;chinese-汉字代码指针;
*返回值:无
******************************************************************/
void disp_one_chinese(unsigned char x,unsigned char y,unsigned char *chinese)
{
disp_bmp(x,y,16,chinese);
return;
}
/*****************************************************************
*函数:disp_one_number()
*功能:在指定位置显示一个数字字符
*形式参数:x-字符横坐标;y-字符纵坐标;number-数字代码指针;
*返回值:无
******************************************************************/
void disp_one_number(unsigned char x,unsigned char y,unsigned char *number)
{
disp_bmp(x,y,8,number);
return;
}
/*****************************************************************
*函数:disp_multi_chinese()
*功能:显示多个汉字
*形式参数:x-字符串启始横坐标;y-字符串启始纵坐标;str-汉字信息指针;
*返回值:无
******************************************************************/
void disp_multi_chinese(unsigned char x,unsigned char y,unsigned char *str)
{
unsigned char i,*p;
i=x;
p=str;
while(1)
{
if(*p==-1)break;
disp_one_chinese(i,y,chinese_table+(*p)*32);
p++;
i+=16;
}
return;
}
/*****************************************************************
*函数:disp_multi_number()
*功能:显示多位数字信息
*形式参数:x-数字串启始横坐标;y-数字串启始纵坐标;n-数字串位数;number-数字值;
*返回值:无
******************************************************************/
void disp_multi_number(unsigned char x,unsigned char y,unsigned char n,unsigned int number)
{
unsigned char a[3],i,k;
unsigned int j;
i=x;
j=number;
a[2]=j/100;j=j%100;
a[1]=j/10;
a[0]=j%10;
for(k=n;k>0;k--)
{
disp_one_number(i,y,number_table+a[k-1]*16);
i+=8;
}
return;
}
/*****************************************************************
*函数:disp_one_scr_chinese()
*功能:显示一屏汉字信息
*形式参数:scr-界面代码;
*返回值:无
******************************************************************/
void disp_one_scr_chinese(unsigned char scr)
{
;
}
//////////////////////////////////////
extern void aaa(void)
{
disp_multi_number(63,16,3,73);
disp_multi_number(123,16,3,124);
disp_multi_number(1,0,3,568);
disp_multi_number(123,0,2,9);
//disp_one_chinese(33,16,chinese_table+32*1);
//disp_one_chinese(17,32,chinese_table+32*2);
//disp_one_chinese(3,48,chinese_table+32*3);
//disp_one_chinese(121,0,chinese_table);
//disp_one_chinese(133,16,chinese_table+32*1);
//disp_one_chinese(171,32,chinese_table+32*2);
//disp_one_chinese(123,48,chinese_table+32*3);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -