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

📄 main.c

📁 用motalor sc12芯片实现按键计数
💻 C
字号:

/* LEDS.C example file for Motorola MC9S12DG128 Evaluation Board */

#include <hidef.h>
/* port A definitions */
#define PORTA    (*((volatile unsigned char*)(0x0000)))
#define DDRA     (*((volatile unsigned char*)(0x0002)))
/* port B definitions */
#define PORTB    (*((volatile unsigned char*)(0x0001)))
#define DDRB     (*((volatile unsigned char*)(0x0003))) 

/*PORT P definitions */
#define PORTP   (*((volatile unsigned char*)(0x0258)))
#define DDRP    (*((volatile unsigned char*)(0x025A)))

#define INTCR   (*((volatile unsigned char*)(0x001E)))



int number=0;
int i_1=8,j_2=8,k_3=8,h_4=8;

void display_sub(int t)
{
  int i=t;
  if(i==0)PORTP=0x14;
  if(i==1)PORTP=0xD7;
  if(i==2)PORTP=0x4C;
  if(i==3)PORTP=0x45;
  if(i==4)PORTP=0x87;
  if(i==5)PORTP=0x25;
  if(i==6)PORTP=0x24;
  if(i==7)PORTP=0x57;
  if(i==8)PORTP=0x04;
  if(i==9)PORTP=0x05;
}


void display_chose_sub(int chose_display , int display)
{
  int i=chose_display;
  int j=display;
  int display_chose;
  switch(i)
  {
    case 0: 
    {
      display_chose=0xEF;
      PORTA |=0x80;/*in order to turn off LED*/
      PORTA &=display_chose;/*chose the LED you want*/
      display_sub(j);/*display the number*/
      
      break;
    }
    case 1:
    {
      display_chose=0xDF;
      PORTA |=0x10;
      PORTA &=display_chose;
      display_sub(j);
      
      break;
    }
     case 2:
    {
      display_chose=0xBF;
      PORTA |=0x20;
      PORTA &=display_chose;
      display_sub(j);
      
      break;
    }
     case 3:
    {
      display_chose=0x7F;
      PORTA |=0x40;
      PORTA &=display_chose;
      display_sub(j);
      
      break;
    }
  }
}

void delay(void)/*delay 500us*/
{
  int p=500;
  for(;p>0;)
   {
     p--;
   
        asm
{
nop
}
   }
} 


#pragma TRAP_PROC
void interrupt_count_ISR(void)
{
   
asm{
sei
}
  
  
  number++;
  h_4=number/1000;
  k_3=(number-h_4*1000)/100;
  j_2=(number-h_4*1000-k_3*100)/10;
  i_1=number-h_4*1000-k_3*100-j_2*10;
  
 
  asm
{
cli
}
   
}



#pragma TRAP_PROC
void UnimplementedISR(void)
{
   /* Unimplemented ISRs trap.*/
   asm
{
nop
}
}



void main(void)
{
 
  INTCR=0xE0;/*for the down edge*/  
  DDRA=0xfe;/* PTA0 as input */
  PORTA|=0xfe;
  
  DDRB=0xff; /* PTB as output */
  PORTB=0;  /* LEDs on */
  
  DDRP=0xff;
 asm
{
cli
}
  
  while(1)
 {
 
  display_chose_sub(0,i_1);
  delay();
  display_chose_sub(1,j_2);
  delay();
  display_chose_sub(2,k_3);
  delay();
  display_chose_sub(3,h_4);
  delay();
  }
}



⌨️ 快捷键说明

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