📄 lcd_it.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 + -