打印

求助,HT1621驱动断码屏闪烁

[复制链接]
3723|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tkyl01|  楼主 | 2015-7-10 15:39 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
HT1621驱动断码屏闪烁,
有一部分是按照一定频率闪烁的,有一些段是常亮的,
但是常亮的段从比较低的角度去看的时候隐约能看到也会闪烁,
怎么破,这个问题:'(
如图

视频
20150710151109_clip_Compress.rar (590.14 KB)


相关帖子

沙发
tyw| | 2015-7-10 16:04 | 只看该作者
看视频,象是软件里的问题

使用特权

评论回复
板凳
tkyl01|  楼主 | 2015-7-10 16:18 | 只看该作者
tyw 发表于 2015-7-10 16:04
看视频,象是软件里的问题

把程序改为固定闪烁的段不闪烁时,这时候屏就没有问题,怎么看都没有闪烁,这能说明什么呢

使用特权

评论回复
地板
tyw| | 2015-7-10 16:51 | 只看该作者
本帖最后由 tyw 于 2015-7-10 17:12 编辑
tkyl01 发表于 2015-7-10 16:18
把程序改为固定闪烁的段不闪烁时,这时候屏就没有问题,怎么看都没有闪烁,这能说明什么呢 ...


可以肯定是软件毛病,看看你的闪烁程序运行时,cpu都做了些什么动作?是否把不该闪的笔段也带进去了.
ht1621所谓的闪,无非是定时地将需要闪的笔段RAM定时地送数,送空白.笔段RAM位操作时,不要牵连别人,就不会乱闪了.

使用特权

评论回复
5
tkyl01|  楼主 | 2015-7-10 17:29 | 只看该作者
tyw 发表于 2015-7-10 16:51
可以肯定是软件毛病,看看你的闪烁程序运行时,cpu都做了些什么动作?是否把不该闪的笔段也带进去了.
ht162 ...

会不会因为 每次亮灭的 笔段太多,而1621的驱动能力有限导致电压受到影响,因为观察屏幕发现只要亮起的笔段总数不变(改变了程序,使闪烁的笔段不同时闪烁),屏幕就不会闪

使用特权

评论回复
6
tyw| | 2015-7-10 18:17 | 只看该作者
tkyl01 发表于 2015-7-10 17:29
会不会因为 每次亮灭的 笔段太多,而1621的驱动能力有限导致电压受到影响,因为观察屏幕发现只要亮起的笔 ...

1621只是驱动了LCD,微电流,能力不会不够的.
你下面的背光也跟着一起动的吗?还是常亮的?

使用特权

评论回复
7
tkyl01|  楼主 | 2015-7-11 08:20 | 只看该作者
tyw 发表于 2015-7-10 18:17
1621只是驱动了LCD,微电流,能力不会不够的.
你下面的背光也跟着一起动的吗?还是常亮的? ...

背光是常亮的

使用特权

评论回复
8
tyw| | 2015-7-11 08:34 | 只看该作者

那么毛病还是出在程序里,检查闪烁部分,牵扯了哪些部份,闪烁位的位处理正确吗?

使用特权

评论回复
9
tkyl01|  楼主 | 2015-7-11 09:14 | 只看该作者
tyw 发表于 2015-7-11 08:34
那么毛病还是出在程序里,检查闪烁部分,牵扯了哪些部份,闪烁位的位处理正确吗? ...

