|
发表于 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;
}
} |
|