HT1621 屏幕闪烁问题请教
各位我的 HT1621 显示屏接51单片机后屏回一直在闪烁程序如下请教哪里出问题了
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define _Nop() _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_()
#define BIAS 0x52 //0b1000 0101 00101/3duty 4com
#define SYSDIS0X00 //0b1000 0000 0000 关振系统荡器和LCD偏压发生器
#define SYSEN0X02 //0b1000 0000 0010 打开系统振荡器
#define LCDOFF0X04 //0b1000 0000 0100 关LCD偏压
#define LCDON0X06 //0b1000 0000 0110 打开LCD偏压
#define XTAL 0x28 //0b1000 0010 1000 外部接时钟
#define RC2560X30 //0b1000 0011 0000 内部时钟
#define TONEON0X12 //0b1000 0001 0010 打开声音输出
#define TONEOFF 0X10 //0b1000 0001 0000 关闭声音输出
#define WDTDIS0X0A //0b1000 0000 1010 禁止看门狗
#define n 0
//HT1621控制位(液晶模块接口定义,根据自已的需要更改)
sbit HT1621_DAT=P1^0; //HT1621数据引脚
sbit ht1621_cs=P1^2; //HT1621使能引脚
sbit HT1621_WR=P1^1; //HT1621时钟引脚
//sbit QQ=P1^1; //HT1621时钟引脚
uchar code Ht1621Tab1[]={0x0C,0x06,0x0C,0x0F,0x0E,0x0B,0x00,0x06,0x0E,0x0F};
uchar code Ht1621Tab2[]={0x0C,0x06,0x0C,0x0F,0x0E,0x0B,0x0A,0x0F,0x0E,0x0F};
uchar code Ht1621Tab3[]={0x0C,0x06,0x0C,0x0F,0x0E,0x0B,0x0A,0x0F,0x0E,0x0F};
//uchar code Ht1621Tab3[]={0x0f,0x0f,0x05,0x04,0x05,0x04,0x00,0x09,0x08,0x05};
//uchar code Ht1621Tab3[]={0x0C,0x0F,0x0C,0x06,0x0A,0x0F,0x0E,0x0B,0x0E,0x0F};
//delay us
/*
void Delay(uint us)//5,7,9
{
while(--us);
}
*/
//delay ms
void DelayMS(uint iMs)
{
uint i,j;
for(i=0;i<iMs;i++)
for(j=0;j<65;j++)
;
}
void Ht1621Wr_Data(uchar Data,uchar cnt)
{
uchar i;
for (i=0;i<cnt;i++)
{
/*HT1621_WR=0;
_Nop();
HT1621_DAT=Data&0x80;
_Nop();
HT1621_WR=1;
_Nop();
Data<<=1;*/
HT1621_WR=0;
//OMPILER V9.00 LCD1 11/03/2011 09:47:19 PAGE 2
if (Data&0x80)
HT1621_DAT=1;
else
HT1621_DAT=0;
HT1621_WR=1;
Data<<=1;
}
}
void Ht1621WrCmd(uchar Cmd)
{
ht1621_cs=0;
_Nop();
Ht1621Wr_Data(0x80,4); //写入命令标志100
Ht1621Wr_Data(Cmd,8); //写入命令数据
ht1621_cs=1;
_Nop();
}
void Ht1621_Init(void)
{
ht1621_cs=1;
HT1621_WR=1;
HT1621_DAT=1;
DelayMS(2000); //延时使LCD工作电压稳定
Ht1621WrCmd(BIAS);
Ht1621WrCmd(RC256); //使用内部振荡器
Ht1621WrCmd(SYSDIS);
Ht1621WrCmd(WDTDIS);
Ht1621WrCmd(SYSEN);
Ht1621WrCmd(LCDON);
Ht1621WrCmd(0x80);
}
void Ht1621Wr_Data00(uchar Data)
{
uchar i;
for (i=0;i<8;i++)
{
HT1621_WR=0;
if (Data&0x80)
HT1621_DAT=1;
else
HT1621_DAT=0;
HT1621_WR=1;
Data<<=1;
}
}
void Ht1621WrAllData00(uchar Addr,uchar p)
{
uchar i;
ht1621_cs=0;
Ht1621Wr_Data(0xa0,3); //写入数据标志101
Ht1621Wr_Data(Addr<<2,6); //写入地址数据
for (i=0;i<16;i++)
{
Ht1621Wr_Data00(p); //写入数据
}
ht1621_cs=1;
_Nop();
}
void Ht1621WrOneData(uchar Addr,uchar Data)
{
ht1621_cs=0;
Ht1621Wr_Data(0xa0,3); //写入数据标志101
Ht1621Wr_Data(Addr<<2,6); //写入地址数据
Ht1621Wr_Data(Data<<4,4); //写入数据
ht1621_cs=1;
_Nop();
}
void jia(uint x)
{
x++;
}
void time0_server_(void) interrupt 1
{
jia(n);
TMOD=0X01;
TH0=0X0B;
TL0=0XDC;
ET0=1;
TR0=1;
EA=1;
}
void main()
{
//uchar i,j,t;
uchar i,j;
//uint n;
Ht1621_Init(); //上电初始化LCD
DelayMS(100); //延时一段时间
//n=0;
TMOD=0X01;
TH0=0X0B;
TL0=0XDC;
ET0=1;
EA=1;
TR0=1;
// do{
//
// //Ht1621WrAllData00(0,0XFF);//清除1621寄存器数据,暨清屏
// DelayMS(200);
// //Ht1621WrAllData00(0,0X00);//清除1621寄存器数据,暨清屏
// //DelayMS(200);
// for(i=0;i<10;i++)
// {
// Ht1621WrOneData(i,Ht1621Tab1);
// //QQ=1;
//
// DelayMS(500);
//
// //QQ=0;
// //DelayMS(1000);
// }
//
//
//
// }while(n<256);
while(1)
{
for (j=0;j<10;j++)
{
Ht1621WrOneData(j,Ht1621Tab3);
DelayMS(500);
}
}
//
} while(1)
{
for(j=0;j<10;j++)
{
for(i=0;i<10;i++)
{
Ht1621WrOneData(j,Ht1621Tab3);
DelayMS(500);
}
}
}
试试看这个呢,不知道是什么样的一个闪烁 谢谢
我先试试
您有用过这个显示屏啊 xqn2012 发表于 2012-12-20 10:38 static/image/common/back.gif
while(1)
{
for(j=0;j
一看就知道没用过 LcdCS=0;
SendByteHT1621(0xa0,3);//送写命令模式
SendByteHT1621(4,6);//1<<2
SendDataHT1621(DisplayCode,8);//number5
SendDataHT1621(DisplayCode,8);//number6 剩余时间显示分钟
SendDataHT1621(DisplayCode+0x08,8);//number7 +0x08是显示DP
SendDataHT1621(DisplayCode,8);//number8 剩余时间显示秒
LcdCS=1;
试试
页:
[1]