PIC12F508A一个开关控制一个灯的亮灭程序,默认开机全部不亮。
/*
* File: main.c
* Author: li fengjun
* 开发环境:MPLAB X IDE v4.15
* 操作系统:Windows 10
* NAME:PIC12F509A_LED3_Light
* 功能:点亮LED的记忆控制程序,K1控制LED2长亮,再按一下K1控制LED2灭。(锁存)
* 日期: 20210701, 09:16
*/
#include <xc.h>
#include <stdint.h>
// CONFIG
#pragma config OSC = IntRC // Oscillator Selection bits (internal RC oscillator)
#pragma config WDT = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config CP = OFF // Code Protection bit (Code protection off)
#pragma config MCLRE = ON // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is MCLR)
// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.
#define LED2 GP0
//#define LED3 GP1
//#define key_low5 GP4 //K5
#define K1 GP5 //K1
//#define TMCLR GP3
//#define ICSCLK GP1
//#define ICSDATA GP0
#typedef signed char int8_t
#typedef short int int16_t
/*******************************************************************************
* 函 数 名 : delay() *
* 函数功能 : 延时函数 *
* 功 能 : 当i=1时,大约延时10us *
* 输 入 : 无 *
* 输 出 : 无 *
********************************************************************************/
void delay(int16_t i)
{
while(i--);
}
/*******************************************************************************
* 函 数 名 : keypros() *
* 函数功能 : 按键处理函数 *
* 功 能 : 判断按键是否按下 *
* 输 入 : 无 *
* 输 出 : 无 *
********************************************************************************/
void keypros()
{
if(K1==0) //检测按键K1是否按下
{
delay(1000); //消除抖动 一般大约10ms
if(K1==0) //再次判断按键是否按下
{
LED2=~LED2; //LED2状态变化一次
}
while(!K1); //检测按键是否松开
}
}
/*******************************************************************************
* 函 数 名 : main() *
* 函数功能 : 主函数 *
* 功 能 : *
* 输 入 : 无 *
* 输 出 : 无 *
********************************************************************************/
void main()
{
OPTION = 0x40; //TOCS=0;选择定时器模式,让GP2为普通I/O。
TRIS = 0xFC; //GP0,GP1设置为OUTPUT,其他设置为INPUT。
while(1)
{
keypros();//按键处理函数
}
}