📄 lm19264.h
字号:
/********************************工程文件说明*******************************/
/*FileName:lm19264.h */
/*Author:烛光 */
/*Version:v1.0 */
/*Data:2008年07月11日 */
/*Description:工程显示程序文件,负责把必要内容显示到液晶屏上。 */
/*Function List: */
/* 1.lcd_wait_free 验忙程序,查询液晶是否忙。 */
/* 2.lcd_wr_com 写指令函数,发送液晶指令 */
/* 3.lcd_wr_data 写数据函数,发送液晶数据 */
/* 4.…… */
/*History: */
/* 3.烛光 2008.09.13 v1.0 初步完成设计 */
/* 2.烛光 2008.09.13 v1.0 初步完成设计 */
/* 1.烛光 2008.07.11 v0.0 开始设计 */
/*Copyright (c) 2008 烛光 All Rights Reserved */
/***************************************************************************/
#ifndef __lm19264_H__
#define __lm19264_H__
/***********************************硬件接口说明****************************/
/*
1、DB7--P0^7 5、DB3--P0^3 9、 EN--P2^5 13、VDD--VDD 17、VOUT--RP3
2、DB6--P0^6 6、DB2--P0^2 10、RW--P2^4 14、VSS--GND 18、RSTB--P2^0
3、DB5--P0^5 7、DB1--P0^1 11、RS--P2^3 15、CSA--P2^1 19、BLA--VDD
4、DB4--P0^4 8、DB0--P0^0 12、VO--RP2 16、CSB--P2^2 20、BLK--GND
*/
/************************************符号定义*******************************/
#define lcd_data_port P0
#define lcd_ctrl_port P2
#define lcd_busy_mark 0x90
sbit lcd_EN=P2^5;
sbit lcd_RW=P2^4;
sbit lcd_RS=P2^3;
sbit lcd_CSA=P2^1;
sbit lcd_CSB=P2^2;
sbit lcd_RSTB=P2^0;
/************************************变量定义*******************************/
uchar startposition=0;//显示开始位置
uchar code lcode[];
uchar code ccode[];
uchar code str0[];
/*******************************函数声明************************************/
void lcd_prt_char(uchar position,uchar cnumber);
/******************************以下为程序***********************************/
//验忙函数
void lcd_wait_free(void)
{
lcd_data_port|=lcd_busy_mark;//设置lcd_busy口为输入
lcd_EN=0;//E=0,
lcd_RS=0;//RS=0
lcd_RW=1;//RW=1
//delay_nus(1);//使用时如果判忙不成功(一直忙)则保留此语句
lcd_EN=1;//E=1
_nop_();
while(lcd_data_port&lcd_busy_mark);//等待LCD_DB7为0
lcd_EN=0;//重设E=0
}
//写指令函数
void lcd_wr_com(uchar command,uchar wait_en)
{
if(wait_en)lcd_wait_free();//若wait_en为1,则要检测LCD忙信号,等待其空闲
lcd_EN=0;//E=0,下面给LCD一个高脉冲
lcd_RS=0;//RS=0
lcd_RW=0;//RW=0
lcd_data_port=command;
lcd_EN=1;//E=1
_nop_();_nop_();
lcd_EN=0;//下降沿,,数据送入液晶
_nop_();_nop_();
lcd_RS=0;//RS=0
lcd_RW=1;//RW=1
}
//写数据函数
void lcd_wr_data(uchar char_data)
{
lcd_wait_free();//等待LCD空闲
lcd_EN=0;//E=0,下面给LCD一个高脉冲
lcd_RS=1;//RS=1数据
lcd_RW=0;//RW=0写
lcd_data_port=char_data;
lcd_EN=1;//E=1
_nop_();_nop_();
lcd_EN=0;//下降沿,,数据送入液晶
_nop_();_nop_();
lcd_RS=0;//RS=0
lcd_RW=1;//RW=1
}
//选择屏
void lcd_set_scr(uchar scr)
{
lcd_CSA=0x01&scr;
scr>>=1;
lcd_CSB=0x01&scr;
}
//选择页
void lcd_set_page(uchar page)
{
page&=0x07;
page|=0xb8;
lcd_wr_com(page,1);
}
//选择列
void lcd_set_column(uchar column)
{
column&=0x3f;
column|=0x40;
lcd_wr_com(column,1);
}
//设置起始行
void lcd_set_line(uchar line)
{
uchar i;
for(i=0;i<3;i++)
{
lcd_set_scr(i);
line&=0x3f;
line|=0xc0;
lcd_wr_com(line,1);
}
}
//清屏,和TC一样吧?
void clrscr(uchar scr)
{
uchar i,j;
lcd_set_scr(scr);
for(i=0;i<8;i++)
{
lcd_set_page(i);
lcd_set_column(0);
for(j=0;j<64;j++)
{lcd_wr_data(0x00);}
}
}
//液晶初始化
void lcd_init(void)
{
//总复位
lcd_RSTB=0;
delay_nus(1);
lcd_RSTB=1;
//清屏开显示
clrscr(0);lcd_wr_com(0x3f,1);lcd_set_line(0);
clrscr(1);lcd_wr_com(0x3f,1);lcd_set_line(0);
clrscr(2);lcd_wr_com(0x3f,1);lcd_set_line(0);
}
//显示一个字符
void lcd_prt_letter(uchar position,uchar lnumber,uchar contra)
{
uchar scr,page,column,i;
uint lcodeaddress;
if(position>= 0&&position<= 7){scr=0;page=0;column=(position- 0)*8;}
if(position>=24&&position<=31){scr=0;page=2;column=(position-24)*8;}
if(position>=48&&position<=55){scr=0;page=4;column=(position-48)*8;}
if(position>=72&&position<=79){scr=0;page=6;column=(position-72)*8;}
if(position>= 8&&position<=15){scr=1;page=0;column=(position- 8)*8;}
if(position>=32&&position<=39){scr=1;page=2;column=(position-32)*8;}
if(position>=56&&position<=63){scr=1;page=4;column=(position-56)*8;}
if(position>=80&&position<=87){scr=1;page=6;column=(position-80)*8;}
if(position>=16&&position<=23){scr=2;page=0;column=(position-16)*8;}
if(position>=40&&position<=47){scr=2;page=2;column=(position-40)*8;}
if(position>=64&&position<=71){scr=2;page=4;column=(position-64)*8;}
if(position>=88&&position<=95){scr=2;page=6;column=(position-88)*8;}
if(lnumber>0x60&&lnumber<0x7b)lnumber-=0x20;//小写转化为大写
if(lnumber>0x29&&lnumber<0x30)lcodeaddress=lnumber*16;
else if(lnumber>0x40&&lnumber<0x5b)lcodeaddress=(lnumber-0x31)*16;
else lcodeaddress=lnumber*16;
lcd_set_scr(scr);
//上半部分
lcd_set_page(page);
lcd_set_column(column);
if(!contra)for(i=0;i<8;i++)lcd_wr_data(lcode[lcodeaddress+i]);//正常显示
else for(i=0;i<8;i++)lcd_wr_data(~(lcode[lcodeaddress+i]));//取反显示
//下半部分
lcd_set_page(page+1);
lcd_set_column(column);
if(!contra)for(i=8;i<16;i++)lcd_wr_data(lcode[lcodeaddress+i]);//正常显示
else for(i=8;i<16;i++)lcd_wr_data(~(lcode[lcodeaddress+i]));//取反显示
}
//显示字符串
/*lcd_prt_string(uchar position,uchar *str)
{
while(*str!='\0'){lcd_prt_letter(position++,*str++-0x30);}
}
*/
//显示汉字
void lcd_prt_char(uchar position,uchar cnumber)
{
uchar scr,page,column,i;
uint ccodeaddress;
if(position>= 0&&position<= 7){scr=0;page=0;column=(position- 0)*8;}
if(position>=24&&position<=31){scr=0;page=2;column=(position-24)*8;}
if(position>=48&&position<=55){scr=0;page=4;column=(position-48)*8;}
if(position>=72&&position<=79){scr=0;page=6;column=(position-72)*8;}
if(position>= 8&&position<=15){scr=1;page=0;column=(position- 8)*8;}
if(position>=32&&position<=39){scr=1;page=2;column=(position-32)*8;}
if(position>=56&&position<=63){scr=1;page=4;column=(position-56)*8;}
if(position>=80&&position<=87){scr=1;page=6;column=(position-80)*8;}
if(position>=16&&position<=23){scr=2;page=0;column=(position-16)*8;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -