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);
}
}

最新文章

  1. ajax 无刷新上传
  2. 基于ASP.NET MVC定时执行任务调度
  3. 项目管理: Maven 让事情变得简单
  4. 两个数据库表同步的可视化WEB同步程序
  5. [转] acmer必看的26个对acm态度
  6. 观察者模式-Observer
  7. Java之旅(一)---说说“异常”那些事
  8. Hadoop0.20.2 Bloom filter应用演示样例
  9. 公交部署wifi热点,是否有必要?
  10. 合法的json数组字符串,转换json
  11. C# 设置Excel超链接(二)
  12. class类初始化之后调用赋值问题记录
  13. 《java从入门到精通》学习记录
  14. GraphX学习笔记——可视化
  15. 电商系统架构总结2(Redis)
  16. Ubuntu 14.04 installation &amp; bugs on Alienware-13
  17. mysql中,创建表的时候指定if not exists参数的作用?
  18. Android逆向笔记之AndroidKiller与Android Studio的使用
  19. CentOS7安装redis5.0
  20. 《DSP using MATLAB》Problem 3.17

热门文章

  1. Hybrid app(cordova) 环境配置记录
  2. Java基础:(二)String字符串
  3. Java实现的断点续传功能
  4. 洛谷P3959 宝藏(模拟退火乱搞)
  5. JavaScript中var a=b=c=d的发现
  6. layui内置loading等待加载
  7. Intellij IDEA项目添加资源文件
  8. 云计算的那些「What」
  9. windows 10 无法使用内置管理员账户打开应用的解决方案
  10. python基础教程总结13——网络编程,