键盘扫描:
.c文件:
#include "bsp.h"
sbit K1 = P0^0;
sbit K2 = P0^1;
unsigned char keyvalue = 0;
void bsp_keyscan(void)
{
if(K1 == 0)
{
keyvalue = 1;
}
if(K2 == 0)
{
keyvalue = 2;
}
}
sbit定义变量名字 让其等价于某个端口
即这个端口获取到的值和这个变量值相同
Unsigned char 数据范围在0-256
Unsigned int 数据范围在 0-65536
函数声明指定好返回值(没有就用void)、指定好传入的参数类型(没有就用void)
中断:
使用中断有哪些优点?
1. 分时操作。CPU可以分时为多个I/O设备服务,提高了计算机的利用率;
2.实时响应。CPU能够及时处理应用系统的随机事件,系统的实时性大大增强;
3.可靠性高。CPU具有处理设备故障及掉电等突发性事件能力,从而使系统可靠性提高。
IE是中断寄存器:里面包含了 EX0(开启int0中断),
ET0,(开启定时计数器0中断)IT0{=0:下降沿触发
= 1 :电平触发}
EX1(开启int1中断),
ET1,(开启定时计数器0中断)
ES,(打开串口中断)
EA(允许所有中断)
初始化Int(外部中断)的.c文件:
#include "bsp.h"
void int0init(void)
{
IT0 = 1; //下降沿触发
EX0 = 1;//打开外部中断
EA = 1; //允许所有中断
}
void int1init(void)//同上
{
IT1 = 1;
EX1 = 1;
EA = 1;
}
void ISR_INT0(void) interrupt 0 // 写法标准就是这样int0 t0 int1 t1 s
{ //外部中断0定时计数器0外部中断1定时计数器1串口中断
P1 = 0x55;
}
void ISR_INT1(void) interrupt 2 // int0 t0 int1 t1 s分别代表interrupt 01234
{
P1 = 0xAA;
}
根据中断的说明进行程序的书写
同样定时计数器中断初始化的.c文件:
#include "bsp.h"
#define FOSC 11059200L //告知使用的脉冲频率为11.0592MHZ
#define TOMS 65536 - FOSC/12/1000 //一秒定时中断的初始值
//计数到65536就会产生溢出中断 FOSC/12/1000次正好是一毫秒
unsigned int count = 0;
sbit LED = P1^0;
void timer0init(void)
{
TMOD |= 0x01;//设置定时计数器的工作模式:模式1:0000 0001
TL0 = TOMS;
TH0 = TOMS>>8;//载入计数初值,高八位右移八位赋值给TH
ET0 = 1; //打开定时计数器0中断
EA = 1; //允许所有中断
TR0 = 1; //允许溢出中断
}
void ISR_timer0(void) interrupt 1
{
TL0 = TOMS;
TH0 = TOMS>>8;//每次都载入计数初值
count++;
if(count == 1000)//计数到一秒的时候
{
count = 0;
LED = ~LED;
}
}
void timer1init(void)
{
}