/*******************************************************
功能:1602液晶测试
*******************************************************/
#include<aduc7026.h>
/****管脚定义*******
并行控制
RS P2.6 寄存器选择 H Data L Com
RW P1.0 读写选择 H Read L Write
E P1.1 使能信号
LCDBK P0.4 背光
D0-D7 P3.0-P3.7
*******************/
/***** 管脚操作定义****/
#define SETRS GP2SET = 0x00400000
#define CLRRS GP2CLR = 0x00400000
#define SETRW GP1SET = 0x00010000
#define CLRRW GP1CLR = 0x00010000
#define SETE GP1SET = 0x00020000
#define CLRE GP1CLR = 0x00020000
/******************************************************************/
/* 函数声明 */
/******************************************************************//***************************************************************/
void SysClkInit(unsigned char clk)
{
PLLKEY1=0xAA;
PLLCON="0x01"; // PLL配置
PLLKEY2=0x55;
POWKEY1=0x01;
POWCON="clk"; // CPU时钟配置为41.78MHz
POWKEY2=0xF4;
}
/******************************************************************/
void DelayUs(unsigned char us)//delay us
{
unsigned char uscnt;
uscnt=us>>1;
while(--uscnt);
}
/******************************************************************/
void DelayMs(unsigned char ms)//delay Ms
{
while(--ms)
{
DelayUs(250);
DelayUs(250);
DelayUs(250);
DelayUs(250);
}
}
/******************************************************************/
void WriteCommand(unsigned char data1)
{
unsigned long int data;
data = data1;
data = data<<16;
data |= 0xFF000000;
DelayMs(5);
SETE; // E="0";
CLRRS; // RS="0";
CLRRW; // RW="0";
__asm // 嵌入汇编语言延时
NOP
SETE; // E="1";
GP3DAT = data;
CLRE; // E="0";
}
/****************************************************************/
void WriteData(unsigned char data1)
{
unsigned long int data;
data = data1;
data = data<<16;
data |= 0xFF000000;
DelayMs(5);
SETE; // E="0";
SETRS; // RS="1";
CLRRW; // RW="0";
__asm // 嵌入汇编语言延时
NOP
SETE; // E="1";
GP3DAT = data; // Data="c";
CLRE; // E="0";
CLRRS; // RS="0";
}
/***************************************************************
函数说明:
row : 行,line : 列,*ptr : 数组指针,num :字符个数
***************************************************************/
void ShowString (unsigned char row,unsigned char line,char *ptr,int num)
{
unsigned char add,i;
switch(row)
{
case 1: add="0x00";break;
case 2: add="0xC0";break;
default :add=0x00;break;
}
WriteCommand (add+line-1);//写命令
DelayUs(5);
for(i=0;i<num;i++)
{
WriteData (*(ptr+i));
DelayUs(5);
}
}
/*********************************************************************/
void InitLcd()
{
GP0DAT = 0x10000000; // 开背光
DelayMs(15);
WriteCommand(0x38); //设定显示模式
WriteCommand(0x38); //设定显示模式
WriteCommand(0x38); //设定显示模式
WriteCommand(0x06); //显示光标移动位置
WriteCommand(0x0c); //显示开及光标设置
WriteCommand(0x01); //显示清屏
}
/******************************************************************/
void main(void)
{
const unsigned char Test1[]={" ADuC7026test "};
const unsigned char Test2[]={"LCD1602 Test ok!"};
SysClkInit(2);
GP1DAT |= 0x03000000; // 配置P1.0和P1.1为输出
GP2DAT |= 0x40000000; // 配置P2.6为输出
InitLcd();
DelayMs(15);
ShowString(1,1,Test1,16);
ShowString(2,1,Test2,16);
while(1);
}
文章评论(0条评论)
登录后参与讨论