钻石会员
主题
帖子
积分13500
阅读权限50
注册时间2010-4-23
最后登录1970-1-1
在线时间 小时
|
这是一个 用 PIC12F629 单片机做的一个简单的延时电路, 程序已经在 XC8 编译环境下调试通过, 本程序没有使用 时钟,
中断等资源, 尽量降低对单片机内部知识的了解, 方便使用者根据自身的需求修改程序.
======================================================================
#include <xc.h> /* XC8 General Include File */
#pragma config BOREN = OFF, MCLRE = OFF, WDTE = OFF, PWRTE = ON, FOSC = INTRCIO
#define LED1 GPIO5 //定义LED灯所在的管脚
#define KEY1 GPIO4 //定义按键管脚
unsigned char KEY_press_mk;
unsigned int KEY_press_num;
void interrupt isr(void)
{ unsigned int k;
k=0;
}
void Delay_1000ms(void)
{ unsigned int k;
k=42940; while (--k) ;
k=42940; while (--k) ;
// 整数 k, 42940=5000ms, 1718---20ms
}
void Delay_20ms(void)
{ unsigned int k;
k=1718; while (--k) ;
}
void Delay_1ms(void)
{ unsigned char t1, t2;
// 字符变量t1=171+171 ---> 1ms
t1=171; while (--t1) ;
t1=171; while (--t1) ;
}
void MCU_Init(void) //单片机初始化程序
{ unsigned char c1, c2;
CMCON=0x07; //关闭模拟比较器,使GP<2:0>为数字IO
c1=OPTION_REG;
OPTION_REG=c1&0x7f; //GPPU_bit=0, 允许弱电上拉(全局)
WPU=0x37; //GP5,GP4, GP2,GP1,GP0 弱电上拉,
GIE=0; //关闭中断
PEIE=0;
}
void main(void)
{ unsigned int k;
MCU_Init(); //单片机初始化程序
//********* 下面程序, 使用者根据自身的需要, 进行适当的修改 ***********
//定义GP5为输出, 没定义的管脚, 缺省值为输入
TRISIO=0b11011111;
//初始化一些变量
KEY_press_num=0;
KEY_press_mk=0;
LED1=0;
next_1:
//KEY_press_num 的值, 根据测试的参数, 进行适当的修改
if (KEY1==0) KEY_press_num++; else KEY_press_num=0;
if (KEY_press_num>15000) { KEY_press_mk=1; KEY_press_num=0; }
//下面是按键之后, 需要做的事情, 按一下按键, 亮3秒
if (KEY_press_mk) {
KEY_press_mk=0;
LED1=1; //LED灯亮
Delay_1000ms();
Delay_1000ms();
Delay_1000ms();
LED1=0; //LED灯熄
}
goto next_1; //循环
}
======================================================================
|
|