ht1621之arduino及stm8驱动

arduino驱动:

// Pin 13 has an LED connected on most Arduino boards.

// give it a name:

int led = 13;

//HT1621驱动 pdc0173 PDC-TD0173

int CS =7 ;

int WR = 6;

int DATA =5 ;

int GND = 4;

int VCC = 3;

//#define sbi(x, y)  (x |= (1 << y))

//#define cbi(x, y)  (x &= ~(1 <<y ))

//#define  ComMode    0x52  //0x52 4COM,1/3bias  1000    010 1001  0   0x48 //0b1000 0100 1000 1/2duty 3com

//#define  RCosc      0x30  //内部RC振荡器(上电默认)1000 0011 0000

//#define  LCD_on     0x06  //打开LCD 偏压发生器1000     0000 0 11 0

//#define  LCD_off    0x04  //关闭LCD显示

//#define  Sys_en     0x02  //系统振荡器开 1000   0000 0010

//#define  CTRl_cmd   0x80  //写控制命令

//#define  Data_cmd   0xa0  //写数据命令

//#define WDTDIS      0X0A  //0b1000 0000 1010  禁止看门狗

//#define SYSDIS      0X00  //0b1000 0000 0000  关振系统荡器和LCD偏压发生器

//


//HT1621指令

#define  BIAS     0x52             //0b1000 0101 0010  1/3duty 4com

#define  SYSDIS   0X00             //0b1000 0000 0000  关振系统荡器和LCD偏压发生器

#define  SYSEN    0X02             //0b1000 0000 0010 打开系统振荡器

#define  LCDOFF   0X04             //0b1000 0000 0100  关LCD偏压

#define  LCDON    0X06             //0b1000 0000 0110  打开LCD偏压

#define  XTAL     0x28             //0b1000 0010 1000 外部接时钟

#define  RC256    0X30             //0b1000 0011 0000  内部时钟

#define  WDTDIS1  0X0A            //0b1000 0000 1010  禁止看门狗



#define WR0       digitalWrite(WR,LOW)   //拉低

#define WR1     digitalWrite(WR,HIGH)    //拉高

#define CS0     digitalWrite(CS,LOW)  //拉低

#define CS1     digitalWrite(CS,HIGH)  //拉高

#define DATA1    digitalWrite(DATA,HIGH)     //数据位

#define DATA0    digitalWrite(DATA,LOW)      //数据位



//定义要显示的值

unsigned int counter=7777;

unsigned int tmp;

unsigned int n1, n2, n3, n4;

unsigned char Ht1621Tab[]={0x00,0x00,0x00,0x00};


//                         0    1    2    3    4    5    6    7    8    9    三   A     B     C    D    E    F

unsigned char DispTab[]={0xEB,0x0A,0xAD,0x8F,0x4E,0xC7,0xE7,0x8A,0xEF,0xCF,0x85,0xEE, 0x67, 0xE1,0x2F,0xE5,0xE4};



 boolean ledFlog = false;

// the setup routine runs once when you press reset:

void setup() {               

  // initialize the digital pin as an output.

  pinMode(led, OUTPUT);   

  pinMode(CS,OUTPUT); 

  pinMode(WR,OUTPUT); 

  pinMode(DATA,OUTPUT);

  pinMode(VCC,INPUT);

  pinMode(GND,INPUT);



  delay(10);

  Ht1621_Init();        //上电初始化LCD

  delay(100);           //延时一段时间

  Ht1621WrAllData(0,Ht1621Tab,16);// Clear LCD display

  data_convertor(1150);

  Display();

  Display_lcd_dot();

}

// the loop routine runs over and over again forever:

void loop() {


   delay(1000);

   ledFlog = !ledFlog;

   if(ledFlog)

   {

     digitalWrite(led,HIGH);      //数据位

   }else{

     digitalWrite(led,LOW);      //数据位

   }


}

// Name: Init_1621(初始化1621)


void Ht1621_WR_1()

{

  WR1;

}

void Ht1621_WR_0()

{

  WR0;

}

void Ht1621_CS_0()

{

  CS0;

}

void Ht1621_CS_1()

{

  CS1;

}

void Ht1621_DAT_1()

{

  DATA1;

}

void Ht1621_DAT_0()

{

  DATA0;

}

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

****函数名称:

****函数功能:1621写数据函数

****版本:V1.0

****日期:14-2-2014

****入口参数:Data-要发送的数据  cnt-要发送的数据位数

****出口参数:

****说明:

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

void Ht1621Wr_Data(unsigned char Data,unsigned char cnt)

