📄 ht1621.c
字号:
//HT1621操作软件包
//文件名:HT1621.c
//包含对HT1621操作的底层函数,如发送数据位,发送字节等等.
#include <reg51.h>
#include <intrins.h>
#include <HT1621.h>
//设置HT1621控制端口
sbit CS_PORT = P0^1; /*CS端口*/
sbit CLK_PORT = P0^2; /*WR端口*/
sbit SDA_PORT = P0^3; /*DATA端口*/
#define uchar unsigned char /*宏定义*/
#define uint unsigned int
#define _Nop() _nop_() /*定义空指令*/
//起动函数
//起动HT1621,以便进行器件操作.
void Start_spi()
{ CS_PORT=1;
CLK_PORT=1;
SDA_PORT=1;
_Nop(); /*起始条件建立时间大于3.34us*/
_Nop();
_Nop();
_Nop();
CS_PORT=0;
CS_PORT=0;
CLK_PORT=0;
CLK_PORT=0;
}
//发送数据位函数
//向HT1621发送dat的bitcnt位数据,由高位开始.(bitcnt不能大于8)
void SendBit(uchar dat,uchar bitcnt)
{ uchar i;
for(i=0;i<bitcnt;i++)
{ if(( dat & 0X80 ) == 0) SDA_PORT = 0;
else SDA_PORT = 1; /*发送数据由高位到低位传送*/
_Nop(); /*起始条件建立时间大于4.7us,延时*/
_Nop();
_Nop();
_Nop();
CLK_PORT = 1; /*置时钟线为高,通知被控器开始接收数位*/
_Nop(); /*起始条件建立时间大于4.7us,延时*/
_Nop();
_Nop();
_Nop();
_Nop();
CLK_PORT = 0; /*钳住总线准备下一个数据位*/
dat=dat<<1; /*发送数据左移一位*/
}
}
// 发送字节函数
// 向HT1621发送一字节数据,数据单元首地址在指针buf中,发送字节数由bytecnt指定
void SendByte(uchar dat)
{ SendBit(dat,8); /*发送字节*/
}
// 发送命令函数(A类)
// 发送还HT1621命令时要先发送ID值,及命令字,用于设置HT1621.
void SENDCOMA(uchar com)
{ Start_spi();
SendBit(0X80,4); /*发送设置命令ID=100 0*/
SendByte(com); /*发送命令字*/
}
// 发送命令函数(B类)
// 发送还HT1621命令时要先发送ID值,及命令字,用于设置HT1621.
void SENDCOMB(uchar adr)
{ Start_spi();
SendBit(0XA0,4); /*发送写显示RAM命令ID=101 0*/
SendBit(adr,5); /*指定写入地址*/
}
// 发送命令函数(C类)
// 发送还HT1621命令时要先发送ID值,及命令字,用于设置HT1621.
void SENDCOMC(uchar com)
{ Start_spi();
SendBit(0X90,4); /*发送命令ID=100 1*/
SendByte(com); /*发送命令*/
}
//初始化HT1621函数
void INTI1621()
{ SENDCOMA(BIAS);
SENDCOMA(XTAL32);
SENDCOMA(SYSEN);
SENDCOMA(LCDON);
SENDCOMA(TONE4K);
}
//向指定一个显示缓冲区填充一个数据
void disp(uchar dat,uchar addr)
{ addr=addr<<3; /*左移3位,低5位作为RAM地址*/
SENDCOMB(addr);
SendByte(dat);
}
//循环填充并显示某一段连地址地
//addr填充段首地址,显示位数num,填充数据dat.
void dispsome(uchar num,uchar dat,uchar addr)
{ uchar i;
for(i=0;i<num;i++)
{ disp(dat,addr);
addr++;
addr++;
}
}
//左移一位循环显示.
//显示位数num,指针p指向一组要显示的数组,显示首地址addr
void disRound(uchar num, uchar *p, uchar addr)
{ uchar i;
for(i=0;i<num;i++)
{ disp(*p,addr);
p++;
addr++;
addr++;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -