OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子全套STM32开发资料,上千讲STM32视频教程,RT1052教程免费下载啦...

查看: 1119|回复: 1

STM8S驱动TM1640代码

[复制链接]

  离线 

16

主题

149

帖子

0

精华

高级会员

Rank: 4

积分
572
金钱
572
注册时间
2014-12-4
在线时间
182 小时
发表于 2016-6-4 15:28:48 | 显示全部楼层 |阅读模式
正点原子公众号
TM1640驱动8段16位数码管很好用,贴一个已经调试好的代码供大家参考
[C] 纯文本查看 复制代码
/********************  (C) COPYRIGHT****************************
* File Name          : TM1640.c
* Author             : 
* Version            : V1.0
* Date               : 2016
* Description        : LED 数码管 驱动函数
****************************************************************/
#include "TM1640.h"
#include "Application.h"

//*************************************************************
//*********START***********************************************
static void TmStart()		  //1640开始
{
	//TMSCLK(0);
	TMDIN(1);
	nop();
	nop(); 
		nop();
	nop(); 
	TMSCLK(1);	
	nop();
	nop(); 
		nop();
	nop(); 
	TMDIN(0);
	nop();
	nop();
		nop();
	nop(); 
	TMSCLK(0);
	nop();
	nop();
		nop();
	nop(); 
}
//**************************************************************
static void TmStop()			 //1640结束
{
	TMSCLK(0);
	nop();
	nop(); 
		nop();
	nop(); 
	TMDIN(0);
	TMSCLK(1);
	nop();
	nop(); 
		nop();
	nop(); 
	TMDIN(1);
	nop();
	nop();
		nop();
	nop(); 
	TMSCLK(1);
	nop();
	nop();	
	nop();
		nop();
	nop(); 
}
//***********************************************************
static void TmWrite(u8 date)	  	//1640写字节
{
	u8 i,aa;
	aa=date;
	//TMDIN(0);
	//TMSCLK(0);
	for(i=0;i<8;i++)
	{	 
		TMSCLK(0); 
		if(aa&0x01)		
		{
			TMDIN(1);
			nop();
			nop(); 
				nop();
			nop(); 
		}
		else
		{
			TMDIN(0);
			nop();
			nop();
				nop();
			nop(); 
		}
		TMSCLK(1);
		nop();
			nop();
		nop(); 
		aa=aa>>1;
	}
	//TMSCLK(0);
	//TMDIN(0);			
}

/*****************************************************************************************
Description : 向TM1640发送显示数据
*****************************************************************************************/
void SysTmSendAutoAddr(u8 startaddr, u8 endaddr, u8 *dat,u8 light ,bool state)                  
{
	u8 nCount;
	u8 value = 0;
	TmStart();
	//高四位数据类型	低四位是命令
	//设置数据,地址加1模式
	TmWrite(0x40 | 0x00);       
	TmStop(); 

	TmStart();
	//地址命令设置 高四位数据类型	 低四位是显示地址
	TmWrite(0xC0 | startaddr);
	for(nCount=0;nCount <= endaddr - startaddr ;nCount++)
	{
		TmWrite(*dat);
		dat++;
	}       
	TmStop();

	TmStart();
	/*
	显示控制命令: 
	MSB 				LSB
	B7 B6 B5 B4 B3 B2 B1 B0 	
	1 0	0 0 	1 0 0 0 	设置脉冲宽度为 1/16
	1 0 0 0 	1 0 0 1 	设置脉冲宽度为 2/16
	1 0 0 0 	1 0 1 0 	设置脉冲宽度为 4/16
	1 0 0 0 	1 0 1 1 	设置脉冲宽度为 10/16
	1 0 0 0 	1 1 0 0 	设置脉冲宽度为 11/16
	1 0 0 0 	1 1 0 1 	设置脉冲宽度为 12/16
	1 0 0 0 	1 1 1 0 	设置脉冲宽度为 13/16
	1 0 0 0 	1 1 1 1 	设置脉冲宽度为 14/16
	1 0 0 0 	0 X X X		显示开关设置   显示关
	1 0 0 0 	1 X X X 	显示开关设置   显示开
	*/
	//显示控制 高4位命令  低4位B3-B0 B3控制亮灭,B2-B0设置亮度
	LIMIT(0,light,7);
	if(state == TRUE )
	{
		value =0x80 | light | 0x08;
	}
	else
	{
		value =0x80 | light ; 
		value = value & (~0x08);//关闭显示
	}
	TmWrite(value);       //控制显示,开显示,脉冲宽度为14/16
	TmStop(); 
	   	
}  

/*****************************************************************************************
Description : 向TM1640发送显示数据设置显示地址
*****************************************************************************************/

void SysTmSendSetAddr(u8 addr, u8 dat, u8 light, bool state)    
{
	//u8 nCount;
	u8 value;
	TmStart();
	//高四位数据类型	低四位是命令
	//设置数据,地址固定
	TmWrite(0x40 | 0x04);       
	TmStop(); 

	TmStart();
	//地址命令设置 高四位数据类型	 低四位是显示地址
	LIMIT(0,addr,11);
	TmWrite(0xC0 | addr);
	TmWrite(dat);     
	TmStop();

	TmStart();
	/*
	显示控制命令: 
	MSB 				LSB
	B7 B6 B5 B4 B3 B2 B1 B0 	
	1 0	0 0 	1 0 0 0 	设置脉冲宽度为 1/16
	1 0 0 0 	1 0 0 1 	设置脉冲宽度为 2/16
	1 0 0 0 	1 0 1 0 	设置脉冲宽度为 4/16
	1 0 0 0 	1 0 1 1 	设置脉冲宽度为 10/16
	1 0 0 0 	1 1 0 0 	设置脉冲宽度为 11/16
	1 0 0 0 	1 1 0 1 	设置脉冲宽度为 12/16
	1 0 0 0 	1 1 1 0 	设置脉冲宽度为 13/16
	1 0 0 0 	1 1 1 1 	设置脉冲宽度为 14/16
	1 0 0 0 	0 X X X		显示开关设置   显示关
	1 0 0 0 	1 X X X 	显示开关设置   显示开
	*/
	//显示控制 高4位命令  低4位B3-B0 B3控制开关,B2-B0设置亮度
	LIMIT(0,light,7);
	if(state == TRUE )
	{
		value =0x80 | light | 0x08;
	}
	else
	{
		value =0x80 | light ; 
		value = value & (~0x08);//关闭显示
	}
	TmWrite(value);       //控制显示,开显示,脉冲宽度为14/16
	TmStop(); 
}
回复

使用道具 举报

  离线 

10

主题

91

帖子

0

精华

初级会员

Rank: 2

积分
162
金钱
162
注册时间
2016-7-28
在线时间
13 小时
发表于 2018-6-9 11:57:53 | 显示全部楼层
类似的资料可以参考一下

VK1640-CH.pdf

958.47 KB, 下载次数: 2

VK1628 規格書.pdf

681.8 KB, 下载次数: 2

元泰VK1629 規格書.pdf

2.16 MB, 下载次数: 2

元泰VK1629A 規格書.pdf

1.22 MB, 下载次数: 3

元泰VK1629B 規格書 .pdf

1.29 MB, 下载次数: 4

元泰VK1629C 規格書.pdf

1.39 MB, 下载次数: 3

联系人:许先生  QQ:191 888 5898 电话:18898582398   免费样品赠送,工程技术支持,PDF产品资料提供!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则




关闭

必看:"原子哥”力荐上一条 /1 下一条

QQ|联系我们|手机版|官方淘宝店|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-8-19 14:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表
/* */