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

📄 main.c

📁 cy8c24794单片机程序
💻 C
字号:
//----------------------------------------------------------------------------
// C main line
//----------------------------------------------------------------------------

#include <m8c.h>        // part specific constants and macros
#include "PSoCAPI.h"    // PSoC API definitions for all User Modules
#pragma interrupt_handler  Timer8
#pragma interrupt_handler  Keyscan
#pragma interrupt_handler  Timer16

#define LED1  0B11111110  
#define LED2  0B11111101 
#define LED3  0B11111011
#define LED4  0B11110111 

#define SELECT  PRT4DR 
#define DATA    PRT3DR 

BYTE NUM[17] = {0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0x11,0xc1,0x63,0x85,0x61,0x71,0xff};

WORD  weishu = 1  ,  gewei = 0  ,  shiwei = 0 , baiwei = 0 , qianwei = 0 , count = 0 ;  
BYTE  key = 0 ,  key1 = 0 , key2 = 0 , key3 = 0 , key4 = 0 , temp = 0 ; 
BYTE  times = 0  ; 
BYTE  time =  0 ; 

void Display() 
{
	switch( weishu )
	{
	  case 1 :
	     if( (count/200) % 2 == 0 )
	         {
	          SELECT = LED4 ; 
	          DATA = NUM[gewei] ; 
	          break ; 
	          }
	  case 2 : 
	  		  SELECT = LED3 ; 
	  		  DATA = NUM[shiwei] ; 
	  		  break ;
	  case 3 : 
	          SELECT = LED2 ; 
	          DATA = NUM[baiwei] & 0B11111110 ; 
	          break ; 
	  case 4 :
	  		  SELECT = LED1 ; 
	  		  DATA = NUM[qianwei] ; 
	  		  break ; 
	  default : 
	          break ; 
	} 
	weishu ++ ; 
	if( weishu == 5 )
	       weishu  =  0 ; 
}

void Display_Key()
{
  count ++ ; 
  if( (count/200) % 2 == 0 && times != 0 )
  {
	   switch( weishu )
	   {
	     case 1 :
	              SELECT = LED4 ; 
	              DATA = NUM[key1] ;  
	              break ; 
	     case 2 : 
	     		  SELECT = LED3 ;
	     		  DATA = NUM[key2] ; 
	     		  break ; 
	     case 3 : 
	              SELECT = LED2 ;
	              DATA = NUM[key3] & 0B11111110 ; 
	              break ; 
	     case 4 : 
	     		  SELECT = LED1 ; 
	     		  DATA = NUM[key4] ;
	     		  break ;  
	     default :
	            break ; 
	   }
   }
   else 
   {
     qianwei = key1 ; 
     baiwei = key2 ; 
     shiwei = key3 ; 
     gewei = key4 ; 
     Timer16_Stop() ; 
     count = 0 ; 
     Timer8_Start() ; 
   }
}

void Timer8() 
{
	count ++ ; 
	if( count == 24000 )
	{
	  gewei ++ ; 
	    if( gewei == 10 )
	    {
	        gewei = 0 ; 
	        shiwei ++ ; 
	         if( shiwei == 6 )
	             {
	                 shiwei = 0 ; 
	                 
	                 baiwei ++ ; 
	                   if( baiwei == 10 )
	                   {
	                       baiwei = 0 ; 
	                       qianwei ++ ; 
	                       if( qianwei == 6 )
	                       {
	                          qianwei = 0 ; 
	                          baiwei = 0 ; 
	                          shiwei = 0 ; 
	                          gewei = 0 ; 
	                       }
	                   }
	             }
	    }
	  count = 0 ; 
	}
	Display() ;
}

void Timer16()
{
	Display_Key() ;
	if( times = 5 )
	      times = 0 ;  
	 
}

void Keyscan()
{
  PRT5DR = 0b11111110 ; 
  temp = PRT5DR & 0xF0 ; 
  if( temp != 0xF0 )
  {
    switch(temp)
    {
     case 0b11100000 :
            key = 0 ; break ; 
     case 0b11010000 :
            key = 1 ; break ; 
     case 0b10110000 :
            key = 4 ; break ; 
     case 0b01110000 :
     		key = 7 ; break ;  
    } 
  }
  
  PRT5DR = 0b11111101 ; 
  temp = PRT5DR & 0xF0 ; 
  if( temp != 0xF0 )
  {
    switch(temp)
    {
     case 0b11100000 :
            key = 10 ; break ; 
     case 0b11010000 :
            key = 2 ; break ; 
     case 0b10110000 :
            key = 5 ; break ; 
     case 0b01110000 :
     		key = 8 ; break ;  
    } 
  }
  
  PRT5DR = 0b11111011 ; 
  temp = PRT5DR & 0xF0 ; 
  if( temp != 0xF0 )
  {
    switch(temp)
    {
     case 0b11100000 :
            key = 11 ; break ; 
     case 0b11010000 :
            key = 3 ; break ; 
     case 0b10110000 :
            key = 6 ; break ; 
     case 0b01110000 :
     		key = 9 ; break ;  
    } 
  }
  
  PRT5DR = 0xF0 ; 
  
  if( key = 10 )
  {
      times ++ ; 
      Timer8_Stop() ; 
  }
  
  if( key = 11 )
  {
     time = ~time ; 
     if( time )
     {
        Timer8_Stop() ; 
        while(1)
	     {
	       Display(); 
	     }
	 }
     else 
     Timer8_Start() ; 
  }
  else if( key > 0 && key < 10 ) 
      {
         times ++ ; 
         if( times == 2 )
        	key1 = key ; 
  		 else if( times == 3 )
        	key2 = key ; 
  		 else if( times == 4 )
        	key3 = key ; 
 		 else if( times == 5 )
        	{
          	  key4 = key ;
         	  key =  0 ; 
        	} 
        }
  count = 0  ;
  
  Timer16_Start() ; 
  weishu = 1  ; 
}

void main()
{
    // Insert your main routine code here.
    M8C_EnableGInt ; 
    Timer8_EnableInt() ; 
    Timer16_EnableInt() ; 
    Timer8_Start() ; 
    while(1)
    {
    }
}

⌨️ 快捷键说明

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