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

📄 7290test.c

📁 系统通过单片机控制主电路
💻 C
字号:
/****************************************Copyright (c)**************************************************
**                               广州周立功单片机发展有限公司
**                                     研    究    所
**                                        产品一部 
**
**                                 http://www.zlgmcu.com
**
**--------------文件信息--------------------------------------------------------------------------------
**文   件   名: PCF8563.C
**创   建   人: 叶皓贲
**最后修改日期:  2003-3-4
**描        述: DP-1581的8563T及7289a键盘LED演示程序
**
**--------------历史版本信息----------------------------------------------------------------------------
** 创建人: 叶皓贲
** 版  本: 1.0
** 日 期: 2003-3-4
** 描 述: DP-1581演示程序
**
**------------------------------------------------------------------------------------------------------
** 修改人:
** 版  本:
** 日 期:
** 描 述:
**
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人: 
** 日 期:
** 描 述:
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#include <stdio.h>
#include <intrins.h>
#include <absacc.h>
#include "VIIC_C51.h"
#include "ZLG7290.h"
#include "reg52.h"

#define DAC0832 XBYTE[0x7FFF] 
#define ADC0809 XBYTE[0xBFF8] 
#define ulong unsigned long

#define uint unsigned int 

sbit KEY_INT=P3^3;
 

/* 全局变量 */	 
 
 
unsigned char disp_buf[8]={0,0,0,0,0,0,0,0};
 unsigned char  rd[8]={0,0,0,0,0,8,8,8};
 unsigned char  ab,cd,a,c=0 ;
	 	 float b=0.0;
unsigned char  bdata sendbyte,receivebyte;//一定不要忘记加uchar 否则后果不堪设想!!!!!
 
sbit sda=P1^0;
sbit scl=P1^1;
sbit sendbyte7=sendbyte^7 ;
sbit receivebyte7=receivebyte^7;




/*********************************************************************************************************
** 函数名称: 	display
** 功能描述: 	7298A led显示
** 输 入: *sd :	显示缓冲区的头地址
**         
** 输 出: 0 :	OK;
**         1 :	FAIL;
** 全局变量:	无
** 调用模块: 	ZLG7289_SendBuf
**
** 作 者: 叶皓贲
** 日 期: 2003-3-4
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
unsigned char display(unsigned char  *sd)
{ 
  	
    ZLG7290_SendBuf(rd,8);
	return 0;
}

/*********************************************************************************************************
** 函数名称: 	DelayNS
** 功能描述: 	长软件延时
** 输 入: no :	延时参数,值越大时延时越久
**         
** 输 出: 0 :	OK;
**         1 :	FAIL;
** 全局变量:	无
** 调用模块: 	无
**
** 作 者: 叶皓贲
** 日 期: 2003-3-4
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
unsigned char DelayNS(unsigned char  no)
{ 
	unsigned char  i,j;					//延时参数

  	for(; no>0; no--)
  	{ 
		for(i=0; i<100; i++)
     		for(j=0; j<100; j++);
  	}
  	return 0; 
}

/*********************************************************************************************************
** 函数名称: 	delay
** 功能描述: 	短软件延时
** 输 入: j :	延时参数,值越大时延时越久
**         
** 输 出: 0 :	OK;
**         1 :	FAIL;
** 全局变量:	无
** 调用模块: 	无
**
** 作 者: 叶皓贲
** 日 期: 2003-3-4
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
unsigned char  delay(unsigned char  j)
{
  	unsigned char  k,l;
  	for(l=0;l<=j;l++)
    	for(k=0;k<=250;k++);
	return 0;
}

  unsigned char VI( unsigned char ab,unsigned char cd )
	 {unsigned char z; 	
	 float vi;
	 vi=(((float)ab+(float)cd/10)-15)/0.082;
	 z=(unsigned char)vi;
	 return(z+182);

	 }	 
 
	

/*
  void sendstr(unsigned char *p,unsigned char n)
{
	 unsigned char i=0;
	 EA=0;
	 for(i=0;i<n;i++)
	 {  
	    SBUF=*(p+i);
	    while(TI==0);
		TI=0;
	 }
	 EA=1;

} */
delay1(uint i)
{ 
 while(i--);
 }
void init()
{
  scl=1;
  delay1(2);
  sda=1;
  delay1(2);

}
void start()//开始
{
  sda=1;
  delay1(2);
  scl=1;
  delay1(2) ;
  sda=0;
  delay1(2);
  scl=0;
  delay1(2);
}
void stop()//结束
{
 
  sda=0;  	
  delay1(2);   
  scl=1;  	
  delay1(2);
  sda=1;  	
  delay1(2);
}

void write (unsigned char undata)//写入
{
  unsigned char i;
  for(i=8;i>0;i--)
 {
    sda=(bit)(undata&0x80);
	undata<<=1;
    scl=1;
    delay1(2);
	scl=0;
	delay1(2);
    
  }
} 
 bit check()//从机给单片机应答
{
  unsigned char temp=4;
  scl=0;
  delay1(2);
  sda=1;
  delay1(2);
  scl=1;
  delay1(2);
  while(sda&&temp)
    temp--;
  scl=0;
  delay1(2);
  if(temp)
    return(0);
  else
    return(1);
}
void  putack(bit ack1)//单片机给从机应答
{
  scl=0;
  delay1(2);
  sda=ack1;
  scl=1;
  delay1(2);
  scl=0;
  delay1(2);
 }

unsigned char  read(void)//读入
{
   unsigned char dat;
   unsigned char i;
   sda=1;
   delay1(2);
   for(i=8;i>0;i--)
 {  
    scl=0;
    delay1(2);
    scl=1;
    delay1(2);
    dat<<=1;
	if(sda)
	dat++;
	scl=0;
	delay1(2);
 }
	return(dat);
}
void  writesque( unsigned char cadress,unsigned char dadress,unsigned char*dat,unsigned char n)//写一个数组,cadress为从机地址,dadress为要存的数据地址 *data为要存入的数据 ,n为个数
{
    unsigned char i=0;
	while(1)
   { 
      start();
	  write(cadress);//写入a0
	  if(check())
	   continue;   
	  write(dadress);//写地址
	  if(check())
	     continue;
	  for(i=0;i<n;i++)
	  {  
	     write(*dat++);
		 if(check())
	       break;
	  }
	   if(i!=n)
	     continue;
	   stop();
       break; 
	}
}
readsque(unsigned char cadress, unsigned char dadress, unsigned char *dat, unsigned char n)//读一个数组,dataress为读取的首地址,*data为要存入的数据,n为存入的个数 
{
     unsigned char i=0;
	 	while(1)
   { 
      start();
	  write(cadress);
	  if(check())
	     continue; 
	  write(dadress);
	  if(check())
	     continue; 
	  start();   
	  write(cadress+1);
	  if(check())
	     continue; 
	  for(i=0;i<n;i++)
	  {
	     *dat++=read();
		 if(i==n-1)	 //读最后一个数据后要输出高
		    putack(1);
		 else  
		    putack(0);//其他的都输出低
	   }
	   stop();
	   break;
    }
} 	








	 
		   			   
void  main()
{	 unsigned char  key,i1=0; 
     readsque(0xa0,0x00,&rd[5],3); 
	         ab=rd[5]*10+rd[6];
		     cd=rd[7];
		     DAC0832=VI(ab,cd);
             display(rd);
	  
	         DelayNS(100);
 	      
	 while(1)
  	{  	
	display(rd); 
	  	 ADC0809=1;
				 DelayNS(5);
				b=ADC0809;
                b=(float)b*3.985*5.0/256;
	            b=b*10;	 
	            c=(unsigned char)b; 
             	rd[5]=c/100 ;
                rd[6]=c/10-10*rd[5];
	            rd[7]=c%10;
			  
		 writesque(0xa0,0x00,&rd[5],4); 
		 delay(10);
		
	   	 
		
	
   if(KEY_INT==0)
		{  
		 key=ZLG7290_GetKey();
			switch(key)
			{   case 28 :  rd[i1++]=1;               
					break;
				case 27 :  rd[i1++]=2;    
					break; 
				case 26 :  rd[i1++]=3;   
					break;
				case 20 : rd[i1++]=4;
					break;
				case 19 :  rd[i1++]=5;    
					break;
				case 18 :  rd[i1++]=6;
					break;
		        case 12 : rd[i1++]=7;
					break;
				case 11 : rd[i1++]=8;
					break;
				case 10 : rd[i1++]=9;
					break;
				case 4 :  rd[i1++]=-1;
					break;
				case 3 : rd[i1++]=0 ;
					break;
				case 2 : rd[i1++]=11;
				    break;
                default :
					break;
			               }
	        }
		
         while (rd[4]==11)
		   { rd[4]=0;
			 ab=rd[0]*10+rd[1];
		     cd=rd[3];
		     DAC0832=VI(ab,cd);
			

				display(rd); 
				  
		
		    	i1=0;
			  }	 



     	   }
		 
 }			   
	   
			   
 

			 
  



	

⌨️ 快捷键说明

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