|
楼主 |
发表于 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();
} |
|