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

📄 ra8835.#2

📁 C8051F020+RA8835 I/O口控制 中英文混合显示
💻 #2
📖 第 1 页 / 共 2 页
字号:
#include <ra8835.h>
#include <wordlib.h>
//#include "variable.h"
//LCD初始化时 命令SystemSet 后的8个参数
Uchar code ParaSysTable8[]= { 
        0x30,0x87,0x07,0x27,0x42,0xf0,0x28,0x00                  
        }; 
//LCD初始化时 命令Scroll 后的10个参数
Uchar code ParaScrTableA[]= { 
        0x00,BasePart1,0xF0,0x00,BasePart2,0xF0,0x00,BasePart3,0x00,BasePart4 
};

Uchar  test_read;  
            
extern void Delay( Uint tt );
extern xdata unsigned char byte_sel,position_sel,yuyan_sel;
/*===================================== 
** 函数名称: WriteCommand
** 功能描述: 写指令到LCD模块MISSING DEVICE
** 输入参数: 待写入的数据值  类型 Uchar
**
** 输出参数: 无
**
** 全局变量: 无
** 调用模块:  
**---------------------------------------
** 作  者:	wjf
** 日  期:	2008/07/30
** 注:具体操作时序图参考液晶显示模块使用手册第9页
======================================*/ 
void WriteCommand( Uchar CommandByte ) { 

    lcd_CS = 0;
    lcd_A0 = 1;
    lcd_WR = 0;
    lcd_RD = 1;
	  lcd_CMD = CommandByte;
    Delay(2);
    lcd_WR = 1;
    lcd_CS = 1;
} 

/*===================================== 
** 函数名称: WriteData
** 功能描述: 写数据到LCD模块显示内存
** 输入参数: 待写入的数据值  类型 Uchar
**
** 输出参数: 无
**
** 全局变量: 无
** 调用模块:  
**---------------------------------------
** 作  者:	wjf
** 日  期:	2008/07/30
** 注:具体操作时序图参考液晶显示模块使用手册第9页
======================================*/ 
void WriteData( Uchar dataW ) { 

    lcd_CS = 0;
		lcd_A0 = 0;
    lcd_WR = 0;
    lcd_RD = 1;
    lcd_DATA = dataW;
    Delay(2);
    lcd_WR = 1;
    lcd_CS = 1;
    lcd_A0 = 1;
} 
/*===================================== 
** 函数名称: ReadData
** 功能描述: 读数据从LCD模块显示内存
** 输入参数: 无
**
** 输出参数: 无
**
** 全局变量: 无
** 调用模块:  测试函数 LcmTest
**---------------------------------------
** 作  者:	wjf
** 日  期:	2008/08/04
** 注:具体操作时序图参考液晶显示模块使用手册第9页
======================================*/ 
unsigned char ReadData(void)
{
    char address_data;
    lcd_CS = 0;
    lcd_A0 = 1;
    Delay(1);
    lcd_WR = 1;
    lcd_RD = 0; 
    Delay(5);
    address_data = lcd_DATA;
    lcd_RD = 1;
    lcd_CS = 1;
    lcd_A0 = 1;
    return(address_data);
}


/*====================================================== 
** 函数名称: LcmInition
** 功能描述: 初始化RA8835   具体初始化内容参看程序行注释
** 输入参数: 无
**
** 输出参数: 无
**
** 全局变量: ParaSysTable8[]   ParaScrTableA[]
** 调用模块:  main.c中main()
**------------------------------------------------------
** 作  者:	wjf
** 日  期:	2008/07/31
=======================================================*/ 
void LcmInition( void ) { 

		Uchar i; 
    WriteCommand( SystemSet );          		// 系统参数设置 
    for (i=0;i<8;i++) {                 
        WriteData( ParaSysTable8[i] );    		
    } 
    WriteCommand( Scroll );             		//设定显示区域起始地址 
    for (i=0;i<10;i++) { 
        WriteData( ParaScrTableA[i] ); 
    } 
    WriteCommand( HdotScr );        				// 写入点位移指令代码 
    WriteData( 0x00 );                    	// 写入P1参数 
    WriteCommand( Ovlay );            			// 显示合成方式设置 
    WriteData( 0x04 );                 		 // 0000 0100 显示一区图形,三区文本属性,二重"或"合成 
    
    WriteCommand( 0x4c );   								//设置光标移动的方向为 光标向右移动   地址:CSR+1→CSR
    
    WriteCommand( DispOn );            		// 显示状态设置 
    WriteData( 0x54 );                		// 显示 1~4 区开显示,光标关显示 
	
}
/*============================================================================ 
** 函数名称: LcmRest
** 功能描述: 复位LCD——RA8835
** 输入参数: 无
**
** 输出参数: 无
**
** 全局变量: 无
** 调用模块:  
**---------------------------------------------------------------------------
** 作  者:	wjf
** 日  期:	2008/08/06
 ============================================================================*/ 

void LcmRest( void ) { 
	 lcd_RES=0;
	 Delay(1000);
	 lcd_RES=1;
} 

/*============================================================================ 
** 函数名称: LcmClear
** 功能描述: LCD清屏函数   清除32K的显示内存
** 输入参数: 无
**
** 输出参数: 无
**
** 全局变量: 无
** 调用模块:  
**---------------------------------------------------------------------------
** 作  者:	wjf
** 日  期:	2008/08/01
 ============================================================================*/ 

void LcmClear( void ) { 

	Uint i1=32768; 

	WriteCommand( CsrDirR );             // 光标移动方向定义:自动右移 
	WriteCommand( CsrW );                // 光标Locate,定位 
	WriteData( 0 );                        // 写入参数CSRL设置参数光标指针低8位 
	WriteData( 0 );                        // 写入参数CSRH设置参数光标指针高8位 
	WriteCommand( mWrite );                // 数据写入指令,代码0x42 
	while(i1--)    { 
		WriteData( 0x00 );    // 写入数据0 
	} 
} 
/*====================================================== 
** 函数名称: LcmTest
** 功能描述: 测试LCD  Display Memory 的写读
** 输入参数: 无
**
** 输出参数: 无
**
** 全局变量: 
** 调用模块:  
**------------------------------------------------------
** 作  者:	wjf
** 日  期:	2008/08/04
=======================================================*/ 
void LcmTest( void ) { 
	
	WriteCommand( 0x46 );     //设置光标地址           
	WriteData( 0 );                       
	WriteData( 0 );        
	WriteCommand( mWrite );   // 显示数据写入指令,代码0x42 
	WriteData( 0x55 ); 
		
	WriteCommand( 0x46 );     //设置光标地址           
	WriteData( 0 );                       
	WriteData( 0 );        
	WriteCommand( mRead );    //显示数据读出指令,代码0x43
	test_read=ReadData();
} 

/*============================================================================ 
** 函数名称: Locatexy
** 功能描述: LCD的光标定位
** 输入参数: Uchar x 	水平方向字节单位坐标,即可以以半个汉字宽度设定水平坐标
						 Uchar y	垂直方向以行线定位的坐标,可以定位到点单位
						 注:屏左上角为(0,0)
**
** 输出参数: 无
**
** 全局变量: 无
** 调用模块:  
**---------------------------------------------------------------------------
** 作  者:	wjf
** 日  期:	2008/08/01
 ============================================================================*/ 
void Locatexy(Uchar x,Uchar y, Uchar attribs) { 
	Uint temp; 
	temp = (Uint)y*paraP9+x; 
	if(attribs) temp += BasePart2*256;    // 如果需要就指向第二区,加上第二区首地址 
	WriteCommand( CsrW );                // 光标Locate,定位 
	WriteData( (Uchar)(temp &0xff) );    // 写入参数CSRL设置参数光标指针低8位 
	WriteData( (Uchar)(temp /256 ) );    // 写入参数CSRH设置参数光标指针高8位 
} 



/*============================================================================ 
** 函数名称: dprintf
** 功能描述: ASCII(8*16) 及 汉字(16*16) 混合字符串显示
** 输入参数: Uchar x  显示字符串的横坐标  8点一字节位置
             Uchar y  显示字符串的纵坐标  一条扫描线定位 
**
** 输出参数: Uchar 字符串的长度(汉字为两个字节)
**
** 全局变量: 无
** 调用模块:  

   说明:调用时汉字必须在字库数组中已经存在,否则将输出不正确的结果
**---------------------------------------------------------------------------
** 作  者:	wjf
** 日  期:	2008/08/01
 ============================================================================*/ 
 
Uchar dprintf(Uchar x,Uchar y, char code *ptr, Uchar att) 
{ 

	Uchar  c1,c2; 
	Uchar i,j,uLen,uRow,uCol,temp; 
	Uint  k; 
	uRow = x; 
	uCol = y; 
	uLen=0; 
	WriteCommand( CsrDirD );                         								// 光标移动方向定义:自动下移 
	Locatexy(uRow,uCol,att);                        								//起点定位 
	while ( (Uchar)ptr[uLen] >= 0x10 ){uLen++;};    								//探测字串长度 
	i=0; 
	while(i<uLen) 
	{ 
		c1 = ptr[i]; 
		c2 = ptr[i+1]; 

//ascii字符与汉字内码的区别在于128做分界,大于界线的为汉字码 
		if(c1 <=128)                                									// ASCII 
		{ 
			if (c1 >= 0x10)    { 
				WriteCommand( mWrite );                										// 写数据(命令) 
				for(j=0;j<16;j++) WriteData( ASC_MSK[(c1-0x20)*16 +j ]); 
			} 
			uRow++;                                    									// 列数加1 
		} 
		else                                        									// 中文 
		{ 
			for(j=0;j<sizeof(Cdotlib)/sizeof(Cdotlib[0]);j++)    				// 查找定位 
			{ 
				if((c1 == Cdotlib[j].Index[0]) && (c2 == Cdotlib[j].Index[1])) 
					break; 
			} 
			for(k=0;k<2;k++)                       											 // 分16行输出 
			{ 
				Locatexy(uRow+k,uCol,att); 
				WriteCommand( mWrite );                										// 写数据(命令) 

				for(temp=0;temp<16;temp++) WriteData( Cdotlib[j].Msk[temp*2 + k]); 
			} 
			uRow +=2;                                									// 光标右移一大格 
			i++; 
		} 
		if(uRow >= 40)                                					// 光标后移 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -