N76E003的TM1620B驱动

TM1620B主要资料网上查到的,使用中好多不明白的,但是最后还是解决了
参考比较多的方法
显示的方法还是有问题,自己要多注意修改,这样子写占内存
用一个&0x0020或许会好一点.

uint  code a[] = {0x182f,0x0023,0x083e,0x003f,0x1033,0x103d,0x183d,0x0027,0x183f,0x103f}; //0,1,2,3,4,5,6,7,8,9
uint  code b[] = {0x180f,0x0003,0x081e,0x001f,0x1013,0x101d,0x181d,0x0007,0x181f,0x101f}; //0,1,2.3,4,5,6,7,8,9,缺少h端


void Read_Key(void) //按键读取函数
{
   uchar i,j;
   STB=1;
   CLK=1;
   Delay_US(100);
   STB=0;
   command(0x42); 	//读按键命令
   DIO=1; 			//将DIO置高
   CLK=1;
	 //---------------
	 //---------------
   Delay_US(100);
   for(j=0;j<3;j++)//连续读3个字节
   for(i=0;i<8;i++)
   {
		 KEY[j]=KEY[j]>>1;
		 CLK=0;
		 Delay_US(100);
		 CLK=1;
		 Delay_US(100);
		 if(DIO)
		 {
		   KEY[j] = KEY[j]|0X80;
		 }
		 else
		 {
			KEY[j] = KEY[j]&0X7f;
		 }
   }
   //-------------------------
   if((KEY[0] == 0)&&(KEY[1] == 0)&&(KEY[2] == 0))
   {
		Keysta_Up = 1;  //按键抬起
		key_down_flag = 0;
   }
  //-------------------------
   Delay_US(100);
   STB=1;
   //-------------------------
   //-------------------------
}
void  Send_date(uchar p)
{
		uint  i;
		STB = 0;		//保证 STB 为低电平,程序不依赖之前端口的状态
						//保证程序在实际运动中不会出现端口迷失
	
		for(i = 0;i < 8; i++)
		{
		
			if(p & 0x01)
			{
				DIO = 1; 		//需要传送的数据低位为1, 清零
			}
			else
			{
				DIO = 0;		//需要传送的大数据低位为0, 置高
			}
			CLK = 0; 			 //先将 CLK 清零
			Delay_US(100);
			CLK = 1;	//送时钟的上升沿
			Delay_US(100);
			p = p >> 1;  //准备送下一个字节
	    } 	//送完字节退出程序			
}

void command(uchar com)
{
	STB = 1;
	CLK = 1;
	Delay_US(100);
	STB = 0;
	Delay_US(100);
	Send_date(com);
}

//输入16位字节
//在时钟的上升沿通过mcu向TM1620B 写数据
void  Send_date16(unsigned int   p)
{
		uchar  i;
		STB = 0;//保证 STB 为低电平,程序不依赖之前端口的状态
				//保证程序在实际运动中不会出现端口迷失
	
		for(i = 0;i <16; i++)
		{
		
			if(p & 0x0001)
			{
				DIO = 1; 		//需要传送的数据低位为1, 清零
			}
			else
			{
				DIO = 0;	//需要传送的大数据低位为0, 置高
			}
			CLK = 0;  		//先将 CLK 清零
			Delay_US(100);
			CLK = 1;		//送时钟的上升沿
			Delay_US(100);
			p = p >> 1; 	 //准备送下一个字节
	    } 					//送完字节退出程序			
}
void Display1()//时钟显示
{
	if(Clock_Flag == 0)
	{
		uchar temp[4];
		temp[3] = TmData%10000/1000; //先把TmData求余数后再求商,最后在赋值给temp[0],即取出TmData的千位数
		temp[2] = TmData%1000/100; //同上
		temp[1] = TmData%100/10;
		temp[0] = TmData%10;
		A_Data = a[temp[0]];
		B_Data = a[temp[1]];
		C_Data = b[temp[2]];
		D_Data = a[temp[3]];
		command(0x01); //设置显示模式,5位8段
		command(0x40); //设置数据命令,采用地址自动加1
		command(0xc0); //设置显示地址,从00H开始
	  //---------------------------------------	
			Send_date16(Z_Data); 
			Send_date16(A_Data); 
			Send_date16(B_Data); 
			Send_date16(C_Data); 
			Send_date16(D_Data); 
	   //---------------------------------------
	   command(0x88); //打开显示并设置为最暗
	   Delay_US(20);
	   STB=1;
	}
	else
	{
		uchar temp[4];
		temp[3] = TmData%10000/1000; //先把TmData求余数后再求商,最后在赋值给temp[0],即取出TmData的千位数
		temp[2] = TmData%1000/100; //同上
		temp[1] = TmData%100/10;
		temp[0] = TmData%10;
		A_Data = a[temp[0]];
		B_Data = a[temp[1]];
		C_Data = a[temp[2]];
		D_Data = a[temp[3]];
		command(0x01); //设置显示模式,5位8段
		command(0x40); //设置数据命令,采用地址自动加1
		command(0xc0); //设置显示地址,从00H开始
	  //---------------------------------------	
			Send_date16(Z_Data); 
			Send_date16(A_Data); 
			Send_date16(B_Data); 
			Send_date16(C_Data); 
			Send_date16(D_Data); 
	   //---------------------------------------
	   command(0x88); //打开显示并设置为最暗
	   Delay_US(20);
	   STB=1;
	}
}

z

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值