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

📄 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:            运行RTC进行计时,将所时间值不断的通过串口向上位机发送;
**                          通讯波特率115200,8位数据位,1位停止位,无奇偶校验
**                          修改中断使能方法,采用FIQEnable ()、IQREnable ()方式
**--------------------------------------------------------------------------------------------------------
** Created by:              huangwujiao           
** Created date:            2008-11-18
** Version:                 The original version
** Descriptions:            
**
**--------------------------------------------------------------------------------------------------------
** Modified by:             
** Modified date:           
** Version:                 
** Descriptions:            
**
*********************************************************************************************************/

#include   "config.h" 
#define    PCF8563         0xA2                                         /* 定义子地址                   */
#define    UART_BPS        115200
#define	   WRADDR	       0x00		             		                /* 定义对PCF8563写单元首地址    */
#define	   RDADDR	       0x02		             		                /* 定义对PCF8563读单元首地址    */
uint8      uiYEAR;                                                      /* 年                           */
uint8      uiMONTH;                                                     /* 月                           */
uint8      uiDOM;                                                       /* 日                           */
uint8      uiDOW;                                                       /* 星期                         */
uint8      uiHOUR;                                                      /* 时                           */
uint8      uiMIN;                                                       /* 分                           */
uint8      uiSEC;                                                       /* 秒                           */ 
uint8      send_buf[16];                                                /* UART0数据接收缓冲区          */
uint8      uiDataBuf[7];                                                /* 读取时间缓冲区               */
/*********************************************************************************************************
** 函数名称: DelayNS
** 函数功能: 长软件延时
** 输入参数: uiDly	延时参数,值越大,延时越久
** 输出函数: 无
*********************************************************************************************************/

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

/*********************************************************************************************************
** 函数名称:UART0_Ini
** 函数功能:初始化串口0。设置为8位数据位,1位停止位,无奇偶校验,波特率为115200
** 输入参数:无
** 输出参数:无
*********************************************************************************************************/

void  UART0_Ini(void)
{       
    uint16  Fdiv;                                                       /* 定义波特率                   */                        
    PINSEL0 = (PINSEL0&0xFFFFFFF0) | 0x05;                              /* 引脚设置                     */
   
    U0LCR = 0x83;		                                                /* DLAB = 1,可设置波特率       */
   
    Fdiv = (Fpclk / 16) / UART_BPS;                                     /* 设置波特率                   */
    U0DLM = Fdiv / 256;							                        
    U0DLL = Fdiv % 256;						
    U0LCR = 0x03;
    U0FCR = 0x01;                    	                                /* 使能串口                     */
}
/*********************************************************************************************************
** 函数名称: I2cInit
** 函数功能: I2C初始化
** 输入参数: uiFi2c	I2C总线频率(最大400K)
** 输出参数: 无
*********************************************************************************************************/

void I2C_Init(uint32 uiFi2c)
{     
    if (uiFi2c > 400000) uiFi2c = 400000;
    PINSEL0 = (PINSEL0&0xFFFFFF0F) | 0x50;                              /* 设置I2C控制口有效断          */
    
    I2SCLH  = (Fpclk / uiFi2c + 1)  / 2;						        /* 设定I2C时钟 				    */
    I2SCLL  = (Fpclk / uiFi2c) / 2;
    I2CONCLR = 0x2C;
    I2CONSET = 0x40;									                /* 使能主I2C 		     		*/
    IRQEnable ();
    /*
    *设置I2C中断
    */
    VICIntSelect = 0x00000000;							                /* 设置所有通道为IRQ中断 		*/
    VICVectCntl0 = (0x20 | 0x09);						                /* I2C通道分配最高优先级        */
    VICVectAddr0 = (int)IRQ_I2C;						                /* 设置I2C中断向量 				*/
    VICIntEnable = 1 << 9;							                    /* 使能I2C中断 					*/
}

/*********************************************************************************************************
** 函数名称:SendByte
** 函数功能:向串口UART0发送字节数据,并等待发送完毕。
** 输入参数:data        要发送的数据
** 输出参数:无
*********************************************************************************************************/

void  SendByte(uint8 data)
{     
    U0THR = data;                                                       /* 发送数据                     */
    while( (U0LSR&0x20)==0 );                                           /* 等待数据发送                 */
}

/*********************************************************************************************************
** 函数名称:ISendBuf
** 函数功能:将缓冲区的数据发送回主机。
** 输入参数:buf         数据缓冲区
**           no          发送数据的个数
** 输出参数:无
*********************************************************************************************************/

void  ISendBuf(uint8 const *buf, uint8 no)
{      
    uint8  i;
    for(i=0; i<no; i++) SendByte(buf[i]);
} 

