MCU是STM8S207

/*LED 字模结构*/
typedef struct
{
char mChar;
u8 mModal;
}LED_MODAL_DEFINE; typedef struct
{
u8 Addr;
u8 Ddat;
} LED_ICON_DEFINE;
#define ht1621_BIAS 0x52
#define ht1621_SYSEN 0x02
#define ht1621_LCDOFF 0x04
#define ht1621_LCDON 0x06
#define ht1621_RC256 0X30
#define ht1621_SYSDIS 0X00
#define ht1621_WDTDIS 0X0A
#define ht1621_BLON 0x12
#define ht1621_BLOFF 0x10 #undef LED_WIDTH
#define LED_WIDTH 6 #define PIN_HT1621_CS ht_cs
#define PIN_HT1621_WR ht_wr
#define PIN_HT1621_DAT ht_data #define HT1621_SET_CS(value) GPIOEX_BitWrite(PIN_HT1621_CS,value)
#define HT1621_SET_WR(value) GPIOEX_BitWrite(PIN_HT1621_WR,value)
#define HT1621_SET_DAT(value) GPIOEX_BitWrite(PIN_HT1621_DAT,value) /*常用的LED字模定义,需要扩充的自己增加数组*/
const LED_MODAL_DEFINE LED_MODAL[]={
{' ',0x00} ,
{'',0xf5} ,
{'',0x05} ,
{'',0xb6} ,
{'',0x97} ,
{'',0x47} ,
{'',0xd3} ,
{'',0xf3} ,
{'',0x85} ,
{'',0xf7} ,
{'',0xd7} ,
{'A',0xe7} ,
{'b',0x73} ,
{'C',0xf0} ,
{'E',0xf2} ,
{'F',0xe2} ,
{'H',0x67} ,
{'L',0x70} ,
{'n',0xe5} ,
{'U',0x75} ,
{'O',0xf5} ,
{'-',0x02} ,
{'I',0x60} ,
{'q',0xc7} ,
{'d',0x37} ,
{'S',0Xd3} ,
{'y',0x57} ,
{'t',0x72} ,
{'r',0x22} ,
{'j',0x15} ,
{'P',0xe6} ,
}; const LED_ICON_DEFINE ICON_DEFINE[] =
{
{,0x0},
{,0x8},
{,0x8},
{,0x8},
{,0x8},
{,0x8},
{,0x8},
{,0x40},
{,0x20},
{,0x4},
{,0x2},
{,0x40},
{,0x2},
{,0x4},
{,0x80},
{,0x8},
{,0x20},
{,0x80},
{,0x8},
}; static char led_content[LED_WIDTH*+]; //显示内容 考虑小数点的问题,内容长度为LED宽度×2
static u8 led_len;
u8 led_disp_mem[];
u8 led_prev_disp_mem[];
static _eCM led_prev_icon[];
static char _l_prev_blink[];
extern char _l_blink_state[]; /*取字符对应的字模参数:iValue 需要取模的字符 区分大小写*/
static u8 LED_GetModal(char iValue)
{
u8 i;
for (i=;i<sizeof(LED_MODAL)/sizeof(LED_MODAL[]);i++)
{
if (iValue == LED_MODAL[i].mChar)
{
return LED_MODAL[i].mModal;
}
}
return ;
} /*将内容写入显示设备参数:bGlint 需要闪烁的部分是否显示*/
void LED_DisplayToDevice()
{
u8 i = ;
u8 pos = ;
u8 value = ;
u8 mode[LED_WIDTH];
u8 dispMemAddr[] = {,,,,,};
memset(mode,,sizeof(mode));
for (i=;i<led_len;)
{
//取字模
value=LED_GetModal(led_content[i++]);
//小数点和前面的字符结合成一个字符
if (led_content[i]=='.')
{
i++;
}
// if (_l_blink_state[i] == 0)
// value = LED_GetModal(' '); mode[pos++]=value;
if (pos>LED_WIDTH-)
break;
} //
for (i=; i<pos; i++)
{
if (_l_blink_state[i] == )
led_disp_mem[dispMemAddr[i]] = ;
else
led_disp_mem[dispMemAddr[i]] = mode[i];
}
//
}
void WrCmd(u8 Cmd)
{
u8 data, i, CmdByte = 0x80; HT1621_SET_CS();
for (i=; i<; i++)
{
if (CmdByte&0x80)
HT1621_SET_DAT();
else
HT1621_SET_DAT();
HT1621_SET_WR();
DelayUS();
HT1621_SET_WR();
CmdByte <<= ;
} for (i=; i<; i++)
{
if (Cmd&0x80)
HT1621_SET_DAT();
else
HT1621_SET_DAT();
HT1621_SET_WR();
DelayUS();
HT1621_SET_WR();
DelayUS();
Cmd <<= ;
} HT1621_SET_CS();
} void WrAddData(u8 Add, u8 Ddat)
{
u8 i, CmdByte = 0xA0; //
led_disp_mem[Add] |= Ddat;
// HT1621_SET_CS();
for (i=; i<; i++)
{
if (CmdByte&0x80)
HT1621_SET_DAT();
else
HT1621_SET_DAT();
HT1621_SET_WR();
DelayUS();
HT1621_SET_WR();
CmdByte <<= ;
} Add <<= ;
for (i=; i<; i++)
{
if (Add&0x80)
HT1621_SET_DAT();
else
HT1621_SET_DAT();
HT1621_SET_WR();
DelayUS();
HT1621_SET_WR();
Add <<= ;
} for (i=; i<; i++)
{
if (Ddat&0x80)
HT1621_SET_DAT();
else
HT1621_SET_DAT();
HT1621_SET_WR();
DelayUS();
HT1621_SET_WR();
Ddat <<= ;
} HT1621_SET_CS();
} void HT1621Cls(void)
{
u8 i;
for (i=; i<; i+=)
{
WrAddData(i, 0x00);
} memset(led_disp_mem, , sizeof (led_disp_mem));
} void HT1621AllOn(void)
{
u8 i; for (i=; i<; i+=)
{
WrAddData(i, 0xff);
}
} void HT1621_Init()
{
_eCM cm[] = {CM_bph,CM_gw};
GPIOEX_InitIOPin(PIN_HT1621_CS, GPIO_MODE_OUT_PP_LOW_FAST);
GPIOEX_InitIOPin(PIN_HT1621_WR, GPIO_MODE_OUT_PP_LOW_FAST);
GPIOEX_InitIOPin(PIN_HT1621_DAT, GPIO_MODE_OUT_PP_LOW_FAST); GPIOEX_InitIOPin(PIN_RUNLED, GPIO_MODE_OUT_PP_LOW_FAST);
GPIOEX_BitWrite(PIN_RUNLED,); WrCmd(ht1621_BIAS);
WrCmd(ht1621_RC256);
WrCmd(ht1621_SYSEN);
WrCmd(ht1621_LCDON); HT1621Cls();
//
HC164_Init();
//
} void HT1621_ReInit()
{
GPIOEX_InitIOPin(PIN_HT1621_CS, GPIO_MODE_OUT_PP_LOW_FAST);
GPIOEX_InitIOPin(PIN_HT1621_WR, GPIO_MODE_OUT_PP_LOW_FAST);
GPIOEX_InitIOPin(PIN_HT1621_DAT, GPIO_MODE_OUT_PP_LOW_FAST);
WrCmd(ht1621_BIAS);
WrCmd(ht1621_RC256);
WrCmd(ht1621_SYSEN);
WrCmd(ht1621_LCDON);
} void HT1621_BackLight(u8 nStat)
{
if (nStat)
{
WrCmd(ht1621_BLON);
}
else
{
WrCmd(ht1621_BLOFF);
}
}

HT1621控制的段式液晶驱动程序的更多相关文章

  1. FRDM-KL43开发板驱动段式液晶SLCD的实现方法

    LCD的驱动不像LED那样,加上电压(LED实际上是电流驱动)就可以长期显示的. LCD驱动必须使用交流电压驱动才能保持稳定的显示,如果在LCD上加上稳定的直流电压, 不但不能正常显示,时间久了还会损 ...

  2. 所谓的液晶屏驱动IC是单独的IC还是在屏内就集成

    所谓的液晶屏驱动IC是单独的IC还是在屏内就集成 时间:2016-12-05    作者:admin   其实无论什么液晶屏,想要正常工作必须包括两个人:玻璃屏+驱动IC:但是现在有一些液晶厂商他们不 ...

  3. ALSA声卡12_从零编写之添加音量控制_学习笔记

    1.设置音量时应用程序的调用过程 (1)strace分析: amixer cset numid=1 30 (设置音量) /dev/snd/controlC0 open SNDRV_CTL_IOCTL_ ...

  4. Linux下PCI设备驱动程序开发 --- PCI驱动程序实现(三)

    三.PCI驱动程序实现 1. 关键数据结构 PCI设备上有三种地址空间:PCI的I/O空间.PCI的存储空间和PCI的配置空间.CPU可以访问PCI设备上的所有地址空间,其中I/O空间和存储空间提供给 ...

  5. 【DSP开发】【Linux开发】Linux下PCI设备驱动程序开发

    PCI是一种广泛采用的总线标准,它提供了许多优于其它总线标准(如EISA)的新特性,目前已经成为计算机系统中应用最为广泛,并且最为通用的总线标准.Linux的内核能较好地支持PCI总线,本文以Inte ...

  6. MSP430常见问题之LCD 显示驱动类

    Q1:晶体一般都是接32768,然后使用液晶很正常.我打算将晶体接6M的替换32768,那么液晶还能正常显示吗A1:看你所用的LCM 模块时序极限是多少HZ,然后看6M情况下,MSP430去驱动LCM ...

  7. LCD的背光及觸摸屏

    液晶的发现可追溯到19 世纪末,1888 年被奥地利植物学家发现.它是一种在一定温度范围内呈现既不同于固态.液态,又不同于气态的特殊物质态.既具有晶体所具有的各向异性造成的双折射性,又具有液体所特有的 ...

  8. 找工作---操作系统常考知识点总结【PB】

    1.进程是并发过程中程序的执行过程 2.进程的特征:结构特征.动态性.并发性.独立性.异步性 3.临界区指在每个进程中访问临界资源的那段代码 4,现在操作系统中申请资源的基本单位是进程,在CPU得到执 ...

  9. 基于basys2驱动LCDQC12864B的verilog设计图片显示

    话不多说先上图 前言 在做这个实验的时候在网上找了许多资料,都是关于使用单片机驱动LCD显示,确实用单片机驱动是要简单不少,记得在FPGA学习交流群里问问题的时候,被前辈指教,说给我最好的指教便是别在 ...

随机推荐

  1. Spring-boot原理(附带实现一个spring-boot-starter实例和代码下载)

    ​ (我就是个封面) Spring-boot自出现后,到现在火的很,大家貌似都在用,连招聘里面也要求会这个.但是说实话,spring-boot无外乎想实现一种可插拔的编程方式,说是简化配置,其实并没有 ...

  2. jeesite框架搭建中mysql数据库导入问题

    在进行mysql8.0的安装配置时,可以说是道路坎坷,之前介绍了如何安装配置mysql8.0,虽然mysql在正常情况下是很容易安装的,但是如果遇到特殊情况的时候那就需要特殊的处理. 这次我遇到的问题 ...

  3. kindeditor编辑器和图片上传独立分开的配置细节

    关于kindeditor编辑器上传按钮的异步加载最关键的部署问题,它的上传图片的组件都已经封装得很好了的,只需要监听到页面按钮的点击事件给编辑器对象传递一些对应的初始化参数即可显示图片上传的弹窗实现异 ...

  4. Mvc异常处理器

    using System; using System.Text; using EMS.Domains.Core; using System.Web.Mvc; using Json.Net; using ...

  5. 第12届D2前端技术论坛

    第12届D2前端技术论坛 最近参加了阿里的D2前端技术论坛,听了一天的报告,收获良多,下面对几场报告做一个记录. 自己选择听的主线也是从: 实践应用 -> 管理 -> 性能 -> 新 ...

  6. CA、公钥、私钥 概要

    CA.公钥.私钥 概要 现在在开发中遇到一个需求,需要使用tls加密技术,之前并没有了解过,这里来做一个关于CA,公钥,密钥的总结,至于怎么生成这儿就不讲了,如果有机会可以再开一个单章来讲一下. 现在 ...

  7. swift 基础-1

    一.常量与变量 var testVariable = 42         testVariable = 50         println(testVariable)                ...

  8. 洛谷 P1821 [USACO07FEB]银牛派对Silver Cow Party

    银牛派对 正向建图+反向建图, 两边跑dijkstra,然后将结果相加即可. 反向建图以及双向建图的做法是学习图论的必备思想. #include <iostream> #include & ...

  9. IDEA Spring Boot 项目创建

    1.创建新项目 2.选择 Spring Initializr 3.选择默认项或者修改其名称也可,直接下一步 4.选择 web选项以及spring boot版本(我用的是2.0.2) 5.为项目创建名称 ...

  10. 移动端rem单位和px单位换算

    rem单位是根据html元素的单位在页面根据不同的手机屏幕分辨率动态整体的按比例缩小或放大字体. 假如html{font-size: 14px;},那么1rem=14px; 一个div宽度48px,那 ...