ht1621之arduino及stm8驱动

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ht1621之arduino及stm8驱动相关的知识,希望对你有一定的参考价值。


arduino驱动:

// Pin 13 has an LED connected on most Arduino
// give it a name:
int
//HT1621驱动 pdc0173 PDC-TD0173
int
int
int
int
int
//#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
unsigned int tmp;
unsigned int
unsigned char

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


boolean ledFlog = false;
// the setup routine runs once when you press reset:
void
// 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);
//上电初始化LCD
//延时一段时间
// Clear LCD display
data_convertor(1150);
Display();
Display_lcd_dot();

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

delay(1000);
ledFlog = !ledFlog;
if(ledFlog)

//数据位
else
//数据位



// Name: Init_1621(初始化1621)

void

WR1;

void

WR0;

void

CS0;

void

CS1;

void

DATA1;

void

DATA0;

/*******************************************************************************
****函数名称:
****函数功能:1621写数据函数
****版本:V1.0
****日期:14-2-2014
****入口参数:Data-要发送的数据 cnt-要发送的数据位数
****出口参数:
****说明:
********************************************************************************/
void Ht1621Wr_Data(unsigned char Data,unsigned char

unsigned char i;
for

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

Ht1621_CS_0();
//写入命令标志100
//写入命令数据
Ht1621_CS_1();


//Name: SendBit_1621(送数据程序)
/*******************************************************************************
****函数名称:
****函数功能:1621写一个数据函数
****版本:V1.0
****日期:14-2-2014
****入口参数:Addr--地址 Data--数据
****出口参数:
****说明:
********************************************************************************/
void Ht1621WrOneData(unsigned char Addr,unsigned char

Ht1621_CS_0();
//写入数据标志101
//写入地址数据
//写入数据的前四位 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();
//写入数据标志101
//写入地址数据
for

//写入数据
p++;

Ht1621_CS_1();


/*******************************************************************************
****函数名称:
****函数功能:1621初始化函数
****版本:V1.0
****日期:14-2-2014
****入口参数:
****出口参数:
****说明:
********************************************************************************/
void Ht1621_Init(void)

Ht1621WrCmd(BIAS);
//使用内部振荡器
//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)

//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
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

unsigned int tmp;
unsigned int
unsigned char
unsigned char
// 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
#define

#define
#define

#define
#define

#define
#define

#define
#define
//基础操作定义
void Ht1621_CS_0() GPIO_Init(Ht1621_CS_PORT, Ht1621_CS_PIN, GPIO_MODE_OUT_PP_LOW_FAST); //
void

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

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

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

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

/*******************************************************************************
****函数名称:
****函数功能:延时函数
****版本:V1.0
****日期:14-2-2014
****入口参数:需要延时的数目
****出口参数:无
****说明:
********************************************************************************/
void

while

nCount--;


/*******************************************************************************
****函数名称:
****函数功能:1621写数据函数
****版本:V1.0
****日期:14-2-2014
****入口参数:Data-要发送的数据 cnt-要发送的数据位数
****出口参数:
****说明:
********************************************************************************/
void Ht1621Wr_Data(unsigned char Data,unsigned char

unsigned char i;
for

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

Ht1621_CS_0();
//写入命令标志100
//写入命令数据
Ht1621_CS_1();

/*******************************************************************************
****函数名称:
****函数功能:1621写一个数据函数
****版本:V1.0
****日期:14-2-2014
****入口参数:Addr--地址 Data--数据
****出口参数:
****说明:
********************************************************************************/
void Ht1621WrOneData(unsigned char Addr,unsigned char

Ht1621_CS_0();
//写入数据标志101
//写入地址数据
//写入数据的前四位 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();
//写入数据标志101
//写入地址数据
for

//写入数据
p++;

Ht1621_CS_1();

/*******************************************************************************
****函数名称:
****函数功能:1621初始化函数
****版本:V1.0
****日期:14-2-2014
****入口参数:
****出口参数:
****说明:
********************************************************************************/
void Ht1621_Init(void)

Ht1621WrCmd(BIAS);
//使用内部振荡器
//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)

//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
n4=tmp/1000;
tmp=tmp%1000;
n3=tmp/100;

n2=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 power on
Ht1621_VCC_1();
//延时一段时间
//上电初始化LCD
//延时一段时间
// Clear LCD display
data_convertor(1150);
Display();
Display_lcd_dot();

while









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


stm8的代码来自我买的stm8开发板提供的源码。 arduino部分来自我对stm8开发板源码的修改。

以上是关于ht1621之arduino及stm8驱动的主要内容,如果未能解决你的问题,请参考以下文章

Arduino与Proteus仿真实例-HT16K33驱动LED点阵(8x8)仿真

Arduino与Proteus仿真实例-HT16K33驱动LED点阵(16x8)仿真

取代HT1621B更少脚位更少点数:24/56/72/88/128点阵段码液晶驱动IC

意法半导体推出首款STM8 Nucleo开发板,并支持Arduino IDE

STM8单片机串口驱动的深度解析

STM8驱动0.96寸OLED(12864液晶屏)