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

📄 lcd_it.h

📁 str710系列的hdlc协议的通信
💻 H
字号:

#include "71x_lib.h"
#include "timers.h"


#define BIAS 0x52	
#define SYSEN 0x02
#define LCDON 0x06
#define LCDOFF 0x04
#define SYSDIS 0x00
#define TONEON 0x12
#define TONEOFF 0x80
#define TONE2K 0xC0
#define TONE4K 0x80

//   p0.3---cs
//   p0.4---data
//   p0.5---rd
//   p0.7---wr
#define CS_TO_1 GPIO0->PD |= 0x0008
#define CS_TO_0 GPIO0->PD &= 0xfff7
//#define RD_TO_1 GPIO0->PD |= 0x0020
//#define RD_TO_0 GPIO0->PD &= 0xffdf
#define WR_TO_1 GPIO0->PD |= 0x0080
#define WR_TO_0 GPIO0->PD &= 0xff7f
#define DAT_TO_1 GPIO0->PD |= 0x0010
#define DAT_TO_0 GPIO0->PD &= 0xffef

void delay1()
{
	__asm {NOP};
	__asm {NOP};
}

void SendBit_1621(u8 data, u8 cnt)		//data的高cnt位写入HT1621,高位在前
{
	u8 i;
	for(i =0; i <cnt; i ++)
	{
		if((data & 0x80)==0) DAT_TO_0;
		else DAT_TO_1;
		delay1();
		WR_TO_0;
		delay1();
		WR_TO_1;
		delay1();
		data<<=1;
	}
}

void SendDataBit_1621(u8 data,u8 cnt)	//data的低cnt位写入HT1621,低位在前
{
	u8 i;
	for(i =0; i <cnt; i ++)
	{
		if((data & 0x01)==0) DAT_TO_0;
		else DAT_TO_1;
		delay1();
		WR_TO_0;
		delay1();
		WR_TO_1;
		delay1();
		data>>=1;
	}
}


void SendCmd(u8 command)
{
	delay1();
	CS_TO_1;
	delay1();
	CS_TO_0;
	delay1();
	SendBit_1621(0x80,4);			//写入标志码"100"和9位command命令,由于
	SendBit_1621(command,8); 		//没有使有到更改时钟输出等命令,为了编程方便
	CS_TO_1;						//直接将command的最高位写"0"
	delay1();
}

void Write_1621(u8 addr,u8 data)
{
	delay1();
	CS_TO_1;
	delay1();
	CS_TO_0;
	delay1();
	SendBit_1621(0xa0,3);			//写入标志码"101"
	SendBit_1621(addr,6);			//写入addr的高6位
	SendDataBit_1621(data,4);		//写入data的低4位
	CS_TO_1;
	delay1();
}

void WriteAll_1621(u8 addr,u8 *p,u8 cnt)
{
	u8 i;
	delay1();
	CS_TO_1;
	delay1();
	CS_TO_0;
	SendBit_1621(0xa0,3);			//写入标志码"101"
	SendBit_1621(addr,6);			//写入addr的高6位
	for(i =0; i <cnt; i ++,p++)		//连续写入数据
	{
		SendDataBit_1621(*p,8);
	}
	CS_TO_1;
	delay1();
}

void Clear()
{
	u8 i;
	delay1();
	CS_TO_1;
	delay1();
	CS_TO_0;
	SendBit_1621(0xa0,3);
	SendBit_1621(0,6);
	for(i = 0; i < 16; i++)
	{
		SendDataBit_1621(0,8);
	}
	CS_TO_1;
	delay1();
}

void Bztest()
{
    unsigned i = 0;
	SendCmd(TONEON);
	for (i = 0; i < 0x100; i++)
	{
        SendCmd(TONE2K);
	}
	for (i = 0; i < 0x100; i++)
	{
	    SendCmd(TONE4K);
	}
    SendCmd(TONEOFF); 
}

void LCD_Test()
{
	u8 i = 0;
	u8 clear = 0;
	u8 a[10];
	a[0]=0x76;a[1]=0x5c;a[2]=0xce;a[3]=0xd6;a[4]=0x0a;
	//_pac=0;				//将端口设为输出
	GPIO_Config(GPIO0, 0x0098, GPIO_OUT_PP);//pin 3,4,7
	GPIO_WordWrite(GPIO0, GPIO_WordRead(GPIO0) & ~0x0098);


	SendCmd(SYSDIS);
	delay1();
	delay1();
	SendCmd(BIAS);		//设置偏压和占空比
	delay1();
	delay1();
	SendCmd(0x30);
	delay1();
	//SendCmd(LCDOFF);
	//__asm {NOP};
	SendCmd(SYSEN);	//打开系统振荡器
	delay1();
	SendCmd(LCDON);	//打开LCD偏压发生器
	delay1();
	//SendCmd(0x30);
	delay1();
	//SendCmd(0x30);
	delay1();
    Clear();        //将LCD内存清零32*4
	WriteAll_1621(0x44,a,8);  //显示1 2 3 4 5
	Bztest();   
	//0x24:(地址)的高6位有效,0x01:(数据)的低4位有效
	//WriteAll_1621(0,a,5);	//0:(起始地址)高6位有效,a:(写入数据的起始地址)8位
	//都有效,6:为写入的字节数。连续写入"123456789a"
	//SendCmd(LCDOFF);	//关闭LCD显示
}

⌨️ 快捷键说明

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