打印

有沒有人可以幫我確認一下這HT-1621b的程序

[复制链接]
1236|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zan19880518|  楼主 | 2014-4-17 08:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/****************************************Copyright (c)**********************************
**
**--------------file infromation----------------------------------------------------------------
** file name: startup.c
** author: leo       
** data: 2013-11-20
** description: start up program
** Technical support: jewoo lighting
**
**---------- version information-------------------------------------------------------------------
** version: V1.0
** explain:
**-------------------------------------------------------------------------------------*
****************************************************************************************/

/* Includes ------------------------------------------------------------------*/
#include"pic.h"
#include"pic16f1829.h"
#include"math.h"
#include"stdio.h"
#include"stdlib.h"
#include "startups.h"
#include"type.h"
#include <eeprom_routines.h>


/* Private typedef -----------------------------------------------------------*/


/* Private define ------------------------------------------------------------*/
#define cs1     RC0           //HT1621 select chip
#define wr      RC2           //HT1621 Write clock
#define _data   RC3           //HT1621 data
#define RD      RC1           //HT1621 Read clock


//unsigned char seven_SEG [10] = {0xBE,0x06,0xDA,0x5E,0x66,0x7c,0xEC,0x16,0xFE,0x76};
INT8U DpyNum[6]; //显示缓冲区

/*******************************************************************************
* Function Name  : sTargetInit
* Description    : initialization
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
//寫數據高位,高位再前
void HT1621Wr_DataH(unsigned char Data,unsigned char n)
{
  unsigned char i;
  for(i=0;i<n;i++)
  {
    if(Data>=0x80)      //判斷最高位  
      _data=1;
    else
      _data=0;
    wr=0;

    wr=1;

    Data<<=1;
  }
}

//寫數據低位,低位再前
void HT1621Wr_DataL(unsigned char Data,unsigned char n)
{
  unsigned char i;
  for(i=0;i<n;i++)
  {       
        Data>>=1;

        _data=CARRY;
    wr=0;

    wr=1;


  }
}

/***************************************************
發送命令到HT1621
cmmand->發送命令參數
****************************************************/
  void HT1621WrCommand(unsigned char cmd)
{
   cs1=0;
             
        HT1621Wr_DataH(0x80,3);        //發送寫數據參數1000
        HT1621Wr_DataH(cmd,9); //發送命令格式,寫入9位數據
        cs1=1;
}

/***************************************************
發送一個字節數據
data->發送的數據 addr->發送的地址
****************************************************/
void Wr_1621(unsigned char addr,unsigned char dat)
{

  addr<<=2;
  cs1=0;
  HT1621Wr_DataH(0xA0,3);                  //發送寫數據模式1010
  HT1621Wr_DataH(addr,6);                     //寫入6位地址
  HT1621Wr_DataL(dat,4);               //寫入數據低四位                                     

  cs1=1;

}

void InitLcd(void)
{

        TRISC0=0;//output pin. this pin used to lcd CS.
        TRISC2=0;//output pin. this pin used to lcd WR.
        TRISC3=0;//output pin. this pin used to lcd data.
        HT1621WrCommand(0x01);         //SYS EN
        HT1621WrCommand(0x29);        // //4 COM  1/3 BIAS
        HT1621WrCommand(0x03);         //LCD ON

}

        void clear(void)
{
    unsigned char i;
        for(i=0;i<0x22;i++)
        Wr_1621(i,0x00);                  
}
                          

   void        full(void)
{
    unsigned char i;
    for(i=0;i<0X22;i++)          
    Wr_1621(i,0xff);
}       


   void        delay20ms(void)
{
unsigned int i;
for (i=0;i<10000;i++);

}
/*************************************************************/
/*************************************************************/
void main(void)
{
        InitLcd();
        while(1)
        {
       
                 full();
                 delay20ms();
                 delay20ms();

                 clear();
                 delay20ms();
                 delay20ms();
        }
}



這程序寫完後完全不會亮,但我的版子測試過是沒問題的,我不太清楚我的程序哪有問題,有沒有人可以幫忙說一下哪裡有問題的





沙发
zan19880518|  楼主 | 2014-4-17 10:49 | 只看该作者
我知道大家都很忙,但能否給點建議或指教

謝謝

使用特权

评论回复
板凳
zhimagod| | 2014-4-17 15:01 | 只看该作者
你液晶初始化函数运行两遍试试?
我当时测试的程序,不知道为什么,初始化一遍总是没办**常点亮
#include<xc.h>
#define _XTAL_FREQ 4000000
#pragma config WDTE=OFF,FOSC=INTRCIO,MCLRE=OFF

#define MOOD 1

#define byte        unsigned char

#define SD                 GP0
#define WR                GP1
#define CS                 GP2
#define LED                GP5
#define Button        GP3

#define SYS_EN        0x01
#define        LCD_ON        0x03
#define        BISA2        0x28
#define        BISA3        0x29
#define        TEST        0xE0
#define        NORMAL        0xE3

#define InitArraysize        sizeof(InitArray)
//byte InitArray[]={SYS_EN,LCD_ON,BISA2,TEST};
byte InitArray[]={SYS_EN,LCD_ON,BISA2,NORMAL};

byte Adr;
byte Dat;

//系统初始化
void SysInit(void)
{
        OPTION_REG=0X0F;
        //GPIO=0X00;//端口初始值全部设为0
        CMCON=0X07;//关闭比较器
        TRISIO=0x08;//设置端口方向:除GP3外全部为输出
        GPIO=0X00;//端口初始值全部设为0
}

//HT1621_Pin_nCS        CS
//HT1621_Pin_WR                WR
//HT1621_W_Bit0                Bit0

void Bit0(void)
{
        WR=0;
        SD=0;
        //__delay_us(5);
        asm("NOP");
        WR=1;
        //__delay_us(5);
        asm("NOP");
        WR=0;
        SD=0;
}

void Bit1(void)
{
        WR=0;
        SD=1;
        //__delay_us(5);
        asm("NOP");
        WR=1;
        //__delay_us(5);
        asm("NOP");
        WR=0;
        SD=0;
}

void HT1621_Cmd(byte cmd)
{
        byte i;
        CS=0;
        //__delay_us(5);
        asm("NOP");
        Bit1();
        Bit0();
        Bit0();
        for(i=0;i<9;i++)
        {
                if(cmd&0x80)
                        Bit1();
                else       
                        Bit0();
                cmd<<=1;
        }
        CS=1;
}

void HT1621_W(byte Addr,byte Data)
{
        byte i;
        CS=0;
        //__delay_us(5);
        asm("NOP");
        Bit1();
        Bit0();
        Bit1();
        for(i=0;i<6;i++)
        {
                if(Addr&0x20)
                        Bit1();
                else
                        Bit0();
                Addr<<=1;
        }
        for(i=0;i<4;i++)
        {
                if(Data&0x01)
                        Bit1();
                else
                        Bit0();
                Data>>=1;
        }
        CS=1;
}

void HT1621_Init(void)
{
        byte i;
        for(i=0;i<InitArraysize;i++)
                HT1621_Cmd(InitArray[i]);
        for(i=0;i<32;i++)
                HT1621_W(i,0x00);
}

void main(void)
{
        SysInit();
        __delay_ms(1);
        HT1621_Init();
        __delay_ms(1);
        HT1621_Init();
        __delay_ms(1);
        HT1621_Init();
        Adr=0;
        Dat=1;
        while(1)
        {
                HT1621_W(Adr,Dat);
                __delay_ms(500);
                while(Button);
                __delay_ms(100);
                while(!Button);
#if MOOD==0
                Adr++;
                LED=0;
                if(Adr==32)
                {
                        LED=1;
                        Adr=0;
                        if(Dat==0x0F)
                        {
                                __delay_ms(100);
                                LED=0;
                                __delay_ms(100);
                                LED=1;
                                Dat=0;
                        }
                        Dat<<=1;
                        Dat|=1;
                }
#else
        #if MOOD==1
                LED=0;
                Dat<<=1;
                if(Dat==0x20)
                {
                        LED=1;
                        Dat=1;
                        Adr++;
                        if(Adr==32)
                        {
                                __delay_ms(100);
                                LED=0;
                                __delay_ms(100);
                                LED=1;
                                Adr=0;
                        }       
                }
        #else
                #error : "Not define the MOOD"
        #endif
#endif
//                __delay_ms(50);
        }
}

使用特权

评论回复
地板
zhimagod| | 2014-4-17 15:04 | 只看该作者
当时用的是12F629,只是测试LCD连接的对不对的一段代码,没加注释,不过应该不难懂吧

使用特权

评论回复
5
zan19880518|  楼主 | 2014-4-18 08:39 | 只看该作者
zhimagod 发表于 2014-4-17 15:04
当时用的是12F629,只是测试LCD连接的对不对的一段代码,没加注释,不过应该不难懂吧 ...

我照著你說的運行兩次初始化,還是沒用:'(

大神方便留QQ嗎?

使用特权

评论回复
6
zhimagod| | 2014-4-18 09:16 | 只看该作者
zan19880518 发表于 2014-4-18 08:39
我照著你說的運行兩次初始化,還是沒用

大神方便留QQ嗎?

好久没有弄段码了,现在都忘干净了,这个你自己仿真一下看看时序哪里不对吧……

使用特权

评论回复
7
zan19880518|  楼主 | 2014-4-18 09:39 | 只看该作者
zhimagod 发表于 2014-4-18 09:16
好久没有弄段码了,现在都忘干净了,这个你自己仿真一下看看时序哪里不对吧…… ...

哈哈...好吧,我再試試看

謝謝

使用特权

评论回复
8
ayb_ice| | 2014-4-18 16:10 | 只看该作者
初始化太少了吧

这是我以前的初始化

参考一下吧


//--------------------------------
// LCD配置
        {
                U8 code cmd[] = {
                        HT1621_CMD_LCD_OFF,                // 关闭LED
                        HT1621_CMD_SYS_EN,                // 打开振荡器
                        HT1621_CMD_RC_256K,                // 内部RC振荡器
                        HT1621_CMD_NORMAL,                // 正常方式
                        HT1621_CMD_CONFIG,                // 配置,根据硬件适当修改
                        HT1621_CMD_LCD_OFF,                // 关闭LED
                };

                ht1621_cmds(sizeof(cmd), cmd);

        }

使用特权

评论回复
9
ayb_ice| | 2014-4-18 16:11 | 只看该作者
//----------------------------
// 根据硬件修改配置
        HT1621_CMD_CONFIG                = (0x20+HT1621_CONFIG_BIAS3+HT1621_CONFIG_COM4),

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

13

帖子

0

粉丝