找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6759|回复: 1
收起左侧

STM32驱动数码管显示的几种方法

[复制链接]
ID:391361 发表于 2019-3-5 10:34 | 显示全部楼层 |阅读模式
数码管 显示的几种方法

单片机源程序如下:
  1. #include "delay.h"
  2. #include "sys.h"
  3. #include "usart.h"
  4. #include "smg.h"
  5. #include <stdlib.h>

  6. u8 ge=0,shi=0,bai=0;
  7. u8 rlen1=0;
  8. int i=0,j=0,Num=0;
  9. float        num=0;
  10. char S[100]={0};

  11. u8 smg[16]={        0xC0, 0xF9, 0xA4, 0xB0,
  12.                                                         0x99, 0x92, 0x82, 0xF8,
  13.                                                         0x80, 0x90, 0x88, 0x83,
  14.                                                         0xC6, 0xA1, 0x86, 0x8E};                                               
  15.                                                        
  16. int main(void)
  17. {               
  18. delay_init();         
  19. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);        //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
  20. uart_init(115200);
  21. SMG_Init();
  22.         printf("SMG test!\r\n");
  23. while(1)  //USART1接收到[0,100)之间的数据通过数码管显示出来
  24. {
  25.          if(USART_RX_STA&0x8000)//接收未完成
  26.          {
  27.                  j=0;
  28.                  rlen1=USART_RX_STA&0X3FFF;        //得到本次接收到的数据长度
  29.                  USART_RX_BUF[rlen1]=0;
  30.                  USART_RX_STA=0;
  31.                  printf("rlen1=%d\r\n",rlen1);
  32.                  printf("%s\r\n",USART_RX_BUF);
  33.                  sprintf(S,"%s",USART_RX_BUF);//接收到的字节数
  34.                  num=atof(S);
  35.                  printf("num=%f\r\n",num);
  36.                  if(0<=num&&num<10) //0~10
  37.                  {
  38.                          printf("数值在[0,10)区间\r\n");
  39.                          Num=num*100;
  40.                    bai=Num/100;
  41.                          shi=Num%100/10;
  42.                          ge=Num%10;
  43.                          GPIO_Write(GPIOC, (u16)smg[bai]-0x80 );
  44.                          delay_ms(1000);
  45.                          GPIO_Write(GPIOC, (u16)smg[shi] );
  46.                          delay_ms(1000);
  47.                          GPIO_Write(GPIOC, (u16)smg[ge] );
  48.                          delay_ms(1000);                         
  49.                  }
  50.                  else if(10<=num&&num<100) //10~100
  51.                  {
  52.                          printf("数值在[10,100)区间\r\n");
  53.                          Num=num*10;
  54.                          bai=Num/100;
  55.                          shi=Num%100/10;
  56.                          ge=Num%10;
  57.                          GPIO_Write(GPIOC, (u16)smg[bai] );
  58.                          delay_ms(1000);
  59.                          GPIO_Write(GPIOC, (u16)smg[shi]-0x80 );
  60.                          delay_ms(1000);
  61.                          GPIO_Write(GPIOC, (u16)smg[ge] );
  62.                          delay_ms(1000);                         
  63.                  }
  64.                  else//超出范围
  65.                 {
  66.                         printf("数值超出[0,100)区间\r\n");
  67.                         for(i=0;i<3;i++)
  68.                         {
  69.                                 GPIO_Write(GPIOC, (u16)0x00 );
  70.                                 delay_ms(500);
  71.                                 GPIO_Write(GPIOC, (u16)0xff );
  72.                                 delay_ms(500);       
  73.                         }                               
  74.                 }
  75.          }
  76.          j++;delay_ms (10);
  77.          if(j>=300)//3秒没数据
  78.          {
  79.                  GPIO_Write(GPIOC,~(u16)0x01);
  80.                  delay_ms(300);
  81.                  GPIO_Write(GPIOC,~(u16)0x40);
  82.                  delay_ms(300);
  83.                  GPIO_Write(GPIOC,~(u16)0x08);
  84.                  delay_ms(300);
  85.          }
  86. }
  87. }
复制代码

所有资料51hei提供下载:
数码管.7z (212.25 KB, 下载次数: 66)
回复

使用道具 举报

ID:1 发表于 2019-3-6 02:18 | 显示全部楼层
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表