zoukankan      html  css  js  c++  java
  • 第二个--关于led灯的代码总结

    又要继续奋斗啦,不然就交白卷了;

    1---自己注意,就是那个板子上有8个led灯,这个灯呢,没哟甩端口直接控制模式用573锁存器来控制的,为的是啥呢,因为你的芯片就那么几个引脚  ,你就单单把引脚拿来控制什么led灯啊,什么蜂鸣器啊,这些小东西,非那么多资源,太得不偿失了,于是  就出现了这个锁存器,干啥呢:就是为了节省端口  ,你看假如你的led灯的控制脚连在A0~~A7,那么这8个端口给灯用了,那么干别的就不能用这个端口了,于是这个锁存器就可以在你想用这几个端口干别的时,把锁存器关上,这样灯不就跟那几个端口给的状态没关系了嘛。(说白了,就是为了省端口,节约是好事嘛)

    2----

    还记得那个关于GPIO的总结吗,至于管这个GPIO叫啥,我也不清楚,因为我没查,我就把它理解成一个大门,你要是想用芯片的端口,就得把这个大门开开,把锁头放到规定的位置,然后进去后,把他们关好。反正一切都得按照这个GPIO大门的规定来办事。

    3------

    回顾一下  那个GPIO的操作步骤:

           1)先把你用的那个大端口(就是PA啦,PB啦,PC啦~~~)的外部时钟开开,(为啥开这个时钟,就是因为那个stm32是非常省电的,所以  你用那一个端口,就得开哪一个,不然,怎么省电啊)

       2)对应那个大的端口下的小端口初始化(就是PA0  PA1 等等)

       3)设置它的模式

       4)设置它的最大速度

       5)最后再加一个那个GPIO_Init(GPIOx,&GPIO_InitStructure)

    4---好了,回到正题,那就是代码啦

     1 #include "stm32f10x.h"//头文件
     2 #include "led.h"
     3 
     4 
     5 void LED_Control(uint16_t LED, uint8_t LED_Status)//对灯的控制函数
     6 void LED_Init(void);//对灯的初始化,就是引脚初始化,时钟初始化
     7 
     8 
     9 int main()
    10 {
    11     unsigned int i;
    12     char j = 8;
    13     LED_Init();
    14     LED_Control(LEDALL, 0);//先叫所有的灯关了
    15     while (1)
    16     {
    17         LED_Control(1 << j, 1);//灯的引脚是C8~~~C15,亮
    18         for (i = 0x3fffff; i > 0; i--)//延时
    19         LED_Control(1 << j, 0);//灭
    20         for (i = 0x3fffff; i > 0; i--)
    21         j = (++j == 16) ? 8 : j;//这一句不错
    22     }
    23 }
    24 
    25 void LED_Init()
    26 {
    27     GPIO_InitTypeDef GPIO_InitStructure;//(1)定义那个结构体
    28     /*********************************
    29                 用到了CD两个大的端口,所以弄这俩的时钟
    30 ************************************/
    31     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
    32     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
    33     
    34     //LED引脚配置, PC08~PC15 对应 H_D0~H_D7
    35     GPIO_InitStructure.GPIO_Pin = LED0 | LED1 |LED2 | LED3 |LED4 | LED5 | LED6 | LED7;
    36     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//小引脚的模式
    37     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;//小引脚的最大速度
    38     GPIO_Init(GPIOC, &GPIO_InitStructure);//不能丢的那个累赘
    39     
    40     //74HC573锁存引脚配置,PD2 对应 N_LE
    41     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;//因为你的灯使用573锁存器控制的,那么得把那个锁存器的使能开开
    42     GPIO_Init(GPIOD, &GPIO_InitStructure);
    43 }
    44 
    45 void LED_Control(uint16_t LED, uint8_t LED_Status)
    46 {
    47     if (LED_Status == 0)
    48     {
    49         GPIO_SetBits(GPIOC, LED);//开灯
    50         GPIO_SetBits(GPIOD, GPIO_Pin_2);    //开锁存器
    51         GPIO_ResetBits(GPIOD, GPIO_Pin_2);  //关, 锁存状态
    52     }
    53     else
    54     {
    55         GPIO_ResetBits(GPIOC, LED);//关灯
    56         GPIO_SetBits(GPIOD, GPIO_Pin_2);//开锁存器
    57         GPIO_ResetBits(GPIOD, GPIO_Pin_2);//关锁存器
    58     }
    59 }                

            

  • 相关阅读:
    [django]django models最佳实战
    [vue]模拟移动端三级路由: router-link位置体现router的灵活性
    [js]顶部导航和内容区布局
    [django]django查询最佳实战
    [vue]webpack使用样式
    [vue]webpack中使用组件
    [vue]组件的导入
    [django]django权限简单实验
    [django]前后端分离之JWT用户认证
    [django]drf知识点梳理-权限
  • 原文地址:https://www.cnblogs.com/xiaoyoucai/p/6573129.html
Copyright © 2011-2022 走看看