0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

带显示屏指示的流水灯设计

冬至子 来源:笨狗学电子 作者:一只技术狗 2023-07-26 17:23 次阅读

第一步--熟悉硬件

流水灯的原理图是这样的

图片

LCD的接口是这样的

图片

我在这里突然发现了一个问题,就是LED和LCD怎么有公用的端口!!但是我仔细一看发现,这LED是由一个锁存器控制,LCD的控制芯片有一个CS片选信号,感觉这个是控制着两个模块的使能的,那么不同时向LED和LCD写数据不就行了?

所以控制思路也就有了,在向LCD写数据的时候就使能LCD控制芯片,用完就失能它。这一步我发现给的例程已经做了。但LED可没有做,所以只能自己实现了,控制思路和LCD一样,用的时候使能,用完就失能。

第二步--软件设计

首先就是套用官方给的例程,有现成的不用岂不是浪费。然后初始化一下PD2口。下面就是PD2的初始化函数。

void LED_Enable_gpio_cofig(void)
{
  GPIO_InitTypeDef  GPIO_Strue;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
  GPIO_Strue.GPIO_Pin = GPIO_Pin_2;
  GPIO_Strue.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Strue.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOD, &GPIO_Strue);
  //先关了灯
  GPIO_SetBits(GPIOD, GPIO_Pin_2);
  GPIO_Write(GPIOC,0Xff00);
  GPIO_ResetBits(GPIOD, GPIO_Pin_2);
}

为了好记我把使能失能宏定义一下

#define LED_ENABLE()       GPIO_SetBits(GPIOD, GPIO_Pin_2)
#define LED_DISENABLE()    GPIO_ResetBits(GPIOD, GPIO_Pin_2)

延时函数就用例程带的。

建立一个流水灯数组

uint16_t led_buff[][8] = {0xfe00, 0xfd00, 0xfb00, 0xf700, 0xef00, 0xdf00, 0xbf00, 0x7f00,
                       0x7f00, 0xbf00, 0xdf00, 0xef00, 0xf700, 0xfb00, 0xfd00, 0xfe00,
               0x7e00, 0xbd00, 0xdb00, 0xe700, 0xe700, 0xc300, 0x8100, 0x0000,
               0xe700, 0xdb00, 0xbd00, 0x7e00, 0x7e00, 0x3c00, 0x1800, 0x0000};

最后的过程就很简单了看一下mian函数吧

int main(void)
{
  uint8_t i;
  SysTick_Config(SystemCoreClock/1000);
  //Delay_Ms(200);
  STM3210B_LCD_Init();
  LED_Enable_gpio_cofig();
  LCD_Clear(Black);
  LCD_SetBackColor(Black);
  LCD_SetTextColor(White);
  LCD_DisplayStringLine(Line1 ,(unsigned char *)"   Flowled test");
  LCD_SetBackColor(Yellow);
  LCD_DisplayStringLine(Line2 ,(unsigned char *)"Flowled mode 1 test.");  
  LCD_SetBackColor(Black);
  LCD_DisplayStringLine(Line3 ,(unsigned char *)"Flowled mode 2 test.");  
  LCD_SetBackColor(Black);
  LCD_DisplayStringLine(Line4 ,(unsigned char *)"Flowled mode 3 test.");  
  LCD_SetBackColor(Black);
  LCD_DisplayStringLine(Line5 ,(unsigned char *)"Flowled mode 4 test.");  
  LED_ENABLE();
  for(i = 0; i < 8; i ++)
  {
    GPIO_Write(GPIOC,led_buff[0][i]);
    Delay_Ms(200);
  }
  GPIO_Write(GPIOC,0Xff00);
  LED_DISENABLE();


  LCD_SetBackColor(Black);
  LCD_DisplayStringLine(Line2 ,(unsigned char *)"Flowled mode 1 test.");  
  LCD_SetBackColor(Yellow);
  LCD_DisplayStringLine(Line3 ,(unsigned char *)"Flowled mode 2 test.");  
  LED_ENABLE();
  for(i = 0; i < 8; i ++)
  {
    GPIO_Write(GPIOC,led_buff[1][i]);
    Delay_Ms(200);
  }
  GPIO_Write(GPIOC,0Xff00);
  LED_DISENABLE();

  LCD_SetBackColor(Black);
  LCD_DisplayStringLine(Line3 ,(unsigned char *)"Flowled mode 2 test.");  
  LCD_SetBackColor(Yellow);
  LCD_DisplayStringLine(Line4 ,(unsigned char *)"Flowled mode 3 test.");  
  LED_ENABLE();
  for(i = 0; i < 8; i ++)
  {
    GPIO_Write(GPIOC,led_buff[2][i]);
    Delay_Ms(200);
  }
  GPIO_Write(GPIOC,0Xff00);
  LED_DISENABLE();

  LCD_SetBackColor(Black);
  LCD_DisplayStringLine(Line4 ,(unsigned char *)"Flowled mode 3 test.");  
  LCD_SetBackColor(Yellow);
  LCD_DisplayStringLine(Line5 ,(unsigned char *)"Flowled mode 4 test.");  
  LED_ENABLE();
  for(i = 0; i < 8; i ++)
  {
    GPIO_Write(GPIOC,led_buff[2][i]);
    Delay_Ms(200);
  }
  GPIO_Write(GPIOC,0Xff00);
  LED_DISENABLE();


  LCD_SetBackColor(Black);
  LCD_DisplayStringLine(Line5 ,(unsigned char *)"Flowled mode 4 test.");    
  LCD_SetBackColor(Green);
  LCD_DisplayStringLine(Line6 ,(unsigned char *)"Finshed!");  
  LCD_SetBackColor(Red);
  LCD_DisplayStringLine(Line7 ,(unsigned char *)"                   ");    
  while(1);
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • led灯
    +关注

    关注

    22

    文章

    1592

    浏览量

    107824
  • LCD屏
    +关注

    关注

    0

    文章

    122

    浏览量

    15396
  • 流水灯
    +关注

    关注

    21

    文章

    432

    浏览量

    59633
  • LCD控制
    +关注

    关注

    0

    文章

    6

    浏览量

    7904
  • 延时器
    +关注

    关注

    1

    文章

    36

    浏览量

    15085
收藏 人收藏

    评论

    相关推荐

    IIC的12864OLED显示屏中文字库的显示屏吗?

    IIC的12864OLED显示屏中文字库的显示屏
    发表于 11-08 08:32

    LED流水灯程序【汇编版】

    LED流水灯程序【汇编版】LED流水灯程序【汇编版】LED流水灯程序【汇编版】LED流水灯程序【汇编版】
    发表于 12-29 11:15 0次下载

    LED流水灯程序【C语言版】

    LED流水灯程序【C语言版】LED流水灯程序【C语言版】LED流水灯程序【C语言版】LED流水灯程序【C语言版】
    发表于 12-29 11:05 0次下载

    LESSON2_流水灯

    LESSON2_流水灯 LESSON2_流水灯
    发表于 02-18 18:21 0次下载

    流水灯

    流水灯 ppt
    发表于 11-11 18:42 13次下载

    LED灯能用来制作显示屏吗?

    LED灯是不能用来制作显示屏的。虽然灯显示屏都是由多颗发光二极管组成,但却是两种工作方式和原理完全不同的产品。
    的头像 发表于 06-20 10:03 3439次阅读

    交通类LED显示屏有什么优势

    随着LED显示屏技术的进步发展,近年来在交通领域,LED显示屏的应用越来越广泛,许多地方用显示屏代替了原来的指示牌。
    发表于 09-21 11:42 1189次阅读

    OLED显示屏的LED条形混色器

    电子发烧友网站提供《OLED显示屏的LED条形混色器.zip》资料免费下载
    发表于 11-09 09:35 2次下载
    <b class='flag-5'>带</b>OLED<b class='flag-5'>显示屏</b>的LED条形混色器

    流水灯显示Proteus图无代码分享

    流水灯显示Proteus图无代码分享
    发表于 12-30 16:46 0次下载

    TFT显示屏的STM32焊接和返修台

    电子发烧友网站提供《TFT显示屏的STM32焊接和返修台.zip》资料免费下载
    发表于 02-02 14:50 2次下载
    <b class='flag-5'>带</b>TFT<b class='flag-5'>显示屏</b>的STM32焊接和返修台

    Arduino和LCD显示屏的秒表

    电子发烧友网站提供《Arduino和LCD显示屏的秒表.zip》资料免费下载
    发表于 06-12 09:51 5次下载
    <b class='flag-5'>带</b>Arduino和LCD<b class='flag-5'>显示屏</b>的秒表

    NTC和OLED显示屏的温度监视器

    电子发烧友网站提供《NTC和OLED显示屏的温度监视器.zip》资料免费下载
    发表于 06-28 15:56 0次下载
    <b class='flag-5'>带</b>NTC和OLED<b class='flag-5'>显示屏</b>的温度监视器

    OLED显示屏的可编程袖珍电源

    电子发烧友网站提供《OLED显示屏的可编程袖珍电源.zip》资料免费下载
    发表于 07-04 09:33 0次下载
    <b class='flag-5'>带</b>OLED<b class='flag-5'>显示屏</b>的可编程袖珍电源

    TFT显示屏的LoRa远程控制信使

    电子发烧友网站提供《TFT显示屏的LoRa远程控制信使.zip》资料免费下载
    发表于 07-11 10:16 0次下载
    <b class='flag-5'>带</b>TFT<b class='flag-5'>显示屏</b>的LoRa远程控制信使

    LCD显示屏、LED显示屏、OLED显示屏有什么区别?

    LCD显示屏、LED显示屏、OLED显示屏有什么区别? LCD显示屏、LED显示屏和OLED显示屏
    的头像 发表于 12-11 14:29 1.5w次阅读