⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 7290_soft.c

📁 程序在IAR上调试
💻 C
字号:
#include <msp430x16x.h>            //此版本为软件模拟的zlg7290程序
#include "iic.h"
#include "general.h"       
#include "7290_soft.h"

 unsigned char Int_7290 ;	    //用于储存P30上读入电平,中断时会变低
 
//基本显示函数,只能显示某一位
void zlg7290_send( unsigned char sladdr,  unsigned char subaddr,  unsigned char *s, unsigned char len )//其实0x70 ,0x07可以不用做为参数传,因为它们是固定的
{
	unsigned char i ;
 	Start_IIC() ;                // 开始总线  
	Write8Bit( sladdr ) ;        //   发送从器件地址
	if( TestAck() == 2 )     //感觉TestAck() == 2不能少,少了就不会显示,为什么?
		{
		 
		 P1OUT |= 0x01 ; 
		}
	Write8Bit( subaddr ) ;    //  发送子地址
	if( TestAck() == 2 )     //感觉TestAck() == 2不能少,少了就不会显示,为什么?
		{
		 
		 P1OUT |= 0x01 ; 
		}
	
	for( i = 0 ; i < len ; i++ )
	{
	Write8Bit( *s ) ;	// 发送数据,包括控制位与数据位
	if( TestAck() == 2 )     //感觉TestAck() == 2不能少,少了就不会显示,为什么?
		{
		 
		 P1OUT |= 0x01 ; 
		}
	s++ ;

	}
	Stop_IIC() ;                 //  结束总线
	DelayMs (2) ;
}


//显示控制函数,还是只能显示某一位,不过还可以控制闪烁,小数点

//在7290上显示数字或字母
//loca 		--位置 高5位无效
//num		--显示的数字或字母,高三位无效
//flash		--闪烁否  1闪烁
//dp		--是否显示小数点  1 显示

//返回		---无

void zlg7290_control( unsigned char loca ,unsigned char num ,unsigned char flash ,unsigned char dp )
{
	unsigned char data[2] ;	
	unsigned char temp0 ,temp1 ;

	loca=0x07 & loca;//屏蔽上5位
	loca=0x60 | loca;
	temp0 = dp ;
	temp0 = temp0 << 7 ;
	temp1 = flash ;
	temp1 = temp1 << 6 ;

	temp1 = temp0 | temp1 ;
	num = num & 0x1f ;
	num = temp1 | num ;
	data[0] = loca ;      //放控制位
	data[1] = num ;       //放数据位
	zlg7290_send( 0x70 ,0x07 , data , 2 ) ;	//其实0x70 ,0x07可以不用做为参数传,因为它们是固定的
	
}


//基本接收函数,只能读一个字节
void zlg7290_receive( unsigned char sladdr,  unsigned char subaddr,  unsigned char *s, unsigned char len )//其实0x70 ,0x01可以不用做为参数传,因为它们是固定的
{
	unsigned char i ;
	Start_IIC() ;              // 开始总线  
	Write8Bit( sladdr ) ;      // 发送从器件地址,是写啊
	if( TestAck() == 2 )     //感觉TestAck() == 2不能少,少了就不会显示,为什么?
		{
		 
		 P1OUT |= 0x01 ; 
		}

	Write8Bit( subaddr ) ;    //发送子地址
	if( TestAck() == 2 )     //感觉TestAck() == 2不能少,少了就不会显示,为什么?
		{
		 
		 P1OUT |= 0x01 ; 
		}	
	
	Start_IIC() ;              // 再开始总线
	Write8Bit( sladdr + 1 ) ;      // 再次发送从器件地址,是读啊
        if( TestAck() == 2 )     //感觉TestAck() == 2不能少,少了就不会显示,为什么?
		{
		 
		 P1OUT |= 0x01 ; 
		}
	 for( i = 0; i < len ; i++ )
	{
		*s = Read8Bit()	;
		//如果len大于1这里要加ACK()
  		 s++ ;		
	}
	NoAck() ;
	Stop_IIC() ;	

}




//判断是否有键按下
//返回   	1       有键按下
//		0     没有

unsigned char zlg7290_Int()
{
	Int_7290 = ( IIC_IN & BIT0 )    ;//读入P30电平  //和 unsigned char Int_7290 ;一起放在这个文件里时编译通过
	return( !Int_7290 );             //Int_7290中断时才变低,平常为高

}

//读键值 key_value。len = 1表示只读一个字节。有返回值
unsigned char zlg7290_getkey()
{
	unsigned char key_value ;
	
	if( !Int_7290 )
	{
	zlg7290_receive( 0x70 ,  0x01 ,  &key_value , 1 ) ;//其实0x71 ,0x01可以不用做为参数传,因为它们是固定的
	//key_value = 0x0f & key_value ;
	//key_value = 0x80 | key_value ;  //??
	
	while( !zlg7290_Int ); //??8.21日看过后觉得有问题应改为下面一句
//while( !Int_7290 );//这样就是等Int_7290再变回高电平,才能继续

	return key_value;
	}  	
	
	else
		return 0xff;


}

void zlg7290_clear()
{
      int i ;
      for( i = 0 ; i < 8; i++ )
      {
       zlg7290_control( i ,0x1f , 0 , 0 ) ;
      }
      DelayMs ( 1 ) ;
}





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -