1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/bg4uvr-ds3231

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Это зеркальный репозиторий, синхронизируется ежедневно с исходного репозитория.
Клонировать/Скачать
ht1621.c 3.7 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
bg4uvr Отправлено 5 лет назад 375fac1
#include "ht1621.h"
#include "delay.h"
//HT1621指令
#define BIAS 0x52 //0b1000 0101 0010 1/3duty 4com 1000 010a bXcX
#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 DOT 0x10
#define LCD_TEST
//字形表 0-f,外加空白和全显
const uint8_t dispTab[]=
{
// 0 10 11 12 13 14 15 16 17 18
// 0, 1, 2, 3, 4, 5, 6 7, 8, 9, A, B, C, D, E, F , ., -,
0xEB,0x0A,0xAD,0x8F,0x4E,0xC7,0xE7,0x8A,0xEF,0xCF,0xEE,0x67,0xE1,0x2F,0xE5,0xE4,0x00,0x10,0x04
};
//基础操作定义
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);
}
//1621写数据函数
void ht1621WrDat(uint8_t dat,uint8_t bitCnt)
{
uint8_t i;
for (i=0; i<bitCnt; i++)
{
ht1621_WR_0();
if((dat & 0x80)==0x80)
ht1621_DAT_1();
else
ht1621_DAT_0();
ht1621_WR_1();
dat<<=1;
}
}
//1621写指令函数
void ht1621WrCmd(uint8_t cmd)
{
ht1621_CS_0();
ht1621WrDat(0x80,4); //写入命令标志100
ht1621WrDat(cmd,8); //写入命令数据
ht1621_CS_1();
}
//1621清屏
void ht1621_clear(void)
{
ht1621_CS_0();
ht1621WrDat(0xa0,3); //写入数据标志101
ht1621WrDat(0x00,6); //从起始地址
#ifdef LCD_TEST
ht1621_DAT_1();
for(uint8_t i=0; i<32; i++)
{
ht1621_WR_0();
delay(1);
ht1621_WR_1();
delay(1);
}
for(unsigned int i=0; i<500; i++)
delay(200);
#endif
ht1621WrDat(0x00,4*32); //清屏
ht1621_CS_1();
}
//单独刷新一个字符
void dispByte(uint8_t addr, uint8_t data)
{
ht1621_CS_0();
ht1621WrDat(0xa0,3); //写入数据标志101
ht1621WrDat(addr*8,6); //写入地址数据
ht1621WrDat(data&0x80 ? dispTab[data%sizeof(dispTab)]|DOT : dispTab[data],8);
ht1621_CS_1();
}
//刷新全屏
void dispAll(uint8_t* dspbuf)
{
uint8_t i;
ht1621_CS_0();
ht1621WrDat(0xa0,3); //写入数据标志101
ht1621WrDat(0x00,6); //从地址0开始写入
for(i=0; i<4; i++) //连续写入4个字节的数据
{
ht1621WrDat( *dspbuf&0x80 ? dispTab[*dspbuf&0x7f]|DOT : dispTab[*dspbuf],8);
dspbuf++;
}
ht1621_CS_1();
}
//1621初始化函数
void ht1621Init(void)
{
ht1621_GND_0(); //使用IO脚给HT1621供电
ht1621_VCC_1();
delay(100); //延时一段时间
ht1621WrCmd(BIAS);
ht1621WrCmd(RC256); //使用内部振荡器
//ht1621WrCmd(XTAL); //使用外部振荡器
ht1621WrCmd(SYSDIS);
ht1621WrCmd(WDTDIS1);
ht1621WrCmd(SYSEN);
ht1621WrCmd(LCDON);
ht1621_clear(); //Clear LCD display
}

Комментарий ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://gitlife.ru/oschina-mirror/bg4uvr-ds3231.git
git@gitlife.ru:oschina-mirror/bg4uvr-ds3231.git
oschina-mirror
bg4uvr-ds3231
bg4uvr-ds3231
master