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

📄 main.c

📁 这是2103的液晶程序
💻 C
字号:
/****************************************Copyright (c)****************************************************
**                            Guangzhou ZHIYUAN electronics Co.,LTD.
**                                      
**                                 http://www.embedtools.com
**
**--------------File Info---------------------------------------------------------------------------------
** File name:               main.c
** Latest modified Date:    2008-12-14
** Latest Version:          v0.1
** Descriptions:            使用硬件I2C对E2PROM进行读写操作,LED1、2、3短接
**                          修改中断使能方法,采用FIQEnable ()、IQREnable ()方式
**--------------------------------------------------------------------------------------------------------
** Created by:              huangwujiaoi           
** Created date:            2008-11-18
** Version:                 The original version
** Descriptions:            
**
**--------------------------------------------------------------------------------------------------------
** Modified by:             
** Modified date:           
** Version:                 
** Descriptions:            
**
*********************************************************************************************************/

#include  "config.h" 

#define   CAT24WC02 0xA6                                                /* 定义器件地址                 */
#define   LED1      (1 << 17)                                           /* 定义P0.17控制LED1            */	
#define   LED2      (1 << 18) 
#define   LED3      (1 << 19) 

/*********************************************************************************************************
** 函数名称:I2C_Init
** 函数功能:主模式I2C初始化,包括初始化其中断为向量IRQ中断。
** 入口参数:fi2c    初始化I2C总线速率,最大值为400K
** 出口参数:无
*********************************************************************************************************/

void  I2C_Init(uint32 fi2c)
{    
   if(fi2c>400000) fi2c = 400000;                                       /* 判断通信速率                 */
   PINSEL0 = (PINSEL0&0xFFFFFF0F) | 0x50;                               /* 设置I2C控制口有效            */
   
   I2SCLH = (Fpclk/fi2c + 1) / 2;	                                    /* 设置I2C时钟为fi2c            */
   I2SCLL = (Fpclk/fi2c) / 2;
   I2CONCLR = 0x2C;
   I2CONSET = 0x40;					                                    /* 使能主I2C                    */
   IRQEnable ();                                                        /* 使能IRQ中断                  */
   /*
    *设置I2C中断允许
    */
   VICIntSelect = 0x00000000;		                                    /* 设置所有通道为IRQ中断        */
   VICVectCntl0 = 0x29;				                                    /* I2C通道分配到IRQ slot 0      */
   VICVectAddr0 = (int)IRQ_I2C;	                                        /* 设置I2C中断向量地址	        */
   VICIntEnable = 0x0200;                                               /* 使能I2C中断                  */
}  

/*********************************************************************************************************
** 函数名称:DelayNS
** 函数功能:长软件延时
** 入口参数:dly		延时参数,值越大,延时越久
** 出口参数:无
*********************************************************************************************************/

void  DelayNS(uint32  dly)
{      
   uint32  i;
   for(; dly>0; dly--) 
       for(i=0; i<50000; i++);
}
	
/*********************************************************************************************************
** 函数名称:WrEepromErr
** 函数功能:读写EEPRM流水等联系闪烁
** 入口参数:无
** 出口参数:无
*********************************************************************************************************/	

void  WrEepromErr(void)	
{  
   uint32 i;
   for(i=0;i<8;i++) {
       IO0SET = LED1|LED2|LED3;
       DelayNS(20);
       IO0SET = LED1;
       IO0CLR = LED2|LED3;
       DelayNS(20);
       IO0SET = LED2;
       IO0CLR = LED1|LED3;
       DelayNS(20);
       IO0SET = LED3;
       IO0CLR = LED1|LED2;
       DelayNS(20);
   }
}
			
/*********************************************************************************************************
** 函数名称:main
** 函数功能:向E2PROM写入10字节数据,然后读出判断是否正确写入。
** 入口参数:无
** 出口参数:无
*********************************************************************************************************/

int  main(void)
{        
    uint8  i;
    uint8  data_buf[30];                                                /* 定义读写数据缓冲区           */                 
    PINSEL0 = 0x00000000;	                                            /* 定义引脚功能                 */		
    PINSEL1 = 0x00000000;		
    IO0DIR = LED1|LED2|LED3;
    IO0SET = LED1|LED2|LED3;
    DelayNS(50);
   
    I2C_Init(100000);                      	                            /* I2C初始化,通信速率100K      */
   
    while(1){
     
         for(i=0; i<10; i++) data_buf[i] = i+'0';
         ISendStr(CAT24WC02, 0x00, data_buf, 10);	                    /* 在0x00地址处写入10字节数据   */
         DelayNS(1);                      		                        /* 等待写周期结束               */
      
         for(i=0; i<10; i++) data_buf[i] = 0;
         IRcvStr(CAT24WC02, 0x00, data_buf, 10);	                    /* 在0x00地址处读出10字节数据   */
         /*
          *校验读出的数据,若不正确流水等闪烁
          */
         for(i=0; i<10; i++) {
             if(data_buf[i]!=(i+'0'))
             WrEepromErr();                    							/* 判断比较数据是否一致         */
         }
         IO0SET = LED1;                                                 /* 数据一致则等闪烁一下         */
         DelayNS(20);
         IO0CLR = LED1;
    }
    return(0);					
}

/*********************************************************************************************************
**                            End Of File
*********************************************************************************************************/

⌨️ 快捷键说明

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