搜索
bottom↓
回复: 20

[求助]HT1621为何点不亮(附程序、资料)

[复制链接]

出0入0汤圆

发表于 2005-3-4 13:32:38 | 显示全部楼层 |阅读模式
HT1621接在ATmega8  B口

下面的程序是从PIC上移植过来的

请高手指教



*******************************************************************

公司名称:

模块名称:

功    能:液晶驱动模块           芯片型号:HT1621

说    明:

程序设计:     

设计时间:        

版 本 号:

*******************************************************************/

#include <iom8v.h>



#include <math.h>

#include <stdio.h>

#define WR      0B00100000//时钟线

#define DATA    0B00001000//数据线

#define CS      0b00010000//片选线

#define word_long 8

unsigned char   TAB_DISPLAY[16] ={1,2};

/*1621的显存是4位*32的,故用16*8位的寄存器

  就能满足要求奇数显存放高4位,偶数放低4位*/

/*****************************************************************/

   /*LCD系统命令(可选)*/

const char TAB_REST[10]={0b00000001,/*打开系统振荡器命令*/

    0b00000011,/*打开LCD 偏压发生器命令*/

    0b00000101,/*WDT 溢出标志输出失效命令*/

    0b00000110,/*时基输出使能命令*/

    0b00011000,/*系统时钟源片内RC振荡器命令*/

    0b00101001,/*LCD1/3偏压选项4个公共口命令*/

    0b01000000,/*声音频率4KHz命令*/

    0b00001001,/*打开声音输出命令*/

    0b10100000,/*时基/WDT 时钟输出1Hz命令*/

    0b10001000};/*使/IRQ 输出有效命令*/

       

       

void send_data(unsigned char data_bus,unsigned char loop);

/********************************************************************

函 数 名:delay( )

功    能:延时

说    明 (内部函数)

入口参数:无

返 回 值:无  

设    计:           日    期:

修    改:                      日    期:

***********************************************************************/

void delay(void)

{

  asm("nop");

  asm("nop");

  asm("nop");

  asm("nop");

  asm("nop");

  asm("nop");

}

/********************************************************************

函 数 名:display_start( )

功    能:LCD系统初始化

说    明 启动1621

入口参数:无

返 回 值:无  

设    计:                      日    期:

修    改:                      日    期:

***********************************************************************/

void display_start(void)

{

  unsigned char t;

  PORTB &=~CS;

  send_data(0b10000000,3);/*送3位命令模式代码100*/

  for(t=0;t<=9;t++)

  {

   send_data(TAB_REST[t],9);/*送9位命令代码*/

  }

  PORTB |=CS;

  PORTB |=WR;

}

/********************************************************************

函 数 名:display( )

功    能:写显存

说    明 连续地址写模式

入口参数:无

返 回 值:无  

设    计:                      日    期:

修    改:                      日    期:

***********************************************************************/

void display(void)

{

  unsigned char t;

  PORTB &=~CS;

  PORTB &=~WR;

  send_data(0b10100000,3);/*送3位WRITE 模式命令代码101*/

  send_data(0,6);/*送6位首地址00h*/

  for(t=0;t<=15;t++)

  {

   send_data(TAB_DISPLAY[t],word_long);/*送16*8显存数据*/

  }

  PORTB |=CS;

  PORTB |=WR;

}

/********************************************************************

函 数 名:send_data(data_bus,loop)

功    能:数据传送

说    明  (内部函数)

入口参数:待传数,待传数的位数

返 回 值:无  

设    计:                      日    期:

修    改:                      日    期:

***********************************************************************/

void send_data(unsigned char data_bus,unsigned char loop)



{

  for(;loop!=0;loop--)

  {

   delay();

   PORTB &=WR;

   if((data_bus&0b10000000)==0)

   {

    PORTB &=~DATA;

   }

   else

   {

    PORTB |=DATA;

   }

   data_bus=data_bus<<1;

   PORTB |=WR;

  }

  

}

//****************************************************************

void main(void)

{

  DDRB =0XFF;

  PORTB =0XFF;

  display_start( );

  while(1)

  {

   display( );

  }

}

//****************************************************************/
-----此内容被xky183于2005-03-04,20:03:35编辑过

出0入0汤圆

 楼主| 发表于 2005-3-4 13:34:42 | 显示全部楼层
HT1621的datasheet,和网上找的一个应用例子



点击此处打开armok0139902.pdf

点击此处打开armok0139903.pdf

出0入0汤圆

发表于 2005-3-4 15:25:33 | 显示全部楼层
void send_data(unsigned char data_bus,unsigned char loop)



{

  for(;loop!=0;loop--)

  {

   dlay();

   PORTB &=WR;     //是不是要改成 =>  PORTB &=~WR;   

                   //

//没详细看程序,再PIC上可以的,再M8上一定可以的.

出0入0汤圆

 楼主| 发表于 2005-3-4 18:56:06 | 显示全部楼层
谢谢楼上的指教

这里确实是我移植的时候的失误,但是修改后还是有问题,还是不显示

出0入0汤圆

 楼主| 发表于 2005-3-4 20:01:02 | 显示全部楼层
问题解决了

等我整理好了就上传详细的资料和调试过程

希望对别人用到的时候少走弯路
-----此内容被xky183于2005-03-04,20:04:51编辑过
头像被屏蔽

出0入0汤圆

发表于 2005-3-4 20:32:15 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2005-3-5 15:47:45 | 显示全部楼层
检查一下管脚定义,我的HT1621可以正常工作!

出0入0汤圆

发表于 2005-4-22 15:56:30 | 显示全部楼层
phantompaul 能否把你的HT1621的程序贴出来呀,谢谢

xky183 现在的这个程序是否是测试好使的程序呀 谢谢

出0入0汤圆

发表于 2005-4-22 16:19:15 | 显示全部楼层
注意硬件时序的时间要求,如建立时间 保持时间

avr速度比较快

出0入0汤圆

发表于 2005-4-22 16:23:16 | 显示全部楼层
这是我写的,在HOLTEK ht49r30a-1调试通过.



//THIS PROGRAM IS HT1621 (32*4)LCD DISPLAY

#ifndef _HT1621_H

#define _HT1621_H



/* HT1621 mode */



#define         READ                 0xC0        // Read operation --110

#define         WRITE                 0xA0        // Write operation -- 101

#define         R_M_W                0xA0         // Read-modify-write operation -- 101

#define         COMMAND                0x80         // Command operation -- 100



#define         MODE                 3

#define         CMD                        9

#define         ADDR                6





/* HT1621 command definiton */

#define         SYS_DIS         0x00         // Turn off both system oscillatior and LCD bias generator. default

#define         SYS_EN                 0x01         // Turn on system oscillator

#define         LCD_OFF         0x02         // Turn off LCD bias generator. default

#define         LCD_ON                 0x03         // Turn on LCD bias generator

#define         TIMER_DIS         0x04         // Disable time base output

#define         WDT_DIS         0x05         // Disable WDT time-out flag output

#define         TIMER_EN         0x06         // Enable time base output

#define         WDT_EN                 0x07         // Enable WDT time-out flag output

#define         TONE_OFF         0x08         // Turn off tone outputs. default

#define         TONE_ON         0x09         // Turn on tone output

#define         CLR_TIMER         0x0C         // Clear the contents of time base generator

#define         CLR_WDT         0x0E         // Clear the contents of WDT stage

#define         XTAL_32K         0x14         // System clock source, crystal oscillator

#define         RC_256K         0x18         // System clock source, on-chip RC oscillator. default

#define         EXT_256K         0x1C         // System clock source, external clock source

#define         BIAS22                 0x20         // LCD 1/2 bias, 2 commons option

#define         BIAS23                 0x24         // LCD 1/2 bias, 3 commons option

#define         BIAS24                 0x28         // LCD 1/2 bias, 4 commons option

#define         BIAS32                 0x21         // LCD 1/3 bias, 2 commons option

#define         BIAS33                 0x25         // LCD 1/3 bias, 3 commons option

#define         BIAS34                 0x29         // LCD 1/3 bias, 4 commons option

#define         TONE_4K         0x40         // Tone frequency, 4KHZ

#define         TONE_2K         0x60         // Tone frequency, 2KHz

#define         IRQ_DIS         0x80         // Disable IRQ output. default

#define         IRQ_EN                 0x88         // Enable IRQ output

#define         F1                 0xA0         // Time base/WDT clock output:1Hz, The WDT time-out flag after:4s

#define         F2                 0xA1         // Time base/WDT clock output:2Hz, The WDT time-out flag after:2s

#define         F4                 0xA2         // Time base/WDT clock output:4Hz, The WDT time-out flag after:1s

#define         F8                 0xA3         // Time base/WDT clock output:8Hz, The WDT time-out flag after:1/2s

#define         F16                0xA4         // Time base/WDT clock output:16Hz, The WDT time-out flag after:1/4s

#define         F32                0xA5         // Time base/WDT clock output:32Hz, The WDT time-out flag after:1/8s

#define         F64                0xA6         // Time base/WDT clock output:64Hz, The WDT time-out flag after:1/16s

#define         F128                0xA7         // Time base/WDT clock output:128Hz, The WDT time-out flag after:1/32s. default

#define         NORMAL                 0xE3         // Normal mode. default





/* I/O definition for HT1621 */

/*

#ifdef HT1621

#define         HT1621_CS         RB1        

#define         HT1621_RD         RB2

#define         HT1621_WR        RB3

#define         HT1621_DATA         RB4

#endif

*/



/*

//================================================================

void WriteMode(unsigned char mode)

{

        unsigned char i;

       

        for(i=3; i>0; i--)

        {

                HT1621_WR=0;

                if(mode & 0x80) HT1621_DATA=1;

                else HT1621_DATA=0;

                mode <<=1;                 //MSB first

                NOP();

                HT1621_WR=1;

                NOP();

                NOP();

                NOP();

                NOP();

                }

       

        }



//================================================================

void WriteCmd(unsigned char cmd)

{

        unsigned char i;

        for(i=9; i>0; i--)

        {

                HT1621_WR=0;

                if(cmd & 0x80) HT1621_DATA=1;

                else HT1621_DATA=0;

                cmd <<=1;                 //MSB first

                NOP();

                HT1621_WR=1;

                NOP();

                NOP();

                NOP();

                NOP();

                }

       

        }



//================================================================

void WriteAdr(unsigned char adr)

{

        unsigned char i;

        for(i=6; i>0; i--)

        {

                HT1621_WR=0;

                if(adr & 0x80) HT1621_DATA=1;

                else HT1621_DATA=0;

                adr <<=1;                 //MSB first

                NOP();

                HT1621_WR=1;

                NOP();

                NOP();

                NOP();

                NOP();               

                }

        }

*/

//================================================================

void _1621Write(unsigned char value,unsigned char TYPE)

{

        unsigned char i;

        for(i=TYPE; i>0; i--)

        {

                HT1621_WR=0;

                if(value & 0x80) HT1621_DATA=1;

                else HT1621_DATA=0;

                value <<=1;                 //MSB first

                NOP();

                HT1621_WR=1;

                NOP();

                NOP();

                NOP();

                NOP();               

                }

        }

//================================================================

void WriteData(unsigned char dat)

{

        unsigned char i;

       

        for(i=4; i>0; i--)

        {

                HT1621_WR=0;

                if(dat & 0x01) HT1621_DATA=1;

                else HT1621_DATA=0;

                dat >>=1;                 //MSL first

                NOP();

                HT1621_WR=1;

                NOP();

                NOP();

                NOP();

                NOP();       

                }

        }       



//================================================================

unsigned char ReadByte(void)

{

        unsigned char i;

        unsigned char value;

       

        for(i=4; i>0; i--)

        {

                HT1621_RD=0;

                value >>=1;         //MSL first

                if(HT1621_DATA) value |= 0x80;

                NOP();

                HT1621_RD=1;

                NOP();

                NOP();

                NOP();

                NOP();

                }

        value = (value >>4) & 0x0f;

        return (value);

        }



//==================================================================

unsigned char HT1621Read(unsigned char adr)

{

        unsigned char dt;

       

        _1621Write(READ,MODE);

        _1621Write(adr,ADDR);

        //HT1621_WR=1;

        dt=ReadByte();

        return dt;

        }

//==================================================================

void HT1621ReadN(unsigned char StartAdr, unsigned char        *p, unsigned char n)

{

        unsigned char i;

       

        HT1621_CS=0;

        _1621Write(READ,MODE);

        _1621Write(StartAdr,ADDR);

        for(i=n; i>0; i--)

        {

                p=ReadByte();                                        

                }

        HT1621_CS=1;

       

        }

//==================================================================

void HT1621Write(unsigned char adr, unsigned char dat)

{

        _1621Write(WRITE,MODE);

        _1621Write(adr,ADDR);

        WriteData(dat);

        }



//===================================================================



void HT1621WriteN(unsigned char StartAdr, unsigned char *p, unsigned char n)

{

        unsigned char i;

       

        HT1621_CS=0;

        _1621Write(WRITE,MODE);

        _1621Write(StartAdr,ADDR);

        for(i=n; i>0; i--)

        {

                WriteData(p[1]);

                }

        HT1621_CS=1;

        }



void HT1621Init(unsigned char StartAdr, unsigned char n)

{

        unsigned char i;

       

        HT1621_CS=0;

        _1621Write(WRITE,MODE);

        _1621Write(StartAdr,ADDR);

        for(i=n; i>0; i--)

        {

                WriteData(0x00);

                }

        HT1621_CS=1;



}

//====================================================================

void Read_Mod_Write(unsigned char adr,unsigned char dt)

{

        unsigned char value;

       

        _1621Write(WRITE,MODE);

        _1621Write(adr,ADDR);

        value=ReadByte();

        if(value != dt)

        {

                WriteData(dt);

                }

        }



//=====================================================================

void HT1621Comm(unsigned char cmd)

{

        _1621Write(COMMAND,MODE);

        _1621Write(cmd,CMD);

        }



#endif

//End define _HT1621_H







#include "ht49r30a-1.h"

//#include <pic.h>



#define         HT1621_CS                 _pa0       

#define         HT1621_RD                 _pa1

#define         HT1621_WR                _pa2

#define         HT1621_DATA         _pa3



#define         NOP()                        _nop()



#include "HT1621.h"



const unsigned char LcdDig[]={0xf3, 0x60, 0xb5, 0xf4, 0x66, 0xd6, 0xd7, 0x72, 0xF7, 0xF6};

                              //  0,  1,     2,    3,    4,    5,   6,     7,    8,   9

const unsigned char Fan_Led[]={0x01, 0x03, 0x07, 0x0f};

                              //Low,  Mid,  High, Auot

                              //STB,  OPER, ESF,  Backlight_Green ;address at 0x08-0x0b

                              //BK_Red, Timer, Filter             ;address at 0x0C-0x0e

                                     

#define         LOW_FAN                0x7F                //Display Low  fan constant

#define         MID_FAN                0xBF                //Display Mid fan constant

#define         HIGH_FAN        0xDF                //Display Hiht fan constant

#define         AUTO_FAN         0xEF                //Display Auto fan constant



#define         DISP_C                 0xEF                //Temperature display constant



#define         STB_LED                0x7F

#define         OPER_LED        0xBF

#define         ESF_LED         0xDF

#define         BK_GREEN         0xEF

#define         BK_RED                0x7F

#define         TIMER_LED        0xBF

#define         FILTER_LED         0xDF





#define         Dig0_StartAdr         (0x02<<2)                //Address from 0x02 to 0x03

#define         Dig1_StartAdr         (0x04<<2)                //Address from 0x04 to 0x05

#define         Fan_Adr                 (0x00<<2)                //Address at 0x00

#define         F_Adr                         (0x00)

#define         Disp_C_Adr                (0x04<<2)

#define         Led_Start_Adr         (0x08<<2)                //







void delayms(unsigned int n)

{

        unsigned int i,j;

        for(i=65000; i>0; i--)

        {

                for(j=65000; j>0; j--)

                {

                for(; n>0; n--)

                ;

                }

        }



}

void IOInit(void)

{

       

        }

       





void main(void)

{

               

        IOInit();

        delayms(1000);

        HT1621_CS=0;

        _1621Write(COMMAND,MODE);

        _1621Write(SYS_DIS,CMD);

        _1621Write(LCD_OFF,CMD);

        HT1621_CS=1;

        delayms(1000);

        HT1621Init(0, 15);

        HT1621_CS=0;

        _1621Write(COMMAND,MODE);

        _1621Write(SYS_EN,CMD);

        _1621Write(LCD_ON,CMD);

        _1621Write(RC_256K,CMD);

        _1621Write(BIAS34,CMD);

        HT1621_CS=1;

        while(1)

        {

                unsigned char i,j;

                unsigned char temp;

                HT1621_CS=0;

                for(j=0,i=0; i<10; i++)

                {

                        HT1621_CS=0;

                        HT1621Write(Dig0_StartAdr,LcdDig);

                        HT1621_CS=1;

                        temp = LcdDig>>4;

                        HT1621_CS=0;

                        HT1621Write((Dig0_StartAdr+(1<<2)),temp);

                        HT1621_CS=1;

                       

                        NOP();

                        HT1621_CS=0;

                        HT1621Write(Dig1_StartAdr,LcdDig);

                        HT1621_CS=1;

                        temp = LcdDig>>4;

                        HT1621_CS=0;

                        HT1621Write((Dig1_StartAdr+(1<<2)),temp);

                        HT1621_CS=1;

                       

                        if(i >4) j=0;

                        if(j > 4) j=0;

                        HT1621_CS=0;

                        //HT1621Write((Led_Start_Adr+(i<<2)),Fan_Led[j]);

                        HT1621Write(Fan_Adr,Fan_Led[j]);

                       

                        HT1621_CS=1;

                        j++;

                        delayms(65000);

                        }

                HT1621_CS=0;       

                HT1621Write(Disp_C_Adr, DISP_C);

                HT1621_CS=1;

                }

        }

出0入0汤圆

发表于 2009-2-23 17:10:19 | 显示全部楼层
MARK,学习了!!!

出0入0汤圆

发表于 2012-5-24 14:48:56 | 显示全部楼层
MARK MARK MARK

出0入0汤圆

发表于 2012-12-17 20:13:52 | 显示全部楼层
MARK一下,明天再继续研究

出0入0汤圆

发表于 2013-9-12 17:46:54 | 显示全部楼层
正需要..............

出0入0汤圆

发表于 2013-9-22 10:42:36 | 显示全部楼层
看看……

出0入0汤圆

发表于 2013-9-22 11:12:43 | 显示全部楼层
同样想知道这个怎么实现,有经验的给介绍下 给个思路也可以

出0入0汤圆

发表于 2013-12-24 15:51:12 | 显示全部楼层
学习了,但是俺的ht1621死活读不出数据。

出0入0汤圆

发表于 2015-9-23 15:39:42 | 显示全部楼层
标记,准备学习~

出0入0汤圆

发表于 2017-9-14 23:07:59 | 显示全部楼层
korren 发表于 2005-4-22 16:23
这是我写的,在HOLTEK ht49r30a-1调试通过.



//THIS PROGRAM IS HT1621 (32*4)LCD DISPLAY

参考一下。谢谢分享
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-19 17:11

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表