我用的pic32单片机,系统时钟40M,现在使用液晶驱动1621,全显后不能清除,但是部分显示后使用全清没有问题,哪位大神帮忙解决一下。
#include "includes.h"
const INT8U NUMCODE[16]={0xf5,0x60,0xd3,0xf2,0x66,
0xb6, 0xb7,0xe0,0xf7,0xf6,
0xe7,0x37,0x95,0x73,0x97,0x87}; // 0~f
void DelayMS(INT16U x)
{
INT16U i;
while(x--)
{
for(i=0;i<265;i++);
}
}
void SendCmd(INT8U command)
{
cs=0;
Nop();
Nop();
Nop();
Nop();
Nop();
Nop();
Nop();
Nop();
Nop();
Nop();
SendBit_1621(0x80,3); //写入标志码"100"和9位command命令,由于
SendBit_1621(command,9); //为了编程方便,直接将command的最低位写"0"
cs=1;
}
/********************************************************
函数名称:void Ht1621_Init(void)
功能描述: HT1621初始化
全局变量:无
参数说明:无
返回说明:无
版 本:1.0
说 明:初始化后,液晶屏所有字段均不显示
********************************************************/
void Ht1621_Init(void)
{
cs = 1;
wr = 1;
dat = 1;
display_key = 1;
mPORTBSetPinsDigitalOut(BIT_6);
mPORTCSetPinsDigitalOut(BIT_5 | BIT_4 | BIT_3);
mPORTASetPinsDigitalOut(BIT_9);
DelayMS(2000); //延时使LCD工作电压稳定
SendCmd(BIAS);
SendCmd(RC256K);
SendCmd(SYSEN);
SendCmd(LCDON);
SendCmd(TONEOFF);
Nop();
Nop();
Nop();
Nop();
Nop();
WriteClearAll_1621(0,16);
}
//===========================================================================//
//由高到低,发送数据位;用于发送地址,标志码
//===========================================================================//
void SendBit_1621(INT8U data,INT8U cnt) //data的高cnt位写入HT1621,高位在前
{
INT8U i=0;
for(i=0; i < cnt; i++)
{
wr=0;
Nop();
Nop();
Nop();
// Nop();
// Nop();
if((data & 0x80) == 0)
dat=0;
else
dat=1;
wr=1;
Nop();
Nop();
// Nop();
// Nop();
data <<= 1;
}
}
//===========================================================================//
//由低到高,发送数据位;用于发送数据
//===========================================================================//
void SendDataBit_1621(INT8U data,INT8U cnt) //data的低cnt位写入HT1621,低位在前
{
INT8U i=0;
for(i=0; i < cnt; i ++)
{
wr=0;
Nop();
Nop();
Nop();
// Nop();
// Nop();
if((data & 0x01) == 0)
dat = 0;
else
dat = 1;
wr=1;
Nop();
Nop();
Nop();
Nop();
data >>= 1;
}
}
//===========================================================================//
//对某个地址写数据;
//===========================================================================//
void Write_1621(INT8U addr,INT8U data)
{
addr<<=2;
cs=0;
Nop();
Nop();
Nop();
Nop();
SendBit_1621(0xa0,3); //写入标志码"101"
SendBit_1621(addr,6); //写入addr的高6位
SendDataBit_1621(data,4); //写入data的低4位
cs=1;
}
//===========================================================================//
//对某个连续地址写2个数据,即写一个字节
//===========================================================================//
void WriteByte_1621(INT8U addr,INT8U data)
{
addr<<=2;
cs=0;
Nop();
Nop();
Nop();
Nop();
SendBit_1621(0xa0,3); //写入标志码"101"
SendBit_1621(addr,6); //写入addr的高6位
SendDataBit_1621(data,8); //写入data的低8位
cs=1;
}
//===========================================================================//
//对所有的地址写数据;
//===========================================================================//
void WriteAll_1621(INT8U addr,INT8U *p,INT8U cnt)
{
INT8U i;
cs=0;
Nop();
Nop();
Nop();
Nop();
SendBit_1621(0xa0,3); //写入标志码"101"
SendBit_1621(addr<<2,6); //写入addr的高6位
for(i =0; i <cnt; i ++,p++) //连续写入数据
{
SendDataBit_1621(*p,8);
}
cs=1;
}
//===========================================================================//
//对所有的地址写零数据;
//===========================================================================//
void WriteClearAll_1621(INT8U addr, INT8U cnt)
{
INT8U i;
cs=0;
Nop();
Nop();
Nop();
Nop();
SendBit_1621(0xa0,3); //写入标志码"101"
SendBit_1621(addr<<2,6); //写入addr的高6位
for(i =0; i <cnt; i ++) //连续写入数据
{
SendDataBit_1621(0,8);
}
cs=1;
}
//===========================================================================//
//对所有的地址写一数据;
//===========================================================================//
void WriteoneAll_1621(INT8U addr, INT8U cnt)
{
INT8U i;
cs=0;
Nop();
Nop();
Nop();
Nop();
SendBit_1621(0xa0,3); //写入标志码"101"
SendBit_1621(addr<<2,6); //写入addr的高6位
for(i = 0; i < cnt; i ++) //连续写入数据
{
SendDataBit_1621(0xff,8);
}
cs=1;
}
主函数
Ht1621_Init();
WriteoneAll_1621(0,16);
WriteClearAll_1621(0,16);
while(1)
{
Write_1621(0,0x08);
for(i = 0; i < 1000000;i++);
WriteClearAll_1621(0,16);
for(i = 0; i < 1000000;i++);
}
还是显示全部。。。 |
|