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,
一个一个点亮没有问题,太多的数据需要刷新的话 前一个数据又会刷没了。。。。。。
请各位大侠指教。。。。。。。 没看到你的HT1621Send_data_bit();程序,只能猜猜:是不是你的程序发送一组数据完后的延时不够,或者最后的时序处理不对. 回复【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();
} 给个在KeilC51用过的例子:
用过的例子ourdev_679896O39W14.rar(文件大小:5K) (原文件名:Ht1620驱动of KeilC51.rar)
页:
[1]