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

📄 i2test time disp.c

📁 一个I2C测试程序
💻 C
字号:
#include "config.h"
#define ZLG7290 0x70
#define BEEPCON 1<<7

uint8  rcv_buf[100];
uint8  data_buf[100];

volatile uint8  rcv_flag;
volatile uint8  time_flag;

uint32 num=0;
uint8 i,j,k,l,m,n,sec,min,hour;

void DelayNS(uint32 dly)
	{
		uint32 i;
		for(;dly>0;dly--)
		for(i=0;i<5000;i++);
	}

/*******************************************************/
//
//
/*******************************************************/
void  __irq IRQ_UART0(void)
	{
   	 	uint8 i = 0;
   		switch(U0IIR&0x0f)
    	{   
       	 	case 0x06:
            break;
            
        	case 0x04: 
            	for(i=0; i<8; i++) 
              	{  rcv_buf[num++] = U0RBR;};
            
            	rcv_flag = 1;
            	break;
            
       	 	case 0x0c: 
            	while((U0LSR&0x01)==1)
            	{
                	rcv_buf[num++] = U0RBR;
            	}
            	rcv_flag = 1;
            	break; 
            
        	case 0x02:
            	break;
            
        	default:
            	break;         
    	}
    	VICVectAddr = 0x00;
	}
	
void __irq IRQ_Time1(void)
{	
	i++;
	{
		if(i>9)
			{
				i=0;
				j++;
			}
		if(j>5)
			{
				j=0;
				k++;
			}
		if(k>9)
			{
				k=0;
				l++;
			}
		if(l>5)
			{
				l=0;
				m++;
			}
		if(n==0|n==1)
			{
				if(m>9)
				{
					m=0;
					n++;
				}
			}		
		if(n==2)
			{
				if(m>3)
				{
					m=0;
					n=0;
				while(i==j==k==l==m==n==0)
					{
						IO0CLR=BEEPCON;
						DelayNS(5);
						IO0SET=BEEPCON;
					}
				}
		    }	
     }	
	
	time_flag=1;
	T1IR=0x01;
	VICVectAddr=0x00;     	
}

/*******************************************************/
//
//
/*******************************************************/
void SendByte(uint8 data)
	{
		U0THR=data;
	}

void ISendBuf(void)
	{
		uint8 i;
		for(i=0;i<8;i++)
		SendByte(data_buf[i]);
		while((U0LSR&0x40)==0);
	}
/*******************************************************/
//
//
/*******************************************************/
void UART0_Ini(uint32 baud)
	{
		uint32 bak;
		U0LCR=0x83;
		bak=(Fpclk>>4)/baud;
		U0DLM=bak>>8;
		U0DLL=bak&0xff;
		U0LCR=0x03;	
		U0FCR=0x81;
		U0IER=0x03;
			
		VICIntSelect=0x00000000;
		VICVectCntl0=0x26;
		VICVectAddr0=(int)IRQ_UART0;
		VICIntEnable=0x00000040;
	}
	
void I2C_Init(uint32 fi2c)
	{
		if(fi2c>400000)
		fi2c=400000;
		I2SCLH=((Fpclk/fi2c+1)/2);
		I2SCLL=((Fpclk/fi2c)/2);
		I2CONCLR=0x2c;
		I2CONSET=0x40;
		
		VICIntSelect=0x00000000;
		VICVectCntl1=0x29;
		VICVectAddr1=(int)IRQ_I2C;
		VICIntEnable=0x0200;
	}
	

void Time1Init(void)
{
	T1PR=99;
	T1MCR=0x03;
	T1MR0=110592;
	T1TCR=0x03;
	T1TCR=0x01;
	
	VICIntSelect=0x00;
	VICVectCntl2=0x25;
	VICVectAddr2=(uint32)IRQ_Time1;
	VICIntEnable=0x00000020;
}
/*******************************************************/
//
//
/*******************************************************/
void Modify_Time(void)
{
   i=(rcv_buf[7] - 48);
   j=(rcv_buf[6] - 48);
   k=(rcv_buf[4] - 48);
   l=(rcv_buf[3] - 48);
   m=(rcv_buf[1] - 48);
   n=(rcv_buf[0] - 48);
    
}


void disp_Time()
{
   data_buf[0]=i;
   data_buf[1]=j;
  
   data_buf[2]=0x1f;
   
   data_buf[3]=k;
   data_buf[4]=l;
   
   data_buf[5]=0x1f;
   
   data_buf[6]=m;
   data_buf[7]=n;
   
   ZLG7290_SendBuf(data_buf,8);
}


/*******************************************************/
//
//
/*******************************************************/
	
int main(void)
{	
		
		PINSEL0=0x00000055;
		IO0DIR=BEEPCON;
		IO0SET=BEEPCON;
		
		rcv_flag =0;
		time_flag=0;
		
		Time1Init();
		I2C_Init(100000);
		UART0_Ini(115200);
		
		while(rcv_flag==0);
		Modify_Time();
        disp_Time();

		while(1)
		{	
			
			    if(time_flag==1)
			   {
				    time_flag=0;
				   disp_Time();				   		
			    }
			      
			   
			   if(rcv_flag==1)
			   {
			   		rcv_flag=0;
			   		Modify_Time();
	       			disp_Time();
			   }
			   ISendBuf();
			
		}   
		return(0);
}

⌨️ 快捷键说明

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