『 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
- 『 Jack_a_Lent_Notes』---MCU的库函数的尝试[ATmega128
- 『 Jack_a_Lent_Notes』---基于时间触发的合作式调度器[ATmega128]
- 『 Jack_a_Lent_Notes』---SPI[ATmega128] ①
- 『 Jack_a_Lent_Notes』---SPI[ATmega128] ②
- 『 Jack_a_Lent_Notes』---按键状态机[ATmega128]
- 『 Jack_a_Lent_Notes』---三极管的三种工作状态
- ATMEGA128 UART的使用
- ATMEGA128 UART的使用
- 『 Jack_a_Lent_Notes』---半桥LLC谐振变换器的基本工作原理
- 『 Jack_a_Lent_Notes』---IIC[ATmega128_24C02]
- ATMEGA128上跑的ucosII
- ATMEGA128定时器1的使用
- ATMEGA128定时器1的使用
- 『 Jack_a_Lent_Notes』---Buck基本工作原理
- 『 Jack_a_Lent_Notes』---Boost基本工作原理
- 『 Jack_a_Lent_Notes』---FlyBack基本工作原理
- 『 Jack_a_Lent_Notes』---功率因数校正(PPFC)
- 『 Jack_a_Lent_Notes』---功率因数校正(APFC)
- SSL四次握手
- 【JAVA SE】20.接口(interface)
- D. Dasha and Very Difficult Problem
- MySQL必知必会-3安装Navicat Premium
- HDU1864:最大报销额(类01背包 浮点数处理)
- 『 Jack_a_Lent_Notes』---MCU的库函数的尝试[ATmega128
- 欢迎使用CSDN-markdown编辑器
- Json基础
- pageEncoding与contentType的区别
- Trie树标准模版
- C指针
- MySQL必知必会-4导入项目SQL脚本
- 【蓝桥】入门训练 Fibonacci数列
- html5在线编辑器效果和源码