这是程序,麻烦看一下,我看了好几遍不知道哪里会有问题,单片机是STC12的
void main(void)
{  
uchar k = 0;

P2M0 = 0xff;
P2M1 = 0x00;
Ht1621Init();
InitTimer1();//10ms中断
DelaymS(1000);

for(k = 0;k < 32;k ++)//清屏
{
  Ht1621WrOneData(k,0);
}
DelaymS(1000);

Ht1621WrOneData(0x00,0x08);
Ht1621WrOneData(0x01,0x01);
Ht1621WrOneData(0x02,0x0f);
Ht1621WrOneData(0x03,0x0e);
Ht1621WrOneData(0x04,0x0e);
Ht1621WrOneData(0x05,0x08);
Ht1621WrOneData(0x06,0x0f);
Ht1621WrOneData(0x0a,0x0f);
Ht1621WrOneData(0x0b,0x0f);
Ht1621WrOneData(0x0c,0x0f);

//两边颜色条全亮
Ht1621WrOneData(7,0x0f);
Ht1621WrOneData(8,0x0f);
Ht1621WrOneData(9,0x0f);
Ht1621WrOneData(17,0x0f);
Ht1621WrOneData(18,0x0f);
Ht1621WrOneData(19,0x0f);

//显示两个0
DispDigital(0,0);
DispDigital(1,0);

while(1)
{      
  if(j > 0)//10ms扫描一次
  {
   j = 0;
   k ++;
   if(k > 50)//500ms闪烁计数
   {
    k = 0;
    i ++;
   }
   
   if(i > 3) i = 0;
   
   //三个颜色条一起转动
   Ht1621WrOneData(10,0x01 << i);
   Ht1621WrOneData(11,0x01 << i);
   Ht1621WrOneData(12,0x01 << i);
   
   //500ms闪烁笔段
   if(i % 2 == 0)
   {
    Ht1621WrOneData(6,0x0f);
    Ht1621WrOneData(4,0x0f);
    Ht1621WrOneData(2,0x0f);
   }
   else
   {
    Ht1621WrOneData(6,0x0b);
    Ht1621WrOneData(4,0x0e);
    Ht1621WrOneData(2,0x0e);
   }
  }
}
}
void Timer1Interrupt(void) interrupt 3//10Ms中断
{
TH1 = 0xB8;
TL1 = 0x00;
j ++;
}

显示屏数据,COM端分别是1,2,4,8            SEG段是1~19
如图


使用特权

评论回复
10
tkyl01|  楼主 | 2015-7-11 09:15 | 只看该作者
tyw 发表于 2015-7-11 08:34
那么毛病还是出在程序里,检查闪烁部分,牵扯了哪些部份,闪烁位的位处理正确吗? ...

/******************************************************
дÊý¾Ýº¯Êý,cntΪ´«ËÍÊý¾ÝλÊý,Êý¾Ý´«ËÍΪµÍλÔÚÇ°
*******************************************************/
void Ht1621WrnBit(uchar Data,uchar cnt)
{
        uchar i;
        for(i = 0;i < cnt;i ++)
        {
                WR_HT1621 = 0;
                somenop();
                DATA_HT1621 = Data&0x80;
                somenop();
                WR_HT1621 = 1;
                somenop();
                Data <<= 1;
        }
}

/********************************************************
º¯ÊýÃû³Æ£ºvoid Ht1621WrCmd(uchar Cmd)
¹¦ÄÜÃèÊö: HT1621ÃüÁîдÈ뺯Êý
È«¾Ö±äÁ¿£ºÎÞ
²ÎÊý˵Ã÷£ºCmdΪдÈëÃüÁîÊý¾Ý
·µ»Ø˵Ã÷£ºÎÞ
˵ Ã÷£ºÐ´ÈëÃüÁî±êʶλ100
********************************************************/
void Ht1621WrCmd(uchar Cmd)
{
        CS_HT1621 = 0;
        somenop();
        Ht1621WrnBit(0x80,4); //дÈëÃüÁî±êÖ¾100
        Ht1621WrnBit(Cmd,8); //дÈëÃüÁîÊý¾Ý
        CS_HT1621 = 1;
        somenop();
}

/********************************************************
º¯ÊýÃû³Æ£ºvoid Ht1621WrOneData(uchar Addr,uchar Data)
¹¦ÄÜÃèÊö: HT1621ÔÚÖ¸¶¨µØַдÈëÊý¾Ýº¯Êý
È«¾Ö±äÁ¿£ºÎÞ
²ÎÊý˵Ã÷£ºAddrΪдÈë³õʼµØÖ·£¬DataΪдÈëÊý¾Ý
·µ»Ø˵Ã÷£ºÎÞ
˵ Ã÷£ºÒòΪHT1621µÄÊý¾Ýλ4룬ËùÒÔʵ¼ÊдÈëÊý¾ÝΪ²ÎÊýµÄºó4λ
********************************************************/
void Ht1621WrOneData(uchar Addr,uchar Data)
{
        CS_HT1621 = 0;
        Ht1621WrnBit(0xa0,3); //дÈëÊý¾Ý±êÖ¾101
        Ht1621WrnBit(Addr << 2,6); //дÈëµØÖ·Êý¾Ý
        Ht1621WrnBit(Data << 4,4); //дÈëÊý¾Ý
        CS_HT1621 = 1;
        somenop();
}

使用特权