/*********************************************************************************************************
** 函数名称: SendTimeRtc
** 函数功能: 将RTC时间值发送到串口显示
** 输入参数: uiDat   要发送的数据
** 输出函数: 无
*********************************************************************************************************/

void SendTimeRtc (void)
{     
    uint32 bak;                                                         /* 定义局部变量                 */                            
    uint32 i;
    for(i=0;i<7;i++) {
	    uiDataBuf[i]= 0;                                                /* 清零缓冲区                   */
    }
    
    IRcvStr(PCF8563, RDADDR, uiDataBuf, 7);                             /* 读回时间数据                 */
    uiSEC    = uiDataBuf[0] & 0x7F;                                     /* 屏蔽相关位                   */
    uiMIN    = uiDataBuf[1] & 0x7F;
    uiHOUR   = uiDataBuf[2] & 0x3F;
    uiDOW    = uiDataBuf[3] & 0x3F;
    uiDOM    = uiDataBuf[4] & 0x07;
    uiMONTH  = uiDataBuf[5] & 0x1F;
    uiYEAR   = uiDataBuf[6] & 0xFF;

    bak = uiYEAR;                                                       /* 年                           */                                       
    send_buf[0] = '2';
    send_buf[1] = '0';
    send_buf[2] = bak/16+'0';
    send_buf[3] = bak%16+'0';
	
    bak = uiMONTH;                                                      /* 月                           */
    send_buf[4] = bak/16+'0';
    send_buf[5] = bak%16+'0';
	
    bak = uiDOM;                                                        /* 日                           */
    send_buf[6] = bak/16+'0';
    send_buf[7] = bak%16+'0';
    
    bak = uiDOW;                                                        /* 星期                         */
    send_buf[8] = bak/16+'0';
    send_buf[9] = bak%16+'0';
    
    bak = uiHOUR;                                                       /* 时                           */
    send_buf[10] = bak/16+'0';
    send_buf[11] = bak%16+'0';
    
    bak = uiMIN;                                                        /* 分                           */
    send_buf[12] = bak/16+'0'; 
    send_buf[13] = bak%16+'0';
    
    bak = uiSEC;                                                        /* 秒                           */
    send_buf[14] = bak/16+'0';
    send_buf[15] = bak%16+'0';
    
    ISendBuf(send_buf, 16);                                             /* 向上位机发送数据             */
    DelayNS(2);                                                         /* 等待发送完毕                 */
}

/*********************************************************************************************************
** 函数名称:Time0Init
** 函数功能:初始化定时器0,定时时间为1S。 
** 输入参数:无
** 输出参数:无
*********************************************************************************************************/

void  Time0Init(void)
{        
    /* Fcclk = Fosc*4 = 11.0592MHz*4 = 44.2368MHz
	 *Fpclk = Fcclk/4 = 44.2368MHz/4 = 11.0592MHz
     */
    T0PR = 99;			    					                        /* 设置定时器0分频为100分频     */
    T0MCR = 0x03;		   						                        /* 匹配通道0匹配中断并复位T0TC  */
    T0MR0 = 110592;	    						                        /* 比较值(1S定时值)             */
    T0TCR = 0x03;		   						                        /* 启动并复位T0TC               */
    T0TCR = 0x01; 
}  

/*********************************************************************************************************
** 函数名称: Main
** 函数功能: I2C总线对PCF8563进行读写操作
** 输入参数: 无
** 输出参数: 无
*********************************************************************************************************/

int  main(void)
{   
    uint8  td[9]={0x00,0x12,0x00,0x30,0x12,0x05,0x21,0x11,0x08};	    /* 定义初始化PCF8563字缓冲区    */
    PINSEL0 = 0x00000000;          		                                /* 设置I/O清零                  */   
    PINSEL1 = 0x00000000; 
    
    UART0_Ini();                                                        /* 初始化串口并启动             */
    DelayNS(1);                                                         /* 延时                         */
    
    I2C_Init(30000);                                                    /* I2C初始化,速率300Kbps       */
    
    ISendStr(PCF8563,WRADDR,td,0x9);	                                /* 初始化PCF8563                */
    DelayNS(5);
    
    Time0Init();                                                        /* 初始化定时器并启动定时功能   */
   
    while(1) { 
        while( (T0IR&0x01) == 0 );			                            /* 等待定时时间到               */
        T0IR = 0x01;							                        /* 清除中断标志                 */
        SendTimeRtc();                                                  /* 向上位机发送实时时钟数据     */
    }
    return(0);
}
/*********************************************************************************************************
**                            End Of File
*********************************************************************************************************/

⌨️ 快捷键说明

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