📄 t6963c.c
字号:
// 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 + -