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

📄 os_rtc.c

📁 ARM嵌入式系统关于实时时钟基于c语言的实验代码
💻 C
字号:
#include "register_variant.h"
#define LED_CS2   (*((volatile unsigned short *)(0x08300000)))
#define KEY_VALUE (*(volatile unsigned char*)(switch_dummyAddress))
#define LAST_KEY_VAL  (*(volatile unsigned char *)(buttonStatus))	
#define LAST_LED_VAL   (*(volatile unsigned char *)(ledStatusBuffer))
#define REG_ICPR (*(volatile unsigned long *)(int_ICPR))
#define REG_RTSR (*(volatile unsigned long *)(rtc_RTSR))

void led_statusSet()
{
  LED_CS2 = LAST_LED_VAL;
}



int button_statusFetch(void)
{
   char i=0,j=8,left_move=1;   

   i = ~KEY_VALUE;
   if (i!=00)
     {
       for(;j>0;j--)
         if (i & 0x1) 
             break;
         else 
         {
            i=i>>1; 
            left_move ++;          
         }
     }
    else 
       left_move =0;    

 return left_move;

}


void identify()
{
  unsigned long enable_bit=0x40000000;
  char right_move=4;
    for(; right_move>0; right_move--)
       if (REG_ICPR & enable_bit)
            {   
             
                         
                LAST_LED_VAL = (LAST_LED_VAL -1) ;
                led_statusSet( );

                REG_RTSR = REG_RTSR | 0x2;
                

                break;

            }
       else 
           { 
             enable_bit = enable_bit >> 1;
                       }
}


void applicationmode()
{
   
   int key_val = 0;   
 
   LAST_LED_VAL = 0x0ff;
   led_statusSet() ;
 

   while(1)
   {
     key_val = button_statusFetch();
     if (key_val != 0)
     {
       switch(key_val)
        {
         case 8 :
             REG_RTSR = 0xa;
             ;
             break;

         case 7:
             REG_RTSR = 0x2;
             LAST_LED_VAL = 0x0;
             led_statusSet() ;
             return;
             break;
        }
      
     }
       
        identify();
   }

}



void dummyOs()
{
 int led_sharp;
 char button_val=0;

 while(1) 
   {

   led_sharp=ledShareInterval;
   for(; led_sharp>0; led_sharp--)
      {
         button_val = button_statusFetch();         
         if (button_val != 0)
               break;
      }


    if (LAST_KEY_VAL != button_val && button_val!=0) /*if the laster is same as the current value and key are pressed */
       {
        LAST_KEY_VAL =  button_val;

        applicationmode();

       }   
    else 
        LAST_LED_VAL = ~LAST_LED_VAL;
    

    led_statusSet();

   }

}

⌨️ 快捷键说明

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