zplmcu 发表于 2011-4-26 03:37:21

ht1621连续写数据时候地址值自动加2???

void Ht1621WrAllData(uchar Addr,uchar *p,uchar cnt)        {
uchar num2;
HT1621_CS=0;
_Nop();
_Nop();
Ht1621Send_Bit(0xa0,3);                         //写入数据标志101
Ht1621Send_Bit(Addr<<2,6);                      //写入地址数据
// Ht1621Send_Bit(Addr,6); //写入地址数据
for (num2=0;num2<cnt;num2++)
   {
   Ht1621Send_Data_Bit(*p,8);                         
    p++;
   }
HT1621_CS=1;
// _Nop();
}
Ht1621WrAllData(0x00,table4,24);送这条指令之后发现 地址值自动加2???
从AD采样的数据不断的需要刷新LCD 如何连续刷新LCD 显示是用一点一点来刷新 我的LCD SEG复用了太多 太多的标志占用一个SEG,
一个一个点亮没有问题,太多的数据需要刷新的话 前一个数据又会刷没了。。。。。。
请各位大侠指教。。。。。。。

bmagui 发表于 2011-4-26 08:41:26

没看到你的HT1621Send_data_bit();程序,只能猜猜:是不是你的程序发送一组数据完后的延时不够,或者最后的时序处理不对.

zplmcu 发表于 2011-4-26 12:41:22

回复【1楼】bmagui
-----------------------------------------------------------------------
大侠帮我看下 那有问题现在是 一个一个去点亮 ,比较麻烦 还得判断先前的数据,SEG复用太多,刷数据比较麻烦 想用 连续写的方式来刷屏,是不是我理解错了 ,认为1621的扫描是先SEG扫过4个COM 地址再加一(现在是观察到地址自动加2)循环这样
连续写的话有什么优势,网上看了些参加程序很多是通过一个一个点去刷,这两者有什么区别?? 一个一个点亮不是需要去判断先前同一个SEG中COM的数据位,要不刷新会冲掉以前的数据???(子程序也是从网上载的,一个一个点亮没问题), 人都快晕了

void Ht1621Send_Bit(uchar Data,uchar cnt)
{
uchar num;
for (num=0;num<cnt;num++)
   {
    // HT1621_WR=0;
       _Nop();
       if((Data&0x80)==0)
       HT1621_DAT=0;
       else
       HT1621_DAT=1;
       HT1621_WR=0;
       _Nop();
   HT1621_WR=1;
       _Nop();
       _Nop();
   Data<<=1;
}
}


void Ht1621Send_Data_Bit(uchar Data,uchar cnt)
{
uchar num1;
for(num1=0;num1<cnt;num1++)
   {
   //HT1621_WR=0;
       _Nop();
       if((Data&0x01)==0)
       HT1621_DAT=0;
       else
       HT1621_DAT=1;
          HT1621_WR=0;
           _Nop();
   HT1621_WR=1;
       _Nop();
       _Nop();
   Data>>=1;
   }
}
void Ht1621Send_Bit(uchar Data,uchar cnt)
{
uchar num;
for (num=0;num<cnt;num++)
   {
    // HT1621_WR=0;
       _Nop();
       if((Data&0x80)==0)
       HT1621_DAT=0;
       else
       HT1621_DAT=1;
       HT1621_WR=0;
       _Nop();
   HT1621_WR=1;
       _Nop();
       _Nop();
   Data<<=1;
}
}


void Ht1621Send_Data_Bit(uchar Data,uchar cnt)
{
uchar num1;
for(num1=0;num1<cnt;num1++)
   {
   //HT1621_WR=0;
       _Nop();
       if((Data&0x01)==0)
       HT1621_DAT=0;
       else
       HT1621_DAT=1;
          HT1621_WR=0;
           _Nop();
   HT1621_WR=1;
       _Nop();
       _Nop();
   Data>>=1;
   }
}

void Ht1621Wr_Cmd(uchar Cmd)
{
   HT1621_CS=0;
   _Nop();
   _Nop();
   _Nop();
   Ht1621Send_Bit(0x80,4);                            //写入命令标志100        按1000 4位写入 必须写4
   Ht1621Send_Bit(Cmd,8);                           //写入命令数据
   HT1621_CS=1;
   _Nop();
   _Nop();
   _Nop();
}

void Ht1621WrOneData(uchar Addr,uchar Data)
{
HT1621_CS=0;
_Nop();
_Nop();
_Nop();
Ht1621Send_Bit(0xa0,3);                           //写入数据标志101
Ht1621Send_Bit(Addr<<2,6);                        //写入地址数据
//Ht1621Send_Bit(Addr,6); //写入地址数据
Ht1621Send_Data_Bit(Data,4);                   //写入数据

// Ht1621Send_Data_Bit(Data,4);                   //写入数据
HT1621_CS=1;
_Nop();
_Nop();
_Nop();
}

funv 发表于 2011-9-26 22:20:56

给个在KeilC51用过的例子:
用过的例子ourdev_679896O39W14.rar(文件大小:5K) (原文件名:Ht1620驱动of KeilC51.rar)
页: [1]
查看完整版本: ht1621连续写数据时候地址值自动加2???