学习单片机第一步就是点亮LED,常用3种IO控制方法。
一;按键检测查询法
1;头文件
#include “stc8g.h”
#include “intrins.h”
2;IO口位定义
/* 发光二极管引脚定义 */
sbit LED_R = P0^5; // 红色LED
sbit LED_Y = P0^6; // 黄色LED
sbit LED_G = P0^7; // 绿色LED
/* 按键引脚定义 */
sbit K1 = P3^7; // 按键K1
sbit K2 = P3^6; // 按键K2
sbit K3 = P3^5; // 按键K3
3;延时函数
void Delay1ms() //@35MHz
{简单,略
}
4;循环判断
if(K1==0) // 如果按键K1按下
{
LED_R = !LED_R; // 改变红色LED的显示状态
}
if(K2==0)
{
LED_Y = !LED_Y;
}
二;按键检测-外部中断
1;头文件
#include “stc8g.h”
#include “intrins.h”
2;位定义
sbit LED_R = P0^5; // 红色LED
sbit LED_G = P0^7; // 绿色LED
3;延时(简单略)
4;中断处理函数
/* 按键K2按下 进入外部中断INT2 */
void INT2_Isr() interrupt 10
{
LED_R = 1; // 熄灭红色LED
}
/* 按键K1按下 进入外部中断INT3 */
void INT3_Isr() interrupt 11
{
LED_R = 0; // 点亮红色LED
}
5;打开外中断
INTCLKO = 0x30; //使能INT2 INT3 下降沿中断
EA = 1; // 打开总中断
三;按键检测-CCP捕获中断
1;头文件
#include “stc8g.h”
2;引脚位定义
/* 发光二极管引脚定义 */
sbit LED_R = P0^5; // 红色LED
sbit LED_Y = P0^6; // 黄色LED
sbit LED_G = P0^7; // 绿色LED
3;/* 按键中断处理 */
void PCA_Isr() interrupt 7
{
if(CCF2 == 1) // 如果是按键K1产生的CCP0中断
{
CCF2 = 0; // 清除中断标志位
LED_R = !LED_R;
}
else if(CCF1 == 1) // 如果是按键K2产生的CCP1中断
{
CCF1 = 0; // 清除中断标志位
LED_Y = !LED_Y;
}
else if(CCF0 == 1) // 如果是按键K3产生的CCP2中断
{
CCF0 = 0; // 清除中断标志位
LED_G = !LED_G;
}
}
4;配置PCA初始化
4.1 /* PCA初始化 设置P_SW1寄存器绑定对应的IO脚 */
P_SW1 &= ~(1<<5); // P_SW1 的第5位置0
P_SW1 |= (1<<4); //P_SW1 的第4位置1
4.2 CCON = 0x00; // PCA中断标志位清0,CCON寄存器有3位是PCA状态显示寄存器
4.3 CMOD = 0x08; // 设置PCA时钟为系统时钟 禁止PCA溢出中断
4.4 CCAPM2 = 0x11; // 扩展外部端口CCP2为下降沿中断口 对应按键K1,CCAPMx是触发设置寄存器
CCAPM1 = 0x11; // 扩展外部端口CCP1为下降沿中断口 对应按键K2
CCAPM0 = 0x11; // 扩展外部端口CCP0为下降沿中断口 对应按键K3
EA = 1; // 打开总中断
CCP可以复用到3组io,先设置引脚,外中断不够时,设置CCP复用中断也是可以的
4.1
4.2
4.3
4.4