当前位置: 首页 > news >正文

ARM day5

作业:封装流水灯

led.h

#ifndef __LED_H__
#define __LED_H__// 定义GPIO端口结构体,包含GPIO端口的各种寄存器
typedef struct
{unsigned int MODER;     // 端口模式寄存器unsigned int OTYPER;    // 端口输出类型寄存器unsigned int OSPEEDR;   // 端口速度寄存器unsigned int PUPDR;     // 端口上拉/下拉寄存器unsigned int IDR;       // 端口输入数据寄存器unsigned int ODR;       // 端口输出数据寄存器unsigned int BSRR;      // 端口位设置/重置寄存器
}gpio_t;// 定义GPIOE和GPIOF的地址
#define GPIOE ((gpio_t *)0x50006000)
#define GPIOF ((gpio_t *)0x50007000)void led1_init();void led2_init();void led3_init();void led1_ctl(int flag);void led2_ctl(int flag);void led3_ctl(int flag);#endif 

led.c

#include "led.h"void led1_init()
{// 设置PE10为输出模式GPIOE->MODER &= (~(0x3 << 20));GPIOE->MODER |= (0x1 << 20);// 设置PE10为推挽输出GPIOE->OTYPER &= (~(0x1 << 10));// 设置PE10为低速输出GPIOE->OSPEEDR &= (~(0x3 << 20));// 设置PE10无上拉下拉GPIOE->PUPDR &= (~(0x3 << 20));
}
void led2_init()
{// 设置Pf10为输出模式GPIOF->MODER &= (~(0x3 << 20));GPIOF->MODER |= (0x1 << 20);// 设置PF10为推挽输出GPIOF->OTYPER &= (~(0x1 << 10));// 设置PF10为低速输出GPIOF->OSPEEDR &= (~(0x3 << 20));// 设置PF10无上拉下拉GPIOF->PUPDR &= (~(0x3 << 20));
}
void led3_init()
{// 设置PE8为输出模式GPIOE->MODER &= (~(0x3 << 16));GPIOE->MODER |= (0x1 << 16);// 设置PE8为推挽输出GPIOE->OTYPER &= (~(0x1 << 8));// 设置PE8为低速输出GPIOE->OSPEEDR &= (~(0x3 << 16));// 设置PE8无上拉下拉GPIOE->PUPDR &= (~(0x3 << 16));
}void led1_ctl(int flag)
{if (flag == 1){GPIOE->ODR |= (0x1 << 10);}else if (flag == 0){GPIOE->ODR &= (~(0x1 << 10));}
}void led2_ctl(int flag)
{if (flag == 1){GPIOF->ODR |= (0x1 << 10);}else if (flag == 0){GPIOF->ODR &= (~(0x1 << 10));}
}// LED3控制
void led3_ctl(int flag)
{if (flag == 1){GPIOE->ODR |= (0x1 << 8);}else if (flag == 0){GPIOE->ODR &= (~(0x1 << 8));}
}

main.c

#include "led.h"
// 手动封装一个延时函数
void delay_ms(int ms)
{int i, j;for (i = 0; i < ms; i++){for (j = 0; j < 2000; j++){}}
}
int main()
{// 使能GPIO的外设时钟*((unsigned int *)0X50000A28) |= (0X3 << 4);led1_init();led2_init();led3_init();while (1){// LED1亮led1_ctl(1);led2_ctl(0);led3_ctl(0);delay_ms(500);// LED2亮led1_ctl(0);led2_ctl(1);led3_ctl(0);delay_ms(500);delay_ms(500);// LED3亮led1_ctl(0);led2_ctl(0);led3_ctl(1);delay_ms(500);delay_ms(500);}return 0;
}

封装流水灯

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 6-5 统计二叉树结点个数
  • 【第八章】多线程——Thread类
  • 微信小程序如何跳转微信公众号
  • 苹果手机备忘录共享到微信,为何显示不支持的类型
  • 冷冻式压缩空气干燥机常见几种系统原理图
  • Vue从入门到实战Day07
  • HTML蓝色爱心
  • C++第二十弹---深入理解STL中vector的使用
  • MySQL--联合索引应用细节应用规范
  • 浅谈网络通信(1)
  • 【华为】将eNSP导入CRT,并解决不能敲Tab问题
  • 爬山算法介绍
  • JS根据所选ID数组在源数据中取出对象
  • 【Linux学习】深入探索进程等待与进程退出码和退出信号
  • 非关系型数据库NOSQL
  • JavaScript 如何正确处理 Unicode 编码问题!
  • 【391天】每日项目总结系列128(2018.03.03)
  • 【前端学习】-粗谈选择器
  • 08.Android之View事件问题
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • CentOS6 编译安装 redis-3.2.3
  • Elasticsearch 参考指南(升级前重新索引)
  • Flannel解读
  • JS字符串转数字方法总结
  • Mysql5.6主从复制
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • PhantomJS 安装
  • PHP变量
  • python 学习笔记 - Queue Pipes,进程间通讯
  • Spring核心 Bean的高级装配
  • webgl (原生)基础入门指南【一】
  • 马上搞懂 GeoJSON
  • 如何设计一个比特币钱包服务
  • 我是如何设计 Upload 上传组件的
  • 2017年360最后一道编程题
  • 扩展资源服务器解决oauth2 性能瓶颈
  • 树莓派用上kodexplorer也能玩成私有网盘
  • ​2021半年盘点,不想你错过的重磅新书
  • ​浅谈 Linux 中的 core dump 分析方法
  • ​如何防止网络攻击?
  • ​学习一下,什么是预包装食品?​
  • (160)时序收敛--->(10)时序收敛十
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (二)c52学习之旅-简单了解单片机
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (转)IOS中获取各种文件的目录路径的方法
  • (转)四层和七层负载均衡的区别
  • ****三次握手和四次挥手
  • .bat批处理(五):遍历指定目录下资源文件并更新