📄 ht1621
字号:
#include <ht48r05a-1.h>
#define uchar unsigned char
#define BIAS 0x24
#define SYSEN 0x01
#define LCDOFF 0x02
#define LCDON 0x03
#define cs _pa0
#define wr _pa2
#define dat _pa3
void SendBit_1621(uchar data,uchar cnt) //data 的高 cnt 位写入 HT1621,高位在前
{
uchar i;
for(i =0; i <cnt; i ++)
{
if((data&0x80)==0) dat=0;
else dat=1;
wr=0;
_nop();
wr=1;
data<<=1;
}
}
void SendDataBit_1621(uchar data,uchar cnt) //data 的低 cnt 位写入 HT1621,低位在前
{
uchar i;
for(i =0; i <cnt; i ++)
{
if((data&0x01)==0) dat=0;
else dat=1;
wr=0;
_nop();
wr=1;
data>>=1;
}
}
void SendCmd(uchar command)
{
cs=0;
SendBit_1621(0x80,3); //写入标志码"100"
SendBit_1621(command,9); //写入 9 位数据,其中前 8 位为 command 命令,最后 1 位任意
cs=1;
}
void Write_1621(uchar addr,uchar data)
{
cs=0;
SendBit_1621(0xa0,3); //写入标志码"101"
SendBit_1621(addr<<2,6); //写入 6 位 addr
SendDataBit_1621(data,4); //写入 data 的低 4 位
cs=1;
}
void WriteAll_1621(uchar addr,uchar *p,uchar cnt)
{
uchar i;
cs=0;
SendBit_1621(0xa0,3); //写入标志码"101"
SendBit_1621(addr<<2,6); //写入 6 位 addr
for(i =0; i <cnt; i ++,p++) //连续写入数据
{
SendDataBit_1621(*p,8);
}
cs=1;
}
void main()
{
uchar a[10];
a[0]=0x21;a[1]=0x43;a[2]=0x65;a[3]=0x87;a[4]=0xa9;
_pac=0; //将端口设为输出
SendCmd(BIAS); //设置偏压和占空比
SendCmd(SYSEN); //打开系统振荡器
SendCmd(LCDON); //打开 LCD偏压发生器
Write_1621(0x09,0x01); //在地址 0x09 处写入数据 0x01
WriteAll_1621(0,a,5); //在起始地址为 0 处连续写入 5 个字节数据
//a 为写入数据的起始地址,5 为写入的字节数
SendCmd(LCDOFF); //关闭 LCD显示
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -