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

[复制链接]
 楼主| 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 | 显示全部楼层
你液晶初始化函数运行两遍试试?
我当时测试的程序,不知道为什么,初始化一遍总是没办**常点亮
  1. #include<xc.h>
  2. #define _XTAL_FREQ 4000000
  3. #pragma config WDTE=OFF,FOSC=INTRCIO,MCLRE=OFF

  4. #define MOOD 1

  5. #define byte        unsigned char

  6. #define SD                 GP0
  7. #define WR                GP1
  8. #define CS                 GP2
  9. #define LED                GP5
  10. #define Button        GP3

  11. #define SYS_EN        0x01
  12. #define        LCD_ON        0x03
  13. #define        BISA2        0x28
  14. #define        BISA3        0x29
  15. #define        TEST        0xE0
  16. #define        NORMAL        0xE3

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

  20. byte Adr;
  21. byte Dat;

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

  31. //HT1621_Pin_nCS        CS
  32. //HT1621_Pin_WR                WR
  33. //HT1621_W_Bit0                Bit0

  34. void Bit0(void)
  35. {
  36.         WR=0;
  37.         SD=0;
  38.         //__delay_us(5);
  39.         asm("NOP");
  40.         WR=1;
  41.         //__delay_us(5);
  42.         asm("NOP");
  43.         WR=0;
  44.         SD=0;
  45. }

  46. void Bit1(void)
  47. {
  48.         WR=0;
  49.         SD=1;
  50.         //__delay_us(5);
  51.         asm("NOP");
  52.         WR=1;
  53.         //__delay_us(5);
  54.         asm("NOP");
  55.         WR=0;
  56.         SD=0;
  57. }

  58. void HT1621_Cmd(byte cmd)
  59. {
  60.         byte i;
  61.         CS=0;
  62.         //__delay_us(5);
  63.         asm("NOP");
  64.         Bit1();
  65.         Bit0();
  66.         Bit0();
  67.         for(i=0;i<9;i++)
  68.         {
  69.                 if(cmd&0x80)
  70.                         Bit1();
  71.                 else       
  72.                         Bit0();
  73.                 cmd<<=1;
  74.         }
  75.         CS=1;
  76. }

  77. void HT1621_W(byte Addr,byte Data)
  78. {
  79.         byte i;
  80.         CS=0;
  81.         //__delay_us(5);
  82.         asm("NOP");
  83.         Bit1();
  84.         Bit0();
  85.         Bit1();
  86.         for(i=0;i<6;i++)
  87.         {
  88.                 if(Addr&0x20)
  89.                         Bit1();
  90.                 else
  91.                         Bit0();
  92.                 Addr<<=1;
  93.         }
  94.         for(i=0;i<4;i++)
  95.         {
  96.                 if(Data&0x01)
  97.                         Bit1();
  98.                 else
  99.                         Bit0();
  100.                 Data>>=1;
  101.         }
  102.         CS=1;
  103. }

  104. void HT1621_Init(void)
  105. {
  106.         byte i;
  107.         for(i=0;i<InitArraysize;i++)
  108.                 HT1621_Cmd(InitArray[i]);
  109.         for(i=0;i<32;i++)
  110.                 HT1621_W(i,0x00);
  111. }

  112. void main(void)
  113. {
  114.         SysInit();
  115.         __delay_ms(1);
  116.         HT1621_Init();
  117.         __delay_ms(1);
  118.         HT1621_Init();
  119.         __delay_ms(1);
  120.         HT1621_Init();
  121.         Adr=0;
  122.         Dat=1;
  123.         while(1)
  124.         {
  125.                 HT1621_W(Adr,Dat);
  126.                 __delay_ms(500);
  127.                 while(Button);
  128.                 __delay_ms(100);
  129.                 while(!Button);
  130. #if MOOD==0
  131.                 Adr++;
  132.                 LED=0;
  133.                 if(Adr==32)
  134.                 {
  135.                         LED=1;
  136.                         Adr=0;
  137.                         if(Dat==0x0F)
  138.                         {
  139.                                 __delay_ms(100);
  140.                                 LED=0;
  141.                                 __delay_ms(100);
  142.                                 LED=1;
  143.                                 Dat=0;
  144.                         }
  145.                         Dat<<=1;
  146.                         Dat|=1;
  147.                 }
  148. #else
  149.         #if MOOD==1
  150.                 LED=0;
  151.                 Dat<<=1;
  152.                 if(Dat==0x20)
  153.                 {
  154.                         LED=1;
  155.                         Dat=1;
  156.                         Adr++;
  157.                         if(Adr==32)
  158.                         {
  159.                                 __delay_ms(100);
  160.                                 LED=0;
  161.                                 __delay_ms(100);
  162.                                 LED=1;
  163.                                 Adr=0;
  164.                         }       
  165.                 }
  166.         #else
  167.                 #error : "Not define the MOOD"
  168.         #endif
  169. #endif
  170. //                __delay_ms(50);
  171.         }
  172. }
zhimagod 发表于 2014-4-17 15:04 | 显示全部楼层
当时用的是12F629,只是测试LCD连接的对不对的一段代码,没加注释,不过应该不难懂吧
 楼主| zan19880518 发表于 2014-4-18 08:39 | 显示全部楼层
zhimagod 发表于 2014-4-17 15:04
当时用的是12F629,只是测试LCD连接的对不对的一段代码,没加注释,不过应该不难懂吧 ...

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

大神方便留QQ嗎?
zhimagod 发表于 2014-4-18 09:16 | 显示全部楼层
zan19880518 发表于 2014-4-18 08:39
我照著你說的運行兩次初始化,還是沒用

大神方便留QQ嗎?

好久没有弄段码了,现在都忘干净了,这个你自己仿真一下看看时序哪里不对吧……
 楼主| zan19880518 发表于 2014-4-18 09:39 | 显示全部楼层
zhimagod 发表于 2014-4-18 09:16
好久没有弄段码了,现在都忘干净了,这个你自己仿真一下看看时序哪里不对吧…… ...

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

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

        }
ayb_ice 发表于 2014-4-18 16:11 | 显示全部楼层
//----------------------------
// 根据硬件修改配置
        HT1621_CMD_CONFIG                = (0x20+HT1621_CONFIG_BIAS3+HT1621_CONFIG_COM4),
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

13

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

4

主题

13

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部