{

  unsigned char i;

  for (i=0;i<cnt;i++)

   {

     Ht1621_WR_0();

     if((Data & 0x80)==0x80)

        {Ht1621_DAT_1();}

     else

        {Ht1621_DAT_0();}

     Ht1621_WR_1();

     Data<<=1;

   }

}

// Name: SendCmd(送命令)

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

****函数名称:

****函数功能:1621写指令函数

****版本:V1.0

****日期:14-2-2014

****入口参数:Cmd 命令

****出口参数:

****说明:

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

void Ht1621WrCmd(unsigned char Cmd)

{

   Ht1621_CS_0();

   Ht1621Wr_Data(0x80,4);          //写入命令标志100

   Ht1621Wr_Data(Cmd,8);           //写入命令数据

   Ht1621_CS_1();

}


//Name: SendBit_1621(送数据程序)

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

****函数名称:

****函数功能:1621写一个数据函数

****版本:V1.0

****日期:14-2-2014

****入口参数:Addr--地址 Data--数据

****出口参数:

****说明:

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

void Ht1621WrOneData(unsigned char Addr,unsigned char Data)

{

  Ht1621_CS_0();

  Ht1621Wr_Data(0xa0,3);  //写入数据标志101

  Ht1621Wr_Data(Addr<<2,6); //写入地址数据

  Ht1621Wr_Data(Data,4); //写入数据的前四位 7  6  5  4

  Ht1621_CS_1();

  delay(10);



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

****函数名称:

****函数功能:1621写整屏数据函数

****版本:V1.0

****日期:14-2-2014

****入口参数:Addr--地址 p--数据  cnt数据个数

****出口参数:

****说明:

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

void Ht1621WrAllData(unsigned char Addr,unsigned char *p,unsigned char cnt)

{

  unsigned char i;

  Ht1621_CS_0();

  Ht1621Wr_Data(0xa0,3); //写入数据标志101

  Ht1621Wr_Data(Addr<<2,6); //写入地址数据

  for (i=0;i<cnt;i++)

   {

    Ht1621Wr_Data(*p,8); //写入数据

    p++;

   }

  Ht1621_CS_1();

}


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

****函数名称:

****函数功能:1621初始化函数

****版本:V1.0

****日期:14-2-2014

****入口参数:

****出口参数:

****说明:

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

void Ht1621_Init(void)

{

   Ht1621WrCmd(BIAS);

   Ht1621WrCmd(RC256);             //使用内部振荡器

   //Ht1621WrCmd(XTAL);             //使用外部振荡器

   Ht1621WrCmd(SYSDIS);

   Ht1621WrCmd(WDTDIS1);

   Ht1621WrCmd(SYSEN);

   Ht1621WrCmd(LCDON);

}

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

****函数名称:

****函数功能:1621显示函数

****版本:V1.0

****日期:14-2-2014

****入口参数:

****出口参数:

****说明:

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

void Display(void)

{


   Ht1621WrOneData(0 , DispTab[n4]);

   Ht1621WrOneData(1 , DispTab[n4]<<4);


   Ht1621WrOneData(2 , DispTab[n3]);

   Ht1621WrOneData(3 , DispTab[n3]<<4);


   Ht1621WrOneData(4 , DispTab[n2]);

   Ht1621WrOneData(5 , DispTab[n2]<<4);


   Ht1621WrOneData(6 , DispTab[n1]);

   Ht1621WrOneData(7 , DispTab[n1]<<4);


}


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

****函数名称:

****函数功能:显示符号函数

****版本:V1.0

****日期:14-2-2014

****入口参数:Addr--地址 Data--数据

****出口参数:

****说明:

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

void Display_lcd_dot(void)

{

  Ht1621WrOneData(0 , DispTab[n4]|0x10);//P1

   //Ht1621WrOneData(2 , DispTab[n3]|0x10);    //2P

   //Ht1621WrOneData(4 , DispTab[n2]|0x10);    //3P

   //Ht1621WrOneData(6 , DispTab[n1]|0x10);    //4P

}

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

****函数名称:

****函数功能:数据转换函数

****版本:V1.0

****日期:14-2-2014

****入口参数:adc_value-需要转换的数值

****出口参数:

****说明:

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

void data_convertor(unsigned long adc_value)

{  

    tmp=adc_value;         //adc

    n4=tmp/1000;

    tmp=tmp%1000;

    n3=tmp/100;

    tmp=tmp%100;

    n2=tmp/10;

    tmp=tmp%10;

    n1=tmp;

 }


STM8驱动:

#include "stm8s.h"

#include "driver/led.h"

//定义要显示的值

unsigned int counter=7777;


unsigned int tmp;

unsigned int n1, n2, n3, n4;

unsigned char Ht1621Tab[]={0x00,0x00,0x00,0x00};

unsigned char DispTab[]={0xEB,0x0A,0xAD,0x8F,0x4E,0xC7,0xE7,0x8A,0xEF,0xCF,0x85,0xEE, 0x67, 0xE1,0x2F,0xE5,0xE4};

              //          0    1    2    3    4    5    6    7    8    9    三   A     B     C    D    E    F

//HT1621指令

#define  BIAS     0x52             //0b1000 0101 0010  1/3duty 4com 

#define  SYSDIS   0X00             //0b1000 0000 0000  关振系统荡器和LCD偏压发生器

#define  SYSEN    0X02             //0b1000 0000 0010 打开系统振荡器

#define  LCDOFF   0X04             //0b1000 0000 0100  关LCD偏压

#define  LCDON    0X06             //0b1000 0000 0110  打开LCD偏压

#define  XTAL     0x28             //0b1000 0010 1000 外部接时钟

#define  RC256    0X30             //0b1000 0011 0000  内部时钟

#define  WDTDIS1  0X0A            //0b1000 0000 1010  禁止看门狗


//模块接口定义

#define Ht1621_CS_PORT (GPIOE)

#define Ht1621_CS_PIN  (GPIO_PIN_5)


#define Ht1621_WR_PORT (GPIOC)

#define Ht1621_WR_PIN  (GPIO_PIN_1)


#define Ht1621_DAT_PORT (GPIOC)

#define Ht1621_DAT_PIN  (GPIO_PIN_3)


#define Ht1621_GND_PORT (GPIOC)

#define Ht1621_GND_PIN  (GPIO_PIN_6)


#define Ht1621_VCC_PORT (GPIOC)

#define Ht1621_VCC_PIN  (GPIO_PIN_5)

//基础操作定义

void Ht1621_CS_0() { GPIO_Init(Ht1621_CS_PORT, Ht1621_CS_PIN, GPIO_MODE_OUT_PP_LOW_FAST);}  // 

void Ht1621_CS_1() { GPIO_Init(Ht1621_CS_PORT, Ht1621_CS_PIN, GPIO_MODE_OUT_PP_HIGH_FAST);}


void Ht1621_WR_0() { GPIO_Init(Ht1621_WR_PORT, Ht1621_WR_PIN, GPIO_MODE_OUT_PP_LOW_FAST);}  // 

void Ht1621_WR_1() { GPIO_Init(Ht1621_WR_PORT, Ht1621_WR_PIN, GPIO_MODE_OUT_PP_HIGH_FAST);}


void Ht1621_DAT_0() { GPIO_Init(Ht1621_DAT_PORT, Ht1621_DAT_PIN, GPIO_MODE_OUT_PP_LOW_FAST);}  // 

void Ht1621_DAT_1() { GPIO_Init(Ht1621_DAT_PORT, Ht1621_DAT_PIN, GPIO_MODE_OUT_PP_HIGH_FAST);}


void Ht1621_GND_0() { GPIO_Init(Ht1621_GND_PORT, Ht1621_GND_PIN, GPIO_MODE_OUT_PP_LOW_SLOW);}  //

void Ht1621_GND_1() { GPIO_Init(Ht1621_GND_PORT, Ht1621_GND_PIN, GPIO_MODE_OUT_PP_HIGH_FAST);}


void Ht1621_VCC_0() { GPIO_Init(Ht1621_VCC_PORT, Ht1621_VCC_PIN, GPIO_MODE_OUT_PP_LOW_FAST);}  //

void Ht1621_VCC_1() { GPIO_Init(Ht1621_VCC_PORT, Ht1621_VCC_PIN, GPIO_MODE_OUT_PP_HIGH_SLOW);}


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

****函数名称:

****函数功能:延时函数

****版本:V1.0

****日期:14-2-2014

****入口参数:需要延时的数目

****出口参数:无

****说明:

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

void Delay(uint16_t nCount)

{

  while (nCount != 0)

  {   

    nCount--;

  }

}

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

****函数名称:

****函数功能:1621写数据函数

****版本:V1.0

****日期:14-2-2014

****入口参数:Data-要发送的数据  cnt-要发送的数据位数

****出口参数:

****说明:

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

void Ht1621Wr_Data(unsigned char Data,unsigned char cnt) 

  unsigned char i; 

  for (i=0;i<cnt;i++) 

   {   

     Ht1621_WR_0(); 

     if((Data & 0x80)==0x80) 

        {Ht1621_DAT_1();}

     else 

        {Ht1621_DAT_0();}

     Ht1621_WR_1(); 

     Data<<=1; 

   } 

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

****函数名称:

****函数功能:1621写指令函数

****版本:V1.0

****日期:14-2-2014

****入口参数:Cmd 命令

****出口参数:

****说明:

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

void Ht1621WrCmd(unsigned char Cmd) 

   Ht1621_CS_0(); 

   Ht1621Wr_Data(0x80,4);          //写入命令标志100

   Ht1621Wr_Data(Cmd,8);           //写入命令数据

   Ht1621_CS_1(); 

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

****函数名称:

****函数功能:1621写一个数据函数

****版本:V1.0

****日期:14-2-2014

****入口参数:Addr--地址 Data--数据

****出口参数:

****说明:

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

void Ht1621WrOneData(unsigned char Addr,unsigned char Data)

{

  Ht1621_CS_0();

  Ht1621Wr_Data(0xa0,3);  //写入数据标志101

  Ht1621Wr_Data(Addr<<2,6); //写入地址数据

  Ht1621Wr_Data(Data,4); //写入数据的前四位 7  6  5  4

  Ht1621_CS_1();

}

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

****函数名称:

****函数功能:1621写整屏数据函数

****版本:V1.0

****日期:14-2-2014

****入口参数:Addr--地址 p--数据  cnt数据个数

****出口参数:

****说明:

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

void Ht1621WrAllData(unsigned char Addr,unsigned char *p,unsigned char cnt)

{

  unsigned char i;

  Ht1621_CS_0();

  Ht1621Wr_Data(0xa0,3); //写入数据标志101

  Ht1621Wr_Data(Addr<<2,6); //写入地址数据

  for (i=0;i<cnt;i++)

   {

    Ht1621Wr_Data(*p,8); //写入数据

    p++;

   }

  Ht1621_CS_1();

}

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

****函数名称:

****函数功能:1621初始化函数

****版本:V1.0

****日期:14-2-2014

****入口参数:

****出口参数:

****说明:

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

void Ht1621_Init(void

   Ht1621WrCmd(BIAS); 

   Ht1621WrCmd(RC256);             //使用内部振荡器

   //Ht1621WrCmd(XTAL);             //使用外部振荡器

   Ht1621WrCmd(SYSDIS); 

   Ht1621WrCmd(WDTDIS1); 

   Ht1621WrCmd(SYSEN); 

   Ht1621WrCmd(LCDON); 

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

****函数名称:

****函数功能:1621显示函数

****版本:V1.0

****日期:14-2-2014

****入口参数:

****出口参数:

****说明:

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

void Display(void

 

   Ht1621WrOneData(0 , DispTab[n4]);

   Ht1621WrOneData(1 , DispTab[n4]<<4);


   Ht1621WrOneData(2 , DispTab[n3]);

   Ht1621WrOneData(3 , DispTab[n3]<<4);

   

   Ht1621WrOneData(4 , DispTab[n2]);

   Ht1621WrOneData(5 , DispTab[n2]<<4);

  

   Ht1621WrOneData(6 , DispTab[n1]); 

   Ht1621WrOneData(7 , DispTab[n1]<<4); 

   

}

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

****函数名称:

****函数功能:显示符号函数

****版本:V1.0

****日期:14-2-2014

****入口参数:Addr--地址 Data--数据

****出口参数:

****说明:

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

void Display_lcd_dot(void

  Ht1621WrOneData(0 , DispTab[n4]|0x10);//P1

   //Ht1621WrOneData(2 , DispTab[n3]|0x10);    //2P

   //Ht1621WrOneData(4 , DispTab[n2]|0x10);    //3P

   //Ht1621WrOneData(6 , DispTab[n1]|0x10);    //4P

}

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

****函数名称:

****函数功能:数据转换函数

****版本:V1.0

****日期:14-2-2014

****入口参数:adc_value-需要转换的数值

****出口参数:

****说明:

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

void data_convertor(unsigned long adc_value) 

{  

    tmp=adc_value;         //adc 

    n4=tmp/1000;

    tmp=tmp%1000;

    n3=tmp/100;

    tmp=tmp%100;

    n2=tmp/10;

    tmp=tmp%10;

    n1=tmp; 

 }

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

****函数名称:

****函数功能:主函数

****版本:V1.0

****日期:14-2-2014

****入口参数:无

****出口参数:无

****说明:

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

void main(void)

{

  LED_Init(LED1|LED2|LED3);

  LED_On(LED1|LED2|LED3);

  Delay(0xFFFF);

  LED_Off(LED1|LED2|LED3);

  Delay(0xFFFF);

  

  

  Ht1621_GND_0();       //HT1621 power on

  Ht1621_VCC_1();

  Delay(100);           //延时一段时间

  Ht1621_Init();        //上电初始化LCD

  Delay(100);           //延时一段时间

  Ht1621WrAllData(0,Ht1621Tab,16);// Clear LCD display 

  data_convertor(1150);

  Display();

  Display_lcd_dot();

  

  while (1)

  {

   

  }

  

}




/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/


stm8的代码来自我买的stm8开发板提供的源码。
arduino部分来自我对stm8开发板源码的修改。
### 回答1: Arduino HT1621 是一种常见的驱动芯片,用于控制七段数码管和液晶显示屏等输出设备。它具有高压产生器和时钟发生器等功能模块,可以方便地实现对显示设备的控制。 Arduino HT1621 被广泛应用于各种电子产品中,比如温度计、计时器、电子钟等。通过与Arduino开发板上的MCU(微控制器单元)进行通信,可以方便地实现对显示设备的控制和数据显示。 HT1621 芯片采用SPI通信协议,其通信速度较快。由于它具有多个引脚,可以与其他元器件进行连接,比如键盘矩阵、电压检测等。这样可以实现更多的功能扩展,增加了产品的灵活性和可变性。 Arduino HT1621的编程相对简单,可以使用Arduino的编程语言和开发工具进行开发。通过编写代码,可以实现各种功能,比如显示数字、字母和符号等。 总之,Arduino HT1621 是一种功能强大、使用方便的驱动芯片,广泛应用于各种产品中。通过它,可以实现对七段数码管和液晶显示屏等显示设备的控制,为电子产品的开发提供了方便和灵活性。 ### 回答2: Arduino HT1621是一种数字式时钟驱动芯片,可以用于控制7段LED数字管或液晶显示屏的显示。它通过串行通信与主控板(如Arduino)进行连接,并通过编程控制数字的显示方式。 HT1621芯片内部有多个寄存器,可以存储要显示的数字和字母的位图信息。我们可以通过设置寄存器中的位来控制每个LED的亮灭状态,从而实现数字显示。 使用Arduino HT1621时,我们首先需要将HT1621Arduino连接起来。通过4条线(数据线、时钟线、片选线和复位线)连接,将两者进行通信。然后,通过编程来控制HT1621,发送相应的命令和位图数据,使其显示我们想要的数字。 在Arduino程序中,我们可以使用相应的库函数进行HT1621的初始化和控制。例如,可以使用“HT1621B.begin()”进行HT1621的初始化设置,然后使用“HT1621B.writeData()”来写入要显示的数字的位图信息。 除了显示数字,HT1621还可以显示字母、符号等其他信息。我们可以通过设置相应的位图信息来实现。一些常见的使用场景包括数字时钟、计时器、温度计等。在编程过程中,我们可以根据具体应用的需求来设计相应的显示方式和效果。 总之,Arduino HT1621是一种方便实用的数字显示驱动芯片,可以与Arduino等主控板进行连接,通过编程控制显示数字和其他信息。它的使用方式简单灵活,适用于各种数字显示应用。 ### 回答3: Arduino HT1621 是一种特定的集成电路(IC),它是一种用于驱动液晶显示屏的控制器。它具有多种功能,可以用于控制数字液晶显示屏的各种操作。 Arduino HT1621 IC 的引脚配置较为简单,只有8个引脚。这意味着它可以轻松地与Arduino单片机板连接,实现数字屏幕的控制。 使用Arduino HT1621,我们可以轻松实现数字液晶显示屏的各种功能。可以通过Arduino编程语言和相应的库函数来控制显示屏上的数字、字符、图标等元素的显示和更新。 例如,我们可以使用Arduino HT1621控制显示屏上的数字图案或字符的亮度和对比度。借助HT1621的控制能力,我们还可以实现液晶屏上的图标的显示和滚动效果。 此外,Arduino HT1621还具有电源管理功能,能够进行节能和电池寿命管理。我们可以通过编程设置液晶显示器的亮度和自动关闭功能,以延长电池的使用寿命。 总之,Arduino HT1621 提供了一个简单而强大的解决方案,用于控制数字液晶显示屏。通过与Arduino单片机的连接,我们可以通过编程来实现各种液晶屏上的显示效果和功能。无论是制作自己的数字时钟、温度计、电压表等项目,还是设计和制作专业应用的液晶屏驱动器,Arduino HT1621都是一个非常有用的电路控制器。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值