📄 lm4229.h
字号:
/*********************************************************************/
// ============================================================= */
// */
// LM4229(240138)屏电子书阅览器 V1.0 */
// */
// 湘潭大学信息工程学院 */
// 06级自动化 */
// 瑜人码头 */
/*********************************************************************/
//----------------------------------------
// 本页程序参考仿真社区(www.proteus.com.cn)网友
// 的LCD240*128显示程序,在此表示感谢!
// 同时自己也加了相当的函数
//=========================================
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
uchar Set_flag,State_Set,Etr_flag,Auto_flag,nextpage_set_flag,uppage_set_flag,nextline_set_flag,upline_set_flag,auto_set_flag;
//用到的一些全局变量
//按键定义
sbit KEY_SET=P1^5;
sbit KEY_ENT=P1^6;
sbit KEY_AUTO=P1^7;
#include <encode.h>
#include <cncode.h>
#include <picture.h>
#define DATA_PORT P2 //定义数据端口
//===========================================
// 管脚定义
//===========================================
/*
sbit HALT=P1^3; //暂不清楚
sbit FS1=P1^3; //字体模式选择
sbit MD2=P1^3; //方式选择
sbit RST=P1^3; //复位
*/
/////////////////////////////////////////////////
/////////////////////////////////////////////////
sbit CD=P3^0; //数据(L)/命令(H)选择
sbit READ=P3^4; //读,低电平有效
sbit WRIT=P3^5; //写,低电平有效
sbit CE=P3^1; //使能,低电平有效
//=============================================
//===========================================
// *************函数声明********************
//===========================================
void delay_lcd(uchar);
void write_data(uchar);
void write_com(uchar);
void clr_lcd(uchar,uchar,uint);
//============================================
// 延时函数
//============================================
void delay_lcd(uchar t)
{
for(;t!=0; t--);
}
void delayus(unsigned int us)
{
while(us--);
}
void delayms(unsigned ms)
{
unsigned int i,j;
for (i=0;i<ms;i++)
{
for (j=0;j<1000;j++)
;
}
}
//============================================
// 写数据函数
//============================================
void write_data(uchar dat)
{
CD=0; //数据
CE=0; //LCD使能
WRIT=0; //写
DATA_PORT=dat; //把数据送到P口
delay_lcd(1); //当晶振较高时加延时
WRIT=1; //关写
CE=1; //关使能
}
//============================================
// 写命令函数
//=============================================
void write_com(uchar com)
{
CD=1; //命令
CE=0;
WRIT=0;
DATA_PORT=com;
delay_lcd(1); //当晶振较高时加延时
WRIT=1;
CE=1;
}
//==============================================
// 指定位置、长度清屏
//=============================================
void clr_lcd(uchar x,uchar y,uint length)
{
uint i,place;
place=x*30+y;
write_data(place&0xff);
write_data(place/256);
write_com(0x24); //设置
for(i=0;i<length;i++)
write_data(0xff); //写入空格,清屏
write_com(0xb2); //关闭自动写
}
//===============================================
//===============================================
// 读数据
//
//
//===============================================
uchar LCD_ReadData(void)
{
uchar dat;
CD=0;CE=0;
dat=DATA_PORT;
CE=1;
return dat;
}
//=================================================
// LM4229初始化函数
//=================================================
void lcd_init()
{
/*
FS1 = 0;//fs1管脚高电平时表示字体为8*6; //低电平时为8*8
MD2 = 0;
HALT = 0;
*/
write_data(0);
write_data(0); //图形首地址
write_com(0x42); //图形首地址设置
write_data(30);
write_data(0);
write_com(0x43); //图形区域设置
write_com(0x80); //设置为OR模式
write_com(0x9a); //关闭文本显示,开图形显示
}
//===============================================
//==============================================
/////////////////////////////////////////////////
//===============================================
//清屏函数*///////////////////////
void clear_lcd()
{
uint place;
uchar i,j;
place=0;
for(i=0;i<128;i++) //b行数据
{
write_data(place&0xff); //写地址低8位
write_data(place/256); //写地址高8位
write_com(0x24); //设置地址
write_com(0xb0); //设置数据自动写
for(j=0;j<30;j++) //a/8列数据
{write_data(0x00);}
write_com(0xb2); //自动复位
place=place+30; //换行
}
}
//================================================================
//=================================================================
// LM4229系列作图函数
//================================================================
//==================================================================
// 画点函数
// x:0-127,y:0-239,flag:0-显示,1:擦除
//=================================================================
unsigned char code Tab[]={0x80,0x40,0x20,0x10,0x08,0x08,0x04,0x01};
void write_dot(uchar x,uchar y,uchar flag)
{
uint place;
uchar dat,i;
i=y/8;
place=30*x+i;
write_data(place&0xff); //写地址低8位
write_data(place/256); //写地址高8位
write_com(0x24); //设置地址
write_com(0xc5); //设置读取数据地址不变
dat=LCD_ReadData();
write_com(0xb0); //设置数据自动写
if(flag)
dat=dat|Tab[y%8];
else
dat=dat&(~(Tab[y%8]));
write_data(dat);
write_com(0xb2); //自动复位
place=place+30; //换行
}
//===========================================
// LM4229在指定位置显示a*b图片
// a为图片长,b为图片宽(a为8的倍数)
//===========================================-
void write_image(uchar x,uchar y,uchar a,uchar b,uchar *tab_image)
{
uint place;
uchar i,j;
place=x*30+y;
for(i=0;i<b;i++) //b行数据
{
write_data(place&0xff); //写地址低8位
write_data(place/256); //写地址高8位
write_com(0x24); //设置地址
write_com(0xb0); //设置数据自动写
for(j=0;j<a/8;j++) //a/8列数据
{write_data(tab_image[(a/8)*i+j]);}
write_com(0xb2); //自动复位
place=place+30; //换行
}
}
//==============================================
//================================================
// LM4229在制定位置显示一条线
// A(x1,y1) B(x2,y2)
// flag:0-擦除 1-显示
//================================================
void write_line(uchar x1,uchar y1,uchar x2,uchar y2,uchar flag)
{
unsigned char i;
unsigned char temp;
float k;
if(x1==x2)
{
if(y1>y2)
{ temp=x1;x1=x2;x2=temp;
temp=y1;y1=y2;y2=temp;
}
for(i=y1;i<=y2;i++)
{
write_dot(x1,i,flag);
}
}else
{
if(x1>x2)
{
temp=x1;x1=x2;x2=temp;
temp=y1;y1=y2;y2=temp;
}
k=(float)(y2-y1)/(float)(x2-x1);
for(i=0;i<x2-x1;i++)
{
write_dot(x1+i,(unsigned char)(y1+k*i),flag);
}
}
}
//============================================================
//===========================================================
// LM4229在指定位置画矩形
// 顶点(x1,y1)(x1,y2)(x2,y1)(x2,y2)
// flag:0-擦除 1-显示
//=============================================================
void write_rect(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2,bit flag)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -