2021-04-27

N76E003芯片驱动TM1620芯片显示数码管数字。 代码借鉴了CSDN博主「胡电子」的文章:原文链接https://blog.csdn.net/chuangwu2009/article/details/20994541

#include "N76E003.h"
#include "Common.h"
#include "SFR_Macro.h"
#include "Function_define.h"
#include "intrins.h"

#define  u8      unsigned char
#define  u16     unsigned int 
#define  u32     unsigned long

#define STB_TM1620_CLR P11 =0
#define STB_TM1620_SET P11 =1


#define CLK_TM1620_CLR P13=0
#define CLK_TM1620_SET P13=1

 
#define DIO_TM1620_CLR P14=0
#define DIO_TM1620_SET P14=1


/*
TM1620是一款数码管驱动集成IC,8段6位,以下是个人编程完成的驱动,供大家参考
 
*/
#define ModeDisTM1620  0x02
        //设置显示模式,6位8段--上电默认是7段8段
#define AddrAutoAdd        0x40//写显示,自动累加地址  
//#define AddrFixed         0x44//写显示,固定地址  

#define Addr00H  			0xC0//地址00H
#define Addr01H  			0xC1//地址01H
#define Addr02H  			0xC2//地址02H
#define Addr03H  			0xC3//地址03H
#define Addr04H  			0xC4//地址04H
#define Addr05H  			0xC5//地址05H
#define Addr06H  			0xC6//地址06H
#define Addr07H  			0xC7//地址07H
#define Addr08H  			0xC8//地址08H
#define Addr09H  			0xC9//地址09H
#define Addr0AH  			0xCA//地址0AH
#define Addr0BH  			0xCB//地址0BH

#define OpenDisTM1620  0x88//开显示
//#define CloseDisTM1620 0x80//关显示

#define Set1_16TM1620 0X00//设置脉冲宽度为 1/16 
#define Set2_16TM1620 0X01//设置脉冲宽度为 2/16 
#define Set4_16TM1620 0X02//设置脉冲宽度为 4/16 
#define Set10_16TM1620 0X03//设置脉冲宽度为 10/16 
#define Set11_16TM1620 0X04//设置脉冲宽度为 11/16 
#define Set12_16TM1620 0X05//设置脉冲宽度为 12/16 
#define Set13_16TM1620 0X06//设置脉冲宽度为 13/16 
#define Set14_16TM1620 0X07//设置脉冲宽度为 14/16 


//*************************************
// 函数名称:Tm1620SentData
// 函数功能:向TM1620发数据 8位数据-1个字节的数据
// 入口参数:要操作的数据
// 出口参数:无
// 技术简要:上升沿操作一位 从低位开始操作数据
//***************************************/
void Tm1620SentData(u8 TM1620Data)
{
	u8 i;  
	
  for(i=0;i<8;i++)   
  {   
    
		 CLK_TM1620_CLR;
		 
		 if(TM1620Data & (1 << i))  
		 {DIO_TM1620_SET;}   
		 else 
		 {DIO_TM1620_CLR;}   
	
		 CLK_TM1620_SET; //上升沿操作      
  }   
 
}

u8 LCDBuf[6]={0x3f,0x06,0x5b,0x4f,0x66,0x00};
//*************************************
// 函数名称:Tm1620Dis
// 函数功能:驱动显示数据
// 入口参数:要操作的数据
// 出口参数:无
// 技术简要:20MS操作一次
//***************************************/

void Tm1620Dis(void)
{
	
	STB_TM1620_CLR;  
    Tm1620SentData(ModeDisTM1620); 
	//设置显示模式,6位8段--上电默认是7段8段
	STB_TM1620_SET; 
    _nop_();_nop_();


    STB_TM1620_CLR;   
	Tm1620SentData(AddrAutoAdd);
	//写显示,自动累加地址      
	STB_TM1620_SET; 
	_nop_();_nop_();
 
	STB_TM1620_CLR;   
	Tm1620SentData(Addr00H);
	//指向地址0  
    Tm1620SentData(LCDBuf[0]);
	//向地址0 先数据LCDBuf[0]
	Tm1620SentData(0x00);
	///让地址递增1
	Tm1620SentData(LCDBuf[1]);
	//向地址2 先数据LCDBuf[1]
	Tm1620SentData(0x00);
	Tm1620SentData(LCDBuf[2]);
	//向地址4 先数据LCDBuf[2]
	Tm1620SentData(0x00);
	Tm1620SentData(LCDBuf[3]);
    //向地址6 先数据LCDBuf[3]
	Tm1620SentData(0x00);
	Tm1620SentData(LCDBuf[4]);
	//向地址8 先数据LCDBuf[4]
	Tm1620SentData(0x00);
	Tm1620SentData(LCDBuf[5]);
	//向地址A 先数据LCDBuf[5]

    STB_TM1620_SET; 
	 _nop_();_nop_();	
		
	STB_TM1620_CLR; 
    Tm1620SentData(OpenDisTM1620|Set1_16TM1620); 
	//开显示 脉宽 14/16 
			
	STB_TM1620_SET; 
}

void main(void)
{
  Set_All_GPIO_Quasi_Mode;//所有IO设置为双向模式
		
	P11_PushPull_Mode;	
	P13_PushPull_Mode;
	P14_PushPull_Mode;
	
	Tm1620Dis();	

	while(1)
	{
			;
	}
}








 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值