『 Jack_a_Lent_Notes』---MCU的库函数的尝试[ATmega128

来源:互联网 发布:新疆的网络受限 编辑:程序博客网 时间:2024/05/29 17:43
/**  ******************************************************************************  * 文       件: main.c  * 版       本: v1  * 编 译 环 境: Atmel Studio 6.0  * 目 标 芯 片: ATmega128  * 晶       振: 8MHz  * 创 建 时 间: 2016-2-1  * 描       述: API测试   ******************************************************************************  */  #include "ATmega128.h"  #include "ATmega128_GPIO.h"    int main(void){/* 初始化端口 */GPIO_Init(GPIOC,GPIO_PIN_ALL,GPIO_MODE_OUT);  //GPIO_Init(GPIOB,GPIO_PIN_0,GPIO_MODE_IN_FL);//不带上拉输入GPIO_Init(GPIOB,GPIO_PIN_ALL,GPIO_MODE_IN_PU);//  带上拉输入/* API测试 *//* 置指定 GPIOC 端口为高电平    */GPIO_WriteHigh(GPIOC,GPIO_PIN_ALL);_delay_ms(1000);/* 置指定 GPIOC 端口为低电平    */GPIO_WriteLow(GPIOC,GPIO_PIN_ALL);_delay_ms(1000);/* 向指定 GPIOC 端口写数据 0xFF */GPIO_Write(GPIOC,0xFF);_delay_ms(1000);while(1){/* 读取指定 GPIOB 端口的输入数据 */if(  GPIO_ReadInputData(GPIOB) == 0b11111110){_delay_ms(10);/* 读取指定 GPIOB 端口PIN0位的输入数据 */if(GPIO_ReadInputPin(GPIOB,GPIO_PIN_0)==0){/* 取反指定 GPIOC 端口PIN0位的电平 */GPIO_WriteReverse(GPIOC,GPIO_PIN_0);while(GPIO_ReadInputPin(GPIOB,GPIO_PIN_0)==0);}}/* 读取指定 GPIOB 端口PIN7位的输入数据 */if(GPIO_ReadInputPin(GPIOB,GPIO_PIN_7)==RESET){_delay_ms(10);/* 读取指定 GPIOB 端口PIN7位的输入数据 */if(GPIO_ReadInputPin(GPIOB,GPIO_PIN_7)==RESET){/* 取反指定 GPIOC 端口PIN7位的电平 */GPIO_WriteReverse(GPIOC,GPIO_PIN_7);while(GPIO_ReadInputPin(GPIOB,GPIO_PIN_7)==0);}}}}/******************************************************************************/
/**  ******************************************************************************  * 文       件: ATmega128.h  * 版       本: v1  * 编 译 环 境: Atmel Studio 6.0  * 目 标 芯 片: ATmega128  * 晶       振: 8MHz  * 创 建 时 间: 2016-2-1  * 描       述: 参考ST的库  ******************************************************************************  */
#ifndef __ATMEGA128_H#define __ATMEGA128_H#define F_CPU 8000000UL#include <stdint.h>#include <avr/io.h>#include <util/delay.h>typedef enum {FALSE = 0, TRUE = !FALSE} bool;typedef enum {RESET = 0, SET = !RESET} FlagStatus, ITStatus, BitStatus, BitAction;typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState;#define IS_FUNCTIONALSTATE_OK(STATE) (((STATE) == DISABLE) || ((STATE) == ENABLE))typedef enum {ERROR = 0, SUCCESS = !ERROR} ErrorStatus;#define     __I     volatile const          /*!< defines 'read only' permissions      */#define     __O     volatile                /*!< defines 'write only' permissions     */#define     __IO    volatile                /*!< defines 'read / write' permissions   */typedef struct GPIO_struct{__IO uint8_t PINx;__IO uint8_t DDRx;__IO uint8_t PORTx;}GPIO_TypeDef;#define GPIOA_BassAddress 0x39/* PINA的地址 */#define GPIOB_BassAddress 0x36/* PINB的地址 */#define GPIOC_BassAddress 0x33/* PINC的地址 */#define GPIOD_BassAddress 0x30/* PIND的地址 */#define GPIOA((GPIO_TypeDef *) GPIOA_BassAddress)#define GPIOB((GPIO_TypeDef *) GPIOB_BassAddress)#define GPIOC((GPIO_TypeDef *) GPIOC_BassAddress)#define GPIOD((GPIO_TypeDef *) GPIOD_BassAddress)#endif /* __ATMEGA128_H *//******************************************************************************/
/**  ******************************************************************************  * 文       件: ATmega128_GPIO.c  * 版       本: v1  * 编 译 环 境: Atmel Studio 6.0  * 目 标 芯 片: ATmega128  * 晶       振: 8MHz  * 创 建 时 间: 2016-2-1  * 描       述: 参考ST的库  ******************************************************************************  */#include "ATmega128_GPIO.h"/******************************************************************************** * 函  数  名: GPIO_DeInit * 功      能: 恢复指定端口寄存器到默认值 * 形      参: GPIOx: GPIOA,GPIOB,GPIOC,GPIOD * 返  回  值: None * 说      明: *******************************************************************************/void GPIO_DeInit(GPIO_TypeDef* GPIOx){GPIOx->PINx = 0x00;GPIOx->DDRx = 0x00;GPIOx->PORTx = 0x00;}/******************************************************************************** * 函  数  名: GPIO_Init * 功      能: 初始化端口位 * 形      参: GPIOx: GPIOA,GPIOB,GPIOC,GPIOD *       GPIO_Pin:GPIO_PIN_0--GPIO_PIN_7,GPIO_PIN_LNIB,GPIO_PIN_HNIB,GPIO_PIN_ALL *             GPIO_Mode: GPIO_MODE_IN_FL,GPIO_MODE_IN_PU,GPIO_MODE_OUT * 返  回  值: None * 说      明: *******************************************************************************/void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin, GPIO_Mode_TypeDef GPIO_Mode){    if ((((uint8_t)(GPIO_Mode)) & (uint8_t)0x80) != (uint8_t)0x00) /* Output mode */    {        /* Set Output mode */        GPIOx->DDRx |= (uint8_t)GPIO_Pin;/* 置位 */    }     else /* Input mode */    {        /* Set Input mode */        GPIOx->DDRx &= (uint8_t)(~(GPIO_Pin));/* 清零 */if ((((uint8_t)(GPIO_Mode)) & (uint8_t)0x40) != (uint8_t)0x00) /* 输入模式带上拉 */{GPIOx->PORTx |= (uint8_t)GPIO_Pin;} else /* 输入模式不带上拉 */{GPIOx->PORTx &= (uint8_t)(~(GPIO_Pin));}}}/******************************************************************************** * 函  数  名: GPIO_Write * 功      能: 输出指定值到指定的端口 * 形      参: GPIOx: GPIOA,GPIOB,GPIOC,GPIOD *       PortVal:0x00--0xFF * 返  回  值: None * 说      明: *******************************************************************************/void GPIO_Write(GPIO_TypeDef* GPIOx, uint8_t PortVal){    GPIOx->PORTx = PortVal;}/******************************************************************************** * 函  数  名: GPIO_WriteHigh * 功      能: 置指定的端口为高电平 * 形      参: GPIOx: GPIOA,GPIOB,GPIOC,GPIOD *       GPIO_Pin:GPIO_PIN_0--GPIO_PIN_7,GPIO_PIN_LNIB,GPIO_PIN_HNIB,GPIO_PIN_ALL * 返  回  值: None * 说      明: *******************************************************************************/void GPIO_WriteHigh(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins){    GPIOx->PORTx |= (uint8_t)PortPins;}/******************************************************************************** * 函  数  名: GPIO_WriteLow * 功      能: 置指定的端口为低电平 * 形      参: GPIOx: GPIOA,GPIOB,GPIOC,GPIOD *       PortPins:GPIO_Pin:GPIO_PIN_0--GPIO_PIN_7,GPIO_PIN_LNIB,GPIO_PIN_HNIB,GPIO_PIN_ALL * 返  回  值: None * 说      明: *******************************************************************************/void GPIO_WriteLow(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins){    GPIOx->PORTx &= (uint8_t)(~PortPins);}/******************************************************************************** * 函  数  名: GPIO_WriteReverse * 功      能: 取反指定的端口的电平 * 形      参: GPIOx: GPIOA,GPIOB,GPIOC,GPIOD *       PortPins:GPIO_PIN_0--GPIO_PIN_7,GPIO_PIN_LNIB,GPIO_PIN_HNIB,GPIO_PIN_ALL * 返  回  值: None * 说      明: *******************************************************************************/void GPIO_WriteReverse(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins){    GPIOx->PORTx ^= (uint8_t)PortPins;}/******************************************************************************** * 函  数  名: GPIO_ReadInputData * 功      能: 读取指定的端口的输入数据 * 形      参: GPIOx: GPIOA,GPIOB,GPIOC,GPIOD * 返  回  值: None * 说      明: *******************************************************************************/uint8_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx){    return ((uint8_t)GPIOx->PINx);}/******************************************************************************** * 函  数  名: GPIO_ReadInputData * 功      能: 读取指定的端口位的输入数据 * 形      参: GPIOx: GPIOA,GPIOB,GPIOC,GPIOD *       GPIO_Pin:GPIO_PIN_0--GPIO_PIN_7 * 返  回  值: None * 说      明: *******************************************************************************/BitStatus GPIO_ReadInputPin(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin){    return ((BitStatus)(GPIOx->PINx & (uint8_t)GPIO_Pin));}/******************************************************************************/
/**  ******************************************************************************  * 文       件: ATmega128_GPIO.h  * 版       本: v1  * 编 译 环 境: Atmel Studio 6.0  * 目 标 芯 片: ATmega128  * 晶       振: 8MHz  * 创 建 时 间: 2016-2-1  * 描       述: 参考ST的库  ******************************************************************************  */#ifndef __ATMEGA128_GPIO_H#define __ATMEGA128_GPIO_H#include "ATmega128.h"typedef enum{  GPIO_MODE_IN_FL       = (uint8_t)0x20,  /* 不带上拉的输入模式 */  GPIO_MODE_IN_PU       = (uint8_t)0x40,  /* 带上拉的输入模式   */  GPIO_MODE_OUT  = (uint8_t)0x80,  /* 输出模式           */}GPIO_Mode_TypeDef;typedef enum{  GPIO_PIN_0    = ((uint8_t)0x01),  /*!< Pin 0 selected */  GPIO_PIN_1    = ((uint8_t)0x02),  /*!< Pin 1 selected */  GPIO_PIN_2    = ((uint8_t)0x04),  /*!< Pin 2 selected */  GPIO_PIN_3    = ((uint8_t)0x08),   /*!< Pin 3 selected */  GPIO_PIN_4    = ((uint8_t)0x10),  /*!< Pin 4 selected */  GPIO_PIN_5    = ((uint8_t)0x20),  /*!< Pin 5 selected */  GPIO_PIN_6    = ((uint8_t)0x40),  /*!< Pin 6 selected */  GPIO_PIN_7    = ((uint8_t)0x80),  /*!< Pin 7 selected */  GPIO_PIN_LNIB = ((uint8_t)0x0F),  /*!< Low nibble pins selected */  GPIO_PIN_HNIB = ((uint8_t)0xF0),  /*!< High nibble pins selected */  GPIO_PIN_ALL  = ((uint8_t)0xFF)   /*!< All pins selected */}GPIO_Pin_TypeDef;void GPIO_DeInit(GPIO_TypeDef* GPIOx);void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin, GPIO_Mode_TypeDef GPIO_Mode);void GPIO_Write(GPIO_TypeDef* GPIOx, uint8_t PortVal);void GPIO_WriteHigh(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins);void GPIO_WriteLow(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins);void GPIO_WriteReverse(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins);uint8_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);BitStatus GPIO_ReadInputPin(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin);#endif /* __ATMEGA128_GPIO_H *//******************************************************************************/
资料来源:STM8S_StdPeriph_Lib_V2.1.0
       本人在此发布的博文(包括但不限于汉字、拼音、阿拉伯字母、图片、影像,以及前述之各种任意组合等等)均为互联网整理而来,仅供学习参考,如果侵犯了你的权益请发送电子邮件联系我,我会尽快处理你的问题。



0 0
原创粉丝点击