ht1621之arduino及stm8驱动

来源:互联网 发布:恋人网软件可信么 编辑:程序博客网 时间:2024/06/05 06:43
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开发板源码的修改。
原创粉丝点击