OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子新作:阿波罗STM32F767&F429&探索者STM32F4开发板&赶快来下载资料哦。

查看: 7419|回复: 16

HT1621控制的段式LCD驱动程序

[复制链接]

  离线 

6

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2012-5-5
在线时间
6 小时
发表于 2013-6-20 15:15:16 | 显示全部楼层 |阅读模式
正点原子公众号
主控MCU是STM8S207,怎么写HT1621控制的64段 段式LCD程序。有没有类似的调试成功的程序上传一个。谢谢啦
黑白风云谁是主,旁人笑看输赢
回复

使用道具 举报

  离线 

6

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2012-5-5
在线时间
6 小时
 楼主| 发表于 2015-1-22 21:33:19 | 显示全部楼层
好久没上了,上传HT1621控制的段式液晶驱动程序,MCU是STM8S207
[C] 纯文本查看 复制代码
/*LED 字模结构*/
typedef struct
{
    char mChar;
    u8 mModal;
}LED_MODAL_DEFINE;

typedef struct
{
	u8 Addr;
	u8 Ddat;
} LED_ICON_DEFINE;
#define ht1621_BIAS		0x52
#define ht1621_SYSEN	0x02
#define ht1621_LCDOFF	0x04
#define ht1621_LCDON	0x06
#define ht1621_RC256	0X30
#define ht1621_SYSDIS	0X00
#define ht1621_WDTDIS	0X0A
#define ht1621_BLON		0x12
#define ht1621_BLOFF	0x10

#undef	LED_WIDTH
#define LED_WIDTH	6

#define PIN_HT1621_CS		ht_cs
#define PIN_HT1621_WR		ht_wr
#define PIN_HT1621_DAT	ht_data

#define HT1621_SET_CS(value) 	GPIOEX_BitWrite(PIN_HT1621_CS,value)
#define HT1621_SET_WR(value) 	GPIOEX_BitWrite(PIN_HT1621_WR,value)
#define HT1621_SET_DAT(value) GPIOEX_BitWrite(PIN_HT1621_DAT,value)

/*常用的LED字模定义,需要扩充的自己增加数组*/
const LED_MODAL_DEFINE LED_MODAL[]={
    {' ',0x00}  ,
    {'0',0xf5}  ,
    {'1',0x05}  ,
    {'2',0xb6}  ,
    {'3',0x97}  ,
    {'4',0x47}  ,
    {'5',0xd3}  ,
    {'6',0xf3}  ,
    {'7',0x85}  ,
    {'8',0xf7}  ,
    {'9',0xd7}  ,
    {'A',0xe7}  ,
    {'b',0x73}  ,
    {'C',0xf0}  ,
    {'E',0xf2}  ,
    {'F',0xe2}  ,
    {'H',0x67}  ,
    {'L',0x70}  ,
    {'n',0xe5}  ,
    {'U',0x75}  ,
    {'O',0xf5}  ,
    {'-',0x02}  ,
    {'I',0x60}  ,
    {'q',0xc7}  ,
    {'d',0x37}  ,
    {'S',0Xd3}  ,
    {'y',0x57}  ,
    {'t',0x72}	,
    {'r',0x22}  ,
		{'j',0x15}  ,
		{'P',0xe6}  ,
};

const LED_ICON_DEFINE ICON_DEFINE[] = 
{
	{0,0x0},
	{0,0x8},
	{2,0x8},
	{4,0x8},
	{6,0x8},
	{8,0x8},
	{14,0x8},
	{10,0x40},
	{10,0x20},
	{10,0x4},
	{10,0x2},
	{12,0x40},
	{12,0x2},
	{12,0x4},
	{10,0x80},
	{10,0x8},
	{12,0x20},
	{12,0x80},
	{12,0x8},
};

static char led_content[LED_WIDTH*2+1];         //显示内容 考虑小数点的问题,内容长度为LED宽度×2
static u8 led_len;	
u8 led_disp_mem[16];
u8 led_prev_disp_mem[16];
static _eCM led_prev_icon[2];
static char _l_prev_blink[6];
extern char _l_blink_state[6];

/*取字符对应的字模 
参数 :iValue 需要取模的字符 区分大小写
*/
static u8 LED_GetModal(char iValue)
{
    u8 i;
    for (i=0;i<sizeof(LED_MODAL)/sizeof(LED_MODAL[0]);i++)
		{
        if (iValue == LED_MODAL[i].mChar) 
				{
            return LED_MODAL[i].mModal;
        }
    }
    return 0;
}

