⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lm4229.h

📁 LM4229电子书阅读器
💻 H
📖 第 1 页 / 共 2 页
字号:
/*********************************************************************/
//	=============================================================	  */
//								                                      */
//				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 + -