sdwenyliu 发表于 2012-12-20 09:52:10

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);


            
            
         }
      
       }
          
          
//      
      }

xqn2012 发表于 2012-12-20 10:38:05

while(1)
{
      for(j=0;j<10;j++)
      {
             for(i=0;i<10;i++)
            {
                   Ht1621WrOneData(j,Ht1621Tab3);
                   DelayMS(500);
            }
      }
}

试试看这个呢,不知道是什么样的一个闪烁

sdwenyliu 发表于 2013-1-4 09:03:30

谢谢
我先试试
您有用过这个显示屏啊

MINI2440 发表于 2013-1-4 09:39:05

xqn2012 发表于 2012-12-20 10:38 static/image/common/back.gif
while(1)
{
      for(j=0;j

一看就知道没用过

MINI2440 发表于 2013-1-4 09:42:41

                  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]
查看完整版本: HT1621 屏幕闪烁问题请教