标题:
HT1621B的单片机驱动程序
[打印本页]
作者:
1023877146
时间:
2017-9-13 11:41
标题:
HT1621B的单片机驱动程序
自己编写的HT1621B测试程序,参考了其他人的部分代码,包括基本的初始化设置,写数据,写命令,清屏,一笔一笔点亮LCD到全显等,程序后面有注释,位声明自己定义个人根据自己的硬件电路自己连接
单片机源程序如下:
#define SYSEN 0x02//打开系统振荡器
#define LCDON 0x06//打开LCD偏压发生器
#define RC256 0x30//片内RC振荡器
#define BIAS 0x52//LCD 1/3偏压 4个公共端口
#define SYSDIS 0x00
#define WDTDIS 0x0a
sbit cs=P1^7;
sbit rd=P3^2;
sbit wr=P3^3;
sbit dat=P3^4;
uchar table[]={
0x0f,0x0f,0x0f,0x0f,
0x0f,0x0f,0x0f,0x0f,
0x0f,0x0f,0x0f,0x0f,
0x0f,0x0f,0x0f,0x0f,0x0f,};
uchar table1[]={
0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xf0,};
uchar table2[]={
0xe6,0xf8,0xb0,0xb0,0xbe,};
uchar table3[]={
0x01,0x03,0x07,0x0f,};
uchar table4[]={
0xde,0x22,0xfe,0x22,
0x0e,0x22,0xfa,0x22,
0xda,0x22,0xc6,0x22,
0x5e,0x22,0x7c,0x22,
0x06,0x22,0xbe,0x22 ,};
uchar table5[]={
0xbe,0x06,0x7c,0x5e,
0xc6,0xda,0xfa,0x0e,
0xfe,0xde,};
void wr_data(uchar da,uchar cnt)//写数据函数
{
uchar i;
for(i=0;i<cnt;i++)
{
wr=0;
delayus(10);
dat=(bit)(da&0x80);/*if(da>=0x80)
dat=1;
else
dat=0;*/
delayus(10);
wr=1;
delayus(10);
da<<=1;
}
}
void wr_clearlcd()//清屏
{
uchar i;
cs=0;
delayus(10);
wr_data(0xa0,3);
wr_data(0x00<<2,6);
for(i=0;i<10;i++)
{
wr_data(0x00,8);
}
cs=1;
delayus(10);
}
void wr_com(uchar com)//写命令函数
{
cs=0;
delayus(10);
wr_data(0x80,4);
wr_data(com,8);
cs=1;
delayus(10);
}
void wr_all_lcd(uchar add,uchar *p,uchar cnt)//写连续地址
{
uchar i;
cs=0;
delayus(10);
wr_data(0xa0,3);
wr_data(add<<2,6);
for(i=0;i<cnt;i++)
{
wr_data(*p,8);
p++;
}
cs=1;
delayus(10);
}
void lcd_init()
{
cs=1;
wr=1;
dat=1;
delayms(20);
wr_com(BIAS);
wr_com(RC256);
wr_com(SYSDIS);
wr_com(WDTDIS);
wr_com(SYSEN);
wr_com(LCDON);
wr_clearlcd();
}
void wr_add_data(uchar add,uchar dat)
{
cs=0;
delayus(10);
wr_data(0xa0,3);
wr_data(add<<2,6);
wr_data(dat<<4,4);//数据位为4位
cs=1;
delayus(10);
}
void daoshu(uchar add,uchar *p,uchar cnt)
{
uchar i,a,b;
cs=0;
delayus(10);
wr_data(0xa0,3);
for(i=0;i<cnt;i++)
{
wr_data(add<<2,6);
for(a=0;a<6;a++)
wr_data(*p,8);
p++;
for(b=0;b<3;b++)
wr_data(*p,8);
p++;
delayms(1000);
wr_clearlcd();
cs=0;
delayus(10);
wr_data(0xa0,3);
}
cs=1;
delayus(10);
wr_clearlcd();
cs=0;
delayus(10);
wr_data(0xa0,3);
wr_data(0x08<<2,6);
for(i=0;i<2;i++)
wr_data(0xbe,8);
cs=1;
delayus(10);
wr_add_data(0x10,0x02);
}
void ceshi(uchar add)//一段一段点亮全屏测试
{
uchar i,num,*p=table3;
for(num=0;num<17;num++)
{
for(i=0;i<4;i++)
{
cs=0;
delayus(10);
wr_data(0xa0,3);
wr_data(add<<2,6);
wr_data(*p<<4,4);
p++;
delayms(1000);
cs=1;
delayus(10);
}
p=table3;
add++;
if(ZO==0)
ONOFF=1;
if(add==17)
{
wr_all_lcd(0x00,table1,10);
delayms(2000);
}
}
}
复制代码
ht1621B.docx
2017-9-13 11:40 上传
点击文件名下载附件
12.37 KB, 下载次数: 349
作者:
lxa0
时间:
2017-9-13 19:51
硬件电路是咋连接的?
作者:
1023877146
时间:
2017-9-15 15:24
lxa0 发表于 2017-9-13 19:51
硬件电路是咋连接的?
程序里面不是有4个引脚的未定义吗,只将那4个脚与单片机的I/O口连接就行,具体自己连接。HT1621B的其余引脚你可以下载它 的datasheet参考就行了
作者:
cy58168
时间:
2018-3-11 01:19
我可以下載嗎?
作者:
szqxw16881
时间:
2018-7-30 14:32
完美兼容HT1621B 全部封装 SSOP48 DIP28 LQFP44 LQFP48
详见
http://www.51hei.com/bbs/dpj-125017-1.html
作者:
adsl989
时间:
2018-8-17 15:21
硬件电路是咋连接的?
作者:
adsl989
时间:
2018-8-17 15:22
硬件电路是咋连接的? 硬件电路是咋连接的?
作者:
liuy5134
时间:
2018-9-10 14:23
下不了
作者:
HHJ960325
时间:
2018-9-12 16:38
硬件电路是咋连接的?
作者:
Abolo
时间:
2019-12-7 21:12
硬件电路是咋连接的?
作者:
JACK_WEI
时间:
2021-6-30 23:22
sbit rd 不是三个腿吗,啊 这个是啥
作者:
电子爱好者呀
时间:
2021-8-13 10:30
里面主函数都没有吗
作者:
winsinzhao
时间:
2021-8-29 09:49
if(ZO==0)
ONOFF=1;
这两个是什么不完整的程序上传上来
作者:
gcf197242
时间:
2023-2-8 15:02
错的,数据地位在前,命令高位在前都不区分
作者:
qinkiss
时间:
2023-4-18 14:34
尝试烧录,没有显示,不知道为什么.
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1