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

📄 t6963c.c

📁 LCM(MGLS-12864TA)显示程序
💻 C
📖 第 1 页 / 共 2 页
字号:
// T6963c.c
//
// #define _T6963C_C

#include "includes.h"
#include "avr/pgmspace.h"  // 使用flash程序区


/************************************************************************************/
/* 函数名称:fnGetRow													   	        */
/* 输入参数:void                               									*/
/* 输出参数:uchar gCurRow  当前行								
/************************************************************************************/
uchar fnGetRow(void)
{
	return gCurRow;
}

/************************************************************************************/
/* 函数名称:fnGetCol 													        	*/


/************************************************************************************/
uchar fnGetCol(void)
{
	return gCurCol;
}

/************************************************************************************/
/* 函数名称:fnST 													   	            */
/* 输入参数:void                               									*/

/************************************************************************************/
uchar fnST(void)
{
    uchar ucState;

 
    DDRA =  0x00;  // 数据方向为输入
	PORTA = 0xFF;  // 使能内部上拉电阻

	DDRB =  0x0F;  // 数据方向为输出
    PORTB = 0xFF;  // 高4位使能内部上拉电阻,低4位输出高电平

//    lcd_delay(10);

    PORTB |= (1 << CD);   // CD (PB2) 赋值1,命令
	PORTB &= ~(1 << RD);  // RD (PB1) 赋值0,读操作有效
//    lcd_delay(10);
    ucState = PINA;
	PORTB |= (1 << RD);    // RD (PB1) 赋值1,读操作无效
	return ucState;		    
}

/************************************************************************************/
/* 函数名称:fnST01 													   	        */
/* 输入参数:void                               									*/
/* 输出参数:uchar i																*/
/*           输出 0,说明错误									
/************************************************************************************/
uchar fnST01(void)		
{
	uchar i;

	for(i=10;i>0;i--)
	{
		if((fnST() & 0x03) == 0x03)
		break;
	}
	
	return i;
}

/************************************************************************************/
/* 函数名称:fnST2 													   	            */
/* 输入参数:void                               									*/
/* 输出参数:uchar	i																*/
/*           输出 0,说明错误									
/************************************************************************************/
uchar fnST2(void)		
{
	uchar i;

	for(i=10;i>0;i--)
	{
		if((fnST() & 0x04) == 0x04)
			break;
	}
	return i;	
}
/************************************************************************************/
/* 函数名称:fnST3 													   	            */
/* 输入参数:void                               									*/
/* 输出参数:uchar	i																*/
/*           输出 0,说明错误									
/************************************************************************************/
uchar fnST3(void)		
{
	uchar i; 
	                
	for(i=10;i>0;i--)
	{
		if((fnST() & 0x08) == 0x08)
			break;
	}
	return i;	
}

/************************************************************************************/
/* 函数名称:fnST6 													   	            */
/* 输入参数:void                               									*/
/* 输出参数:uchar  i																*/

/************************************************************************************/
uchar fnST6(void)	
{
	uchar i;

	for(i=10;i>0;i--)
	{
		if((fnST() & 0x40) == 0x40)
			break;
	}
	return i;
}

/************************************************************************************/
/* 函数名称:fnCW2P 												   	            */
/* 输入参数:uchar uCmd,uchar uPar1,uchar uPar2     								*/
/*           uCmd      命令         									    		*/
/*           uPar1     地址低8位             										*/
/*           uPar2     地址高8位         										    */
/* 输出参数:uchar																	*/
/*           输出 0,  说明成功														*/
/*           输出 1,2 说明错误                                   				
/************************************************************************************/
uchar fnCW2P(uchar uCmd,uchar uPar1,uchar uPar2)	
{
    DDRA =  0xFF;  // 数据方向为输出
//    PORTA = 0xFF;  // 使能内部上拉电阻

    DDRB =  0x0F;  // 数据方向为输出

	if(fnST01() == 0)
		return 1;

	PORTB &= ~(1 << CD) ;   // CD (PB2) 赋值0,低电平表示数据
 
//	lcd_delay(1);
	PORTA = uPar1;          // 赋值
 
//	lcd_delay(1);
    PORTB &= ~(1 << WR);    // WR (PB0) 赋值0,低电平写操作有效
 
//	lcd_delay(1);
    PORTB |= (1 << WR);       // WR (PB0) 赋值1,高电平写操作无效
  	
//    lcd_delay(1);
	if(fnST01() == 0)
		return 2;

	PORTB &= ~(1 << CD) ;   // CD (PB2) 赋值0,低电平表示数据
  
//	lcd_delay(1);
	PORTA =  uPar2;   		// 赋值
 
//	lcd_delay(1);
    PORTB &= ~(1 << WR);    // WR (PB0) 赋值0,低电平写操作有效
 
//	lcd_delay(1);
    PORTB |= (1 << WR);       // WR (PB0) 赋值1,高电平写操作无效
 
//	lcd_delay(1);

	if(fnST01() == 0)
		return 3;

	PORTB |= (1 << CD) ;    // CD (PB2) 赋值1,高电平表示命令
//	lcd_delay(1);
	PORTA = uCmd;           // 赋值
//	lcd_delay(1);
	PORTB &= ~(1 << WR);    // WR (PB0) 赋值0,低电平写操作有效
 
//	lcd_delay(1);
    PORTB |= (1 << WR);       // WR (PB0) 赋值1,高电平写操作无效
	return 0;	
}

/************************************************************************************/
/* 函数名称:fnCW1P  		 													   	*/
/* 输入参数:uchar uCmd    命令														*/
/*           uchar uPar1   数值                             	   				    */
/* 输出参数:输出 0,  说明成功														*/

/************************************************************************************/
uchar fnCW1P(uchar uCmd,uchar uPar1)	 
{
    DDRA =  0xFF;  // 数据方向为输出
    PORTA = 0xFF;  // 使能内部上拉电阻

    DDRB =  0x0F;  // 数据方向为输出

	if(fnST01() == 0)
		return 1;

    PORTB &= ~(1 << CD) ;   // CD (PB2) 赋值0,低电平表示数据
	PORTA = uPar1; 			// 赋值
//	lcd_delay(1);
    PORTB &= ~(1 << WR);    // WR (PB0) 赋值0,低电平写操作有效
 
//	lcd_delay(1);
    PORTB |= (1 << WR);       // WR (PB0) 赋值1,高电平写操作无效
 

	if(fnST01() == 0)
		return 2;

    PORTB |= (1 << CD) ;    // CD (PB2) 赋值1,高电平表示命令
	PORTA = uCmd;
//	lcd_delay(1);
	PORTB &= ~(1 << WR);    // WR (PB0) 赋值0,低电平写操作有效
 
//	lcd_delay(1);
    PORTB |= (1 << WR);       // WR (PB0) 赋值1,高电平写操作无效
	return 0;	// 返回0成功
}

/************************************************************************************/
/* 函数名称:fnCW0P 													        	*/
/* 输入参数:uchar uCmd  命令                          								*/
/* 输出参数:uchar																	*/
/*           0  正确                                                                */
/*           1  错误                                                                */

/************************************************************************************/
uchar fnCW0P(uchar uCmd)		
{
    DDRA =  0xFF;  // 数据方向为输出
//    PORTA = 0xFF;  // 使能内部上拉电阻

    DDRB =  0x0F;  // 数据方向为输出

	if(fnST01() == 0)
		return 1;
	PORTB |= (1 << CD) ;    // CD (PB2) 赋值1,高电平表示命令
	PORTA = uCmd;
//	lcd_delay(1);
	PORTB &= ~(1 << WR);    // WR (PB0) 赋值0,低电平写操作有效
//	_NOP();
//	lcd_delay(1);
    PORTB |= (1 << WR);       // WR (PB0) 赋值1,高电平写操作无效
	return 0;	// 返回0成功
}

/************************************************************************************/
/* 函数名称:fnDWD 													   	            */
/* 输入参数:uchar uData 数据                               						*/
/* 输出参数:uchar 0 成功 ,否则 错误												*/

/************************************************************************************/
uchar fnDWD(uchar uData)		 
{
    DDRA =  0xFF;  // 数据方向为输出
//   PORTA = 0xFF;  // 使能内部上拉电阻

    DDRB =  0x0F;  // 数据方向为输出

	if(fnST3() == 0)
		return 1;
	PORTB &= ~(1 << CD) ;   // CD (PB2) 赋值0,低电平表示数据
//	_NOP();
//	lcd_delay(1);
	PORTA = uData;

⌨️ 快捷键说明

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