📄 main.c
字号:
//-----------------------------------------------------------------
// 名称: 用带SPI接口的MCP23S17扩展16位通用IO端口
//-----------------------------------------------------------------
// 说明: 本程序将MCP23S17的GPIOA的8位及GPIOB的低6位设为输出端口,
// 将GPIOB的高2位设为输出端口,演示了条形LED在按键控制的下
// 的滚动效果.
//
//-----------------------------------------------------------------
#define INT8U unsigned char
#define INT16U unsigned int
#define _XTAL_FREQ 1000000UL
#include <pic.h>
//MCP23S17器件及寄存器地址定义(ICON.BANK默认为0)
#define MCP_ADDR 0x40 //MCP23S17地址(地址格式:0 1 0 0 A2 A1 A0 R/W)
#define IODIRA 0x00 //设置GPIOA方向
#define IODIRB 0x01 //设置GPIOB方向
#define GPIOA 0x12 //获取或设置GPIOA的值
#define GPIOB 0x13 //获取或设置GPIOB的值
#define OLATA 0x14 //设置OLATA的值
#define OLATB 0x15 //设置OLATB的值
#define INTCONA 0x0A //GPIOA端口中断控制
#define INTCONB 0x0B //GPIOB端口中断控制
#define GPPUB 0x0D //GPIOB内部100K电阻上拉
#define IOCON 0x08 //IO控制寄存器
//SPI使能与禁用
#define SPI_EN() RC6 = 0
#define SPI_DI() RC6 = 1
//当前演示操作序号(0,1)
volatile INT8U Demo_OP_No = 0;
//-----------------------------------------------------------------
// SPI主机初始化
//-----------------------------------------------------------------
void SPI_MasterInit()
{
}
//-----------------------------------------------------------------
// SPI数据传输
//-----------------------------------------------------------------
INT8U SPI_Transmit(INT8U dat)
{
//启动数据传输,然后等待传输结束,最后返回SSPBUF(读值时可用)
}
//-----------------------------------------------------------------
// 向MCP23S17写入器件地址,寄存器地址,命令/数据共三个字节
//-----------------------------------------------------------------
void Write_MCP23S17(INT8U Device_addr,INT8U Reg_addr, INT8U CD)
{
}
//-----------------------------------------------------------------
// 根据器件地址,寄存器地址,从MCP23S17读字节
//-----------------------------------------------------------------
void Read_MCP23S17(INT8U Device_addr,INT8U Reg_addr, INT8U *Dat)
{
}
//-----------------------------------------------------------------
// 初始化MCP23S17
//-----------------------------------------------------------------
void Initialise_MCP23S17()
{
//设置I/O方向(1为输入,0为输出),其中GPIOB高2位按键输入,其他全部设为输出
}
//-----------------------------------------------------------------
// 检测处理
//-----------------------------------------------------------------
void Key_Handle()
{
INT8U Key_Port_Status;
//从MCP23S17的GPIOB端口读取按键值
//根据按键改变当前演示操作序号Demo_OP_No
//如果未按键则保持原演示序号
}
//-----------------------------------------------------------------
// 主程序
//-----------------------------------------------------------------
void main()
{
INT8U i; INT16U Pattern;
SPI_MasterInit(); //SPI主机初始化
Initialise_MCP23S17(); //MCP23S17初始化
while (1)
{
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -