- 按键程序
1.1 主函数
cpp
#include <reg51.h>
#include "digit.h"
#include "key.h"
void delay(int n)
{
while (n--);
}
int main(void)
{
int cnt = 0;
init_digit();
init_key();
while (1)
{
if (2 == key_pressed())
{
cnt++;
delay(0x5fff);
}
show_number(cnt);
}
return 0;
}
1.2 头文件
cpp
#ifndef _KEY_H_
#define _KEY_H_
extern void init_key(void);
extern int key_pressed(void);
#endif
1.3 源文件
cpp
#include <reg51.h>
#include "digit.h"
#include "key.h"
void init_key(void)
{
P1 |= ((1 << 4) | (1 << 5) | (1 << 6) | (1 << 7));
P3 |= (1 << 5);
}
int key_pressed(void)
{
int ret = 0;
if (0 == (P1 & (1 << 4)))
{
ret = 1;
}
else if (0 == (P1 & (1 << 5)))
{
ret = 2;
}
else if (0 == (P1 & (1 << 6)))
{
ret = 3;
}
else if (0 == (P1 & (1 << 7)))
{
ret = 4;
}
else if (0 == (P3 & (1 << 5)))
{
ret = 5;
}
return ret;
}
- 中断
2.1 中断的定义
当CPU正在处理某件事情的时候外界发生了紧急事件请求,要求CPU暂停当前的工作,转而去处理这个紧急事件,处理完后,再回到原来中断的地方继续原来的工作。
2.2 中断源的定义
可以引发中断是事件、条件或者硬件模块
常见的中断源
-
外部中断源
-
定时器、计数器中断源
-
串口中断源
-
ADC中断源
-
比较器中断源
-
看门狗定时器中断源
2.3 中断执行流程
-
中断源发出中断请求
-
CPU查询中断是否被运行、以及中断是否被屏蔽
-
CPU考察中断优先级
-
CPU保护现场
-
执行中断服务函数
-
恢复现场
2.4 外部中断的初始化函数
cpp
void init_eint(void)
{
P3 |= ((1 << 2) | (1 << 3) );
IE |= ((1 << 7) | (1 << 2) | (1 << 0));
TCON |= ((1 << 0) | (1 << 2));
}
2.5 外部中断的的作用函数
cpp
void eint0_handeler(void) interrupt 0
{
delay(0x1fff);
cnt++;
}
void eint1_handeler(void) interrupt 2
{
delay(0xfff);
cnt--;
}
3.定时器