×
单片机 > 单片机程序设计 > 详情

PIC16F72单片机---中断测试程序

发布时间:2020-06-03 发布时间:
|
/*************PIC16F72单片机程序******************************/

/*************************************************************/
/*****File  Function :  中断练习程序                     *****/
/*****Program Author :  ZhengWen(ClimberWin)             *****/
/*****MCU            : PIC16F72 外部晶振6MHZ            *****/
/*****Compile Date   :  2010/11/9                       *****/
/*****Edition Info   :  V1.0                             *****/
/*************************************************************/
//
/*修改日期:                                                 */

/************************************/
#include
//配置字
__CONFIG(11111110111001);//bit13-bit7=1;bit6 欠压使能(1 enable);bit5=1;bit4 代码保护(0保护);
//bit3 上电延时(0 enable);bit2 看门狗(1 enable);bit1-bit0 时钟选择 (11 RC 10 HS 01 XT OO LP)

#define uchar unsigned char
#define uint unsigned int


void Init(void);     //初始化子程序
void LCD_init(void); //LCD初始化程序
void LCD_clear(void);
void LCD_write_english_string(unsigned char X,unsigned char Y,const char *s);
void LCD_write_byte(unsigned char data, unsigned char command);
void delayms(unsigned int count);
void leddisplay(void);
void keytest(void);  //按键测试程序
#define LED1                   RC0
#define LED2                   RC1

#define KEY1                   RB0
#define KEY2                   RC2
#define KEY3                   RC3

/*********************************************/  
void delayms(unsigned int count)
{
 uint i,j;
 for(i=0;i  for(j=0;j<120;j++);
}
/*********************************************/  
void Init(void)
 { 
     PORTA = 0B00000000;
     PORTB = 0B00000000;
     PORTC = 0B00000000;    

     TRISA = 0B00000000;//设置PORTA口为输出,作为LCD显示口
     TRISB = 0B00100001;//设置RB0为输入,作为按键口
     TRISC = 0B00001100;//设置RC2,RC3为输入,作为按键口

     RBPU=0;//PORTB上拉使能
///////////中断配置///////////////////////////////////////
     INTE=1; //RB0(INT)中断使能
     INTF=0; //RB0(INT)中断标志位,1表示有中断,必须软件清零
     GIE=1;//全局中断使能
}

///////////////////////////////////////
/////////////中断子程序//////////////////
void interrupt ISR(void)//进入中断计数值加1,并输出显示
{
 INTE=0; //关中断
 INTF=0;  //清除中断标志位
 LED1=!LED1;
 INTE=1; //开中断
}

///////////LED显示程序///////////////
void leddisplay(void)//LED切换显示
{
     LED1=0;
     LED2=1;
     delayms(300);
     LED1=1;
     LED2=0;
     delayms(300);
     LED1=1;
     LED2=1;
}

////////////按键测试程序/////////////////
void keytest(void)  //按键测试程序
{
  if(KEY1==0)
   {    
      LED1=!LED1;
    while(KEY1==0)    //按键去抖
     { delayms(100);}
    }
   /////////////////
     if(KEY2==0)
   {    
      LED2=!LED2;
    while(KEY2==0)    //按键去抖
     { delayms(100);}
    }
////////////////
     if(KEY3==0)
   {    
      LED1=!LED1;
      LED2=!LED2;
    while(KEY3==0)    //按键去抖
     { delayms(100);}
    }
}

////////////主程序/////////////////////////
void main (void)
{
 Init();//初始化程序 
leddisplay();//LED显示程序
  while(1);

}



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32 TIMER2的使用