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

📄 main_rtc.c

📁 详细讲解了有关PIC33系列单片机的使用方法和各个功能模块的使用方法
💻 C
字号:

/**********************************************************************
* ?2006 Microchip Technology Inc.
*
* FileName:        main_rtc.c
* Dependencies:    p24HJ256GP610.h
* Processor:       PIC24H
* Compiler:        MPLAB?C30 v2.01 or higher
*
* SOFTWARE LICENSE AGREEMENT:
* Microchip Technology Inc. (揗icrochip? licenses this software to you
* solely for use with Microchip dsPIC?digital signal controller
* products. The software is owned by Microchip and is protected under
* applicable copyright laws.  All rights reserved.
*
* SOFTWARE IS PROVIDED 揂S IS.? MICROCHIP EXPRESSLY DISCLAIMS ANY
* WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED, INCLUDING BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
* PARTICULAR PURPOSE, OR NON-INFRINGEMENT. IN NO EVENT SHALL MICROCHIP
* BE LIABLE FOR ANY INCIDENTAL, SPECIAL, INDIRECT OR CONSEQUENTIAL
* DAMAGES, LOST PROFITS OR LOST DATA, HARM TO YOUR EQUIPMENT, COST OF
* PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY OR SERVICES, ANY CLAIMS
* BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF),
* ANY CLAIMS FOR INDEMNITY OR CONTRIBUTION, OR OTHER SIMILAR COSTS.
*
* REVISION HISTORY:
*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Author            Date      Comments on this revision
*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Richard Fischer   07/14/05  Initial Release
* Priyabrata Sinha  01/27/06  Ported to non-prototype devices 
* Priyabrata Sinha  01/30/06  Added config macros
*
*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*
* ADDITIONAL NOTES:  
*
* Simple demo program showing a RTC and ADC conversion on the LCD
* DMA code is included here but not fully tested.
*
* C30 Optimization Level: -O1
*
**********************************************************************/

#include "p24FJ128GA010.h"
#include "lcd.h"
#include "common.h"
/*
_FGS(GWRP_OFF & GCP_OFF);
_FOSCSEL(FNOSC_PRIPLL);
_FOSC(FCKSM_CSDCMD & OSCIOFNC_OFF & POSCMD_XT);
_FWDT(FWDTEN_OFF);
*/

_CONFIG1( JTAGEN_OFF & GCP_OFF & GWRP_OFF & COE_OFF & FWDTEN_OFF & ICS_PGx2) 
_CONFIG2( FCKSM_CSDCMD & OSCIOFNC_ON & POSCMOD_HS & FNOSC_PRI )

void Update_LCD( void );
const char mytext[] =  "   PIC24H Demo  ";
const char mytext1[] = "Press S3 to cont";
const char time_msg[] = "Time 00: 00: 00 ";
const char adc_msg1[] = " RP5 = 0.00 Vdc  ";

// Using internal FRC oscillator at 8MHz
// Fosc = Fin * (DIVISOR<8:0> + 2 / ((PRESCLR<4:0> +2) * (PLLPOST<1:0> +1) )
// DIVISOR<8:0> bits located in PLLFBF SFR ---> (PLL Multiplier)
// PLLPOST<1:0> bits located in CLKDIV SFR ---> (PLL VCO output divide)
// PRESCLR<4:0> bits located in CLKDIV SFR ---> (PLL Phase Detector input divide)

int main ( void )
{
	/* Initialize some general use variables */
	hours, minutes, seconds = 0;
	rtc_lcd_update = 0;

        //The settings below set up the oscillator and PLL for 16 MIPS as
        //follows:
        //            Crystal Frequency  * (DIVISOR+2)
        // Fcy =     ---------------------------------
        //              PLLPOST * (PRESCLR+2) * 4	
        PLLFBD = 0x00A0;
        CLKDIV = 0x0048;
 
	/* set LEDs (D3-D10/RA0-RA7) drive state low */
	LATA = 0xFF00; 
	/* set LED pins (D3-D10/RA0-RA7) as outputs */
	TRISA = 0xFF00; 
	
	/* Initialize LCD Display */
	Init_LCD();

	/* Welcome message */
	home_clr();
	puts_lcd( (char*) &mytext[0], sizeof(mytext) -1 );
	line_2();
	puts_lcd( (char*) &mytext1[0], sizeof(mytext1) -1 );
		
	/* wait here until switch S3 is pressed */
	while ( PORTDbits.RD6 );
		    
  	/* Initialize Timer 1 for 32KHz real-time clock operation */
    Init_Timer1();

    /* Initial LCD message for TOD */
	home_clr();
	puts_lcd( (char*) &time_msg[0], sizeof(time_msg) -1 );
 	line_2();
	puts_lcd( (char*) &adc_msg1[0], sizeof(adc_msg1) -1 );
          
    /* Initialize ADC  */
    Init_ADC();
    
    /* Initialize DMA Channel 0 */
//    Init_DMAC0();
      
    /* Infinite Loop */
    while ( 1 ) 
    { 
      /* check if time to update LCD with TOD data */  
      if ( rtc_lcd_update ) 
	  {
		 hexdec( hours );
		 Update_LCD();
		 rtc_lcd_update = 0;
      }	 	
      /* check if time to update LCD with ADC data */
  	  if ( adc_lcd_update ) 
  	  {
       	 line_2();
		 advolt( temp1 );
       	 cursor_right();
       	 cursor_right();
       	 cursor_right();  
       	 cursor_right();
       	 cursor_right();
       	 cursor_right();
       	 cursor_right();
		 lcd_data( adones );
       	 cursor_right();
	  	 lcd_data( adtens );
	  	 lcd_data( adhunds );	
	     adc_lcd_update = 0;
	  }
	};
}


/*---------------------------------------------------------------------
  Function Name: Update_LCD
  Description:   Update LCD for real-time clock data
  Inputs:        None
  Returns:       None
-----------------------------------------------------------------------*/
void Update_LCD( void )
{

   	/* position LCD cursor at column, row */
  	home_it();
    cursor_right();
    cursor_right();
    cursor_right();
    cursor_right();
    cursor_right();
	lcd_data(tens + 0x30);
	lcd_data(ones + 0x30);
    
    hexdec( minutes );
    /* position LCD cursor at column, row */
	cursor_right();
    cursor_right();
	lcd_data(tens + 0x30);
	lcd_data(ones + 0x30);
	 
  	hexdec( seconds );
	/* position LCD cursor at column, row */
	cursor_right();
    cursor_right();
	lcd_data(tens + 0x30);
	lcd_data(ones + 0x30);
   
}

⌨️ 快捷键说明

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