评论回复
11
tkyl01|  楼主 | 2015-7-11 09:17 | 只看该作者
tyw 发表于 2015-7-11 08:34
那么毛病还是出在程序里,检查闪烁部分,牵扯了哪些部份,闪烁位的位处理正确吗? ...

/******************************************************
写数据函数,cnt为传送数据位数,数据传送为低位在前
*******************************************************/
void Ht1621WrnBit(uchar Data,uchar cnt)
{
        uchar i;
        for(i = 0;i < cnt;i ++)
        {
                WR_HT1621 = 0;
                somenop();
                DATA_HT1621 = Data&0x80;
                somenop();
                WR_HT1621 = 1;
                somenop();
                Data <<= 1;
        }
}

/********************************************************
函数名称:void Ht1621WrCmd(uchar Cmd)
功能描述: HT1621命令写入函数
全局变量:无
参数说明:Cmd为写入命令数据
返回说明:无
说 明:写入命令标识位100
********************************************************/
void Ht1621WrCmd(uchar Cmd)
{
        CS_HT1621 = 0;
        somenop();
        Ht1621WrnBit(0x80,4); //写入命令标志100
        Ht1621WrnBit(Cmd,8); //写入命令数据
        CS_HT1621 = 1;
        somenop();
}

/********************************************************
函数名称:void Ht1621WrOneData(uchar Addr,uchar Data)
功能描述: HT1621在指定地址写入数据函数
全局变量:无
参数说明:Addr为写入初始地址,Data为写入数据
返回说明:无
说 明:因为HT1621的数据位4位,所以实际写入数据为参数的后4位
********************************************************/
void Ht1621WrOneData(uchar Addr,uchar Data)
{
        CS_HT1621 = 0;
        Ht1621WrnBit(0xa0,3); //写入数据标志101
        Ht1621WrnBit(Addr << 2,6); //写入地址数据
        Ht1621WrnBit(Data << 4,4); //写入数据
        CS_HT1621 = 1;
        somenop();
}

使用特权

评论回复
12
tyw| | 2015-7-11 09:46 | 只看该作者
本帖最后由 tyw 于 2015-7-11 10:02 编辑
tkyl01 发表于 2015-7-11 09:14
这是程序,麻烦看一下,我看了好几遍不知道哪里会有问题,单片机是STC12的
void main(void)
{  


俺只玩汇编,少累哈
才发现你是在做脉冲治疗仪,哈哈,碰到同行了.
这种东东分厘必争,竟用C编程,不怕开销大吗?老板真有钱,哈哈
按我的经验,先做工艺试验,拉掉不相干的程序,只留一个闪烁程序,通过后再一点一点加上其它动作.这样容易捉到毛病.
看看俺当年的电林秘芨,与LZ的图片何其相象,哈哈,晕








使用特权

评论回复
13
tkyl01|  楼主 | 2015-7-11 12:51 | 只看该作者
tyw 发表于 2015-7-11 09:46
俺只玩汇编,少累哈
才发现你是在做脉冲治疗仪,哈哈,碰到同行了.
这种东东分厘必争,竟用C编程,不怕开销大 ...

说的真对,图片真的很像,看了你后边的波形数据,连记录方式都很像,
不过还是没有你的做的详细,学习了,佩服

话说,我现在用的程序就是只有显示屏的部分了,其他的功能一点没有
您用汇编写,碰见牛人了,我的汇编自从用了C早忘光了

使用特权

评论回复
14
XZL| | 2015-7-11 14:10 | 只看该作者
呵呵,疏波、密波、三角波、锯齿波。。。。
现在都做烂了,做好的不多

使用特权

评论回复
15
XZL| | 2015-7-11 14:12 | 只看该作者
俺当时用4位机和汇编写的程序,还是OTP芯片

使用特权

评论回复
16
mcsgy| | 2015-7-11 14:27 | 只看该作者
tyw 发表于 2015-7-11 09:46
俺只玩汇编,少累哈
才发现你是在做脉冲治疗仪,哈哈,碰到同行了.
这种东东分厘必争,竟用C编程,不怕开销大 ...

T 叔,我刚入这行,正需要,收藏了!
谢谢!
找这方面的资料太少了!

使用特权

评论回复
17
yxycdz| | 2015-7-11 15:40 | 只看该作者
学习下

使用特权

评论回复
18
HOLTEK单片机| | 2015-9-15 21:40 | 只看该作者
楼主还有困惑吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

71

帖子

1

粉丝