/*将内容写入显示设备
参数: bGlint  需要闪烁的部分是否显示
*/
void LED_DisplayToDevice()
{
	u8 i = 0;
	u8 pos = 0;
	u8 value = 0;
	u8 mode[LED_WIDTH];
	u8 dispMemAddr[] = {0,2,4,6,8,14};
	memset(mode,0,sizeof(mode));
	for (i=0;i<led_len;) 
	{
		//取字模
		value=LED_GetModal(led_content[i++]);
		//小数点和前面的字符结合成一个字符
		if (led_content[i]=='.') 
		{
			i++;
		}
//		if (_l_blink_state[i] == 0)
	//		value = LED_GetModal(' ');

		mode[pos++]=value;
		if (pos>LED_WIDTH-1)
			break;
	}

	//
	for (i=0; i<pos; i++)
	{
		if (_l_blink_state[i] == 0)
			led_disp_mem[dispMemAddr[i]] = 0;
		else
			led_disp_mem[dispMemAddr[i]] = mode[i];
	}
	//
}
void WrCmd(u8 Cmd)
{
	u8 data, i, CmdByte = 0x80;
	
	HT1621_SET_CS(0);
	for (i=0; i<4; i++)
	{
		if (CmdByte&0x80)
			HT1621_SET_DAT(1);
		else
			HT1621_SET_DAT(0);
		HT1621_SET_WR(0);
		DelayUS(4);
		HT1621_SET_WR(1);
		CmdByte <<= 1;
	}
	
	for (i=0; i<8; i++)
	{
		if (Cmd&0x80)
			HT1621_SET_DAT(1);
		else
			HT1621_SET_DAT(0);
		HT1621_SET_WR(0);
		DelayUS(4);
		HT1621_SET_WR(1);
		DelayUS(4);
		Cmd <<= 1;
	}
	
	HT1621_SET_CS(1);
}

void WrAddData(u8 Add, u8 Ddat)
{
	u8 i, CmdByte = 0xA0;
	
	//
	led_disp_mem[Add] |= Ddat;
	//

	HT1621_SET_CS(0);
	for (i=0; i<3; i++)
	{
		if (CmdByte&0x80)
			HT1621_SET_DAT(1);
		else
			HT1621_SET_DAT(0);
		HT1621_SET_WR(0);
		DelayUS(4);
		HT1621_SET_WR(1);
		CmdByte <<= 1;		
	}
	
	Add <<= 2;
	for (i=0; i<6; i++)
	{
		if (Add&0x80)
			HT1621_SET_DAT(1);
		else
			HT1621_SET_DAT(0);
		HT1621_SET_WR(0);
		DelayUS(4);
		HT1621_SET_WR(1);
		Add <<= 1;
	}
	
	for (i=0; i<8; i++)
	{
		if (Ddat&0x80)
			HT1621_SET_DAT(1);
		else
			HT1621_SET_DAT(0);
		HT1621_SET_WR(0);
		DelayUS(4);
		HT1621_SET_WR(1);
		Ddat <<= 1;
	}
	
	HT1621_SET_CS(1);
}

void HT1621Cls(void)
{
	u8 i;
	for (i=0; i<16; i+=2)
	{
		WrAddData(i, 0x00);
	}
	
	memset(led_disp_mem, 0, sizeof (led_disp_mem));
}

void HT1621AllOn(void)
{
	u8 i;

	for (i=0; i<16; i+=2)
	{
		WrAddData(i, 0xff);
	}
}

void HT1621_Init()
{
	_eCM cm[2] = {CM_bph,CM_gw};
	GPIOEX_InitIOPin(PIN_HT1621_CS, GPIO_MODE_OUT_PP_LOW_FAST);
  GPIOEX_InitIOPin(PIN_HT1621_WR, GPIO_MODE_OUT_PP_LOW_FAST);
  GPIOEX_InitIOPin(PIN_HT1621_DAT, GPIO_MODE_OUT_PP_LOW_FAST);
	
	GPIOEX_InitIOPin(PIN_RUNLED, GPIO_MODE_OUT_PP_LOW_FAST);
	GPIOEX_BitWrite(PIN_RUNLED,0);
	
	WrCmd(ht1621_BIAS);
	WrCmd(ht1621_RC256);
	WrCmd(ht1621_SYSEN);
	WrCmd(ht1621_LCDON);
	
	HT1621Cls();
	//
	HC164_Init();
	//
}

void HT1621_ReInit()
{
		GPIOEX_InitIOPin(PIN_HT1621_CS, GPIO_MODE_OUT_PP_LOW_FAST);
		GPIOEX_InitIOPin(PIN_HT1621_WR, GPIO_MODE_OUT_PP_LOW_FAST);
		GPIOEX_InitIOPin(PIN_HT1621_DAT, GPIO_MODE_OUT_PP_LOW_FAST);
		WrCmd(ht1621_BIAS);
		WrCmd(ht1621_RC256);
		WrCmd(ht1621_SYSEN);
		WrCmd(ht1621_LCDON);
}

void HT1621_BackLight(u8 nStat)
{
	if (nStat)
	{
		WrCmd(ht1621_BLON);
	}
	else
	{
		WrCmd(ht1621_BLOFF);
	}
}


黑白风云谁是主,旁人笑看输赢
回复 支持 1 反对 0

使用道具 举报

  离线 

109

主题

1610

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2213
金钱
2213
注册时间
2011-12-15
在线时间
36 小时
发表于 2013-6-20 17:01:40 | 显示全部楼层
你到HT官网去找下资料,一般我们都是直接出芯片给客户。然后客户都是看pdf去操作的。
或者你可以采取用STM8L052来操作呀。价格也不错,带LCD驱动的。
专业制作STM32 物联网通信模块板,模块交流群:369840039。
回复 支持 反对

使用道具 举报

  离线 

6

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2012-5-5
在线时间
6 小时
 楼主| 发表于 2013-6-20 19:39:16 | 显示全部楼层
回复【2楼】ST-FAE-SALE:
---------------------------------
找了资料了,自己也写了个驱动程序,液晶愣是木有反应,唯一有反应的背光也很坑人,碰到连接的电阻才亮,不碰不亮......
公司用的是STM8S207,我也是刚接触的。
黑白风云谁是主,旁人笑看输赢
回复 支持 反对

使用道具 举报

  离线 

109

主题

1610

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2213
金钱
2213
注册时间
2011-12-15
在线时间
36 小时
发表于 2013-6-21 09:07:28 | 显示全部楼层
单片机都是一样,根据他的时序走。就没问题。你可以测试下,单片机输出的脉冲是否符合你要的。
专业制作STM32 物联网通信模块板,模块交流群:369840039。
回复 支持 反对

使用道具 举报

  离线 

9

主题

66

帖子

0

精华

初级会员

Rank: 2

积分
158
金钱
158
注册时间
2014-8-19
在线时间
7 小时
发表于 2014-8-19 13:47:09 | 显示全部楼层
请问你做完了么??我有这个驱动。。不过哟弍问题 。。。你的可以给我参考下么?
希望与更多的电子爱好者交朋友
回复 支持 反对

使用道具 举报

  离线 

1

主题

11

帖子

0

精华

新手上路

Rank: 1

积分
36
金钱
36
注册时间
2012-10-9
在线时间
0 小时
发表于 2014-12-3 16:43:09 | 显示全部楼层
IO有没设置成输出的啊
回复 支持 反对

使用道具 举报

  离线 

10

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2015-1-17
在线时间
12 小时
发表于 2015-1-19 15:14:35 | 显示全部楼层
请问你解决了么?我同样的驱动,AVR能点亮,STVD能点亮,就IAR不能点亮。完全不明白哪里出问题了。
回复 支持 反对

使用道具 举报

  离线 

0

主题

1

帖子

0

精华

新手上路

Rank: 1

积分
21
金钱
21
注册时间
2015-4-2
在线时间
0 小时
发表于 2015-4-2 09:23:27 | 显示全部楼层
回复【8楼】静水流深:
---------------------------------
好贴
回复 支持 反对

使用道具 举报

  离线 

5

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2012-11-5
在线时间
0 小时
发表于 2015-5-12 12:01:15 | 显示全部楼层
回复【7楼】叶萌球:
---------------------------------
请问找到问题了吗?
回复 支持 反对

使用道具 举报

  离线 

1

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2015-2-26
在线时间
19 小时
发表于 2015-5-26 08:48:24 | 显示全部楼层
回复【8楼】静水流深:
---------------------------------
好贴 要惜看不懂怎么取字模的
回复 支持 反对

使用道具 举报

  离线 

10

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2015-1-17
在线时间
12 小时
发表于 2015-6-23 09:03:53 | 显示全部楼层
回复【10楼】upc_arm:
---------------------------------
怀疑是编译器问题。
后来我去搞其他的项目了,因此这个就放下了。
不过在弄其他项目时,我最终选择了IAR,因为同样的程序STVD就是不能运行……。
回复 支持 反对

使用道具 举报

  离线 

3

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2014-3-20
在线时间
16 小时
发表于 2015-8-3 15:36:10 | 显示全部楼层
楼主,您好,请问原理图的VCC是多少V?请问您有用过3.3V给HT1621供电么?
回复 支持 反对

使用道具 举报

  离线 

6

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2012-5-5
在线时间
6 小时
 楼主| 发表于 2015-8-4 12:43:59 | 显示全部楼层
回复【13楼】rosewoman:
---------------------------------
原理图中的VCC是5V,3.3V的没有用过
黑白风云谁是主,旁人笑看输赢
回复 支持 反对

使用道具 举报

  离线 

0

主题

2

帖子

0

精华

新手上路

Rank: 1

积分
28
金钱
28
注册时间
2014-5-11
在线时间
2 小时
发表于 2015-9-1 21:07:36 | 显示全部楼层
参考中…………
回复 支持 反对

使用道具 举报

  离线 

9

主题

163

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1301
金钱
1301
注册时间
2012-8-24
在线时间
142 小时
发表于 2015-12-28 09:57:37 | 显示全部楼层
看不懂怎么取字模的
单片机技术交流请加127034610
回复 支持 反对

使用道具 举报

  离线 

2

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2015-9-14
在线时间
23 小时
发表于 2017-10-21 11:17:00 | 显示全部楼层
看不懂是如何将要显示的数字或字符发送到指定位置的?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则




QQ|联系我们|手机版|官方淘宝店|新浪微博|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2017-11-21 01:15

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表
/* */