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开发板源码的修改。