111.png (87.09 KB, 下載次數: 83)
下載附件
IO口擴展
2018-6-18 16:09 上傳
- //部分代碼如下:完整代碼請參考資料
- /******************************************************************************
- ***stm32 GPIO口擴展使用說明***
- 功能:6個GPIO口擴展出4個8位GPIO口共32個IO口
- 硬件:輸入---4個74HC165 輸出---4個74HC595
- 示例:
- 1.擴展IO的命名規則:P1、P2、P3、P4口,同C51單片機
- 2.P1_OUT(0xFD); //P1口輸出數據0xFD
- 3.P11_H;P11_L; //P11引腳輸出高電平,輸出低電平
- 4.if(P12in==0) //讀取P12引腳電平狀態是否為0
- 5.if(P1_IN()==0xFD) //讀取P1口數據是否為0xFD
- 6.如使用不到輸入則可只用輸出,輸入部分可割舍
- *******************************************************************************/
- #ifndef _EXTENDGPIO_H
- #define _EXTENDGPIO_H
- /**************驅動接口定義(共6個GPIO口,移植需要修改的部分)**************/
- //(需配合stm32仿C51頭文件使用,或自行修改)
- #define SO_IN PB0_IN
- #define SOin PB0in //IO狀態讀取數據線
- #define CLK_OUT PB1_OUT
- #define CLK_H PB1=1
- #define CLK_L PB1=0 //IO狀態讀取時鐘線
- #define PL_OUT PB2_OUT
- #define PL_H PB2=1
- #define PL_L PB2=0 //IO狀態讀取功能使能線
- #define DS_OUT PB3_OUT
- #define DS_IN PB3_IN
- #define DS_H PB3=1
- #define DS_L PB3=0
- #define DSin PB3in //IO狀態輸出數據線
- #define SH_OUT PB4_OUT
- #define SH_H PB4=1
- #define SH_L PB4=0 //IO狀態輸出數據移位時鐘線
- #define ST_OUT PB5_OUT
- #define ST_IN PB5_IN
- #define ST_H PB5=1
- #define ST_L PB5=0
- #define STin PB5in //IO狀態輸出數據鎖存時鐘線
- /*********************************************************/
- #define u8 unsigned char
- #define u16 unsigned short
- #define u32 unsigned int
-
- u32 EXTGPIOSTATE; //擴展IO狀態緩存
- void EXTGPIO_SEND(u32 exdata)
- {
- u8 i;
- DS_OUT;//DS配置為輸出狀態
- SH_OUT;//SH配置為輸出狀態
- ST_OUT;//ST配置為輸出狀態
- EXTGPIOSTATE=exdata;//保存IO口狀態
- for(i=0;i<32;i++)
- {
- if((exdata<<i)&0x80000000) DS_H;
- else DS_L;
- SH_L;
- SH_H; //上升沿,bit數據移位進入移位寄存器
- }
- ST_L;
- ST_H; //上升沿,移位寄存器數據進入數據寄存器
- DS_H; //拉高數據線
- }
復制代碼
//文件包含程序+proteus仿真文件,在你的stm32f1工程里#include "extendgpio.h"即可使用。ps:proteus需要8.6版本或以上版本才能進行stm32仿真
0.png (5.15 KB, 下載次數: 82)
下載附件
2018-6-22 17:49 上傳
全部資料51hei下載地址:
擴展程序 仿真文件.zip
(35.03 KB, 下載次數: 104)
2018-6-21 08:11 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|