标题:
STM32驱动数码管显示的几种方法
[打印本页]
作者:
乐观的知觉
时间:
2019-3-5 10:34
标题:
STM32驱动数码管显示的几种方法
数码管 显示的几种方法
单片机源程序如下:
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "smg.h"
#include <stdlib.h>
u8 ge=0,shi=0,bai=0;
u8 rlen1=0;
int i=0,j=0,Num=0;
float num=0;
char S[100]={0};
u8 smg[16]={ 0xC0, 0xF9, 0xA4, 0xB0,
0x99, 0x92, 0x82, 0xF8,
0x80, 0x90, 0x88, 0x83,
0xC6, 0xA1, 0x86, 0x8E};
int main(void)
{
delay_init();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(115200);
SMG_Init();
printf("SMG test!\r\n");
while(1) //USART1接收到[0,100)之间的数据通过数码管显示出来
{
if(USART_RX_STA&0x8000)//接收未完成
{
j=0;
rlen1=USART_RX_STA&0X3FFF; //得到本次接收到的数据长度
USART_RX_BUF[rlen1]=0;
USART_RX_STA=0;
printf("rlen1=%d\r\n",rlen1);
printf("%s\r\n",USART_RX_BUF);
sprintf(S,"%s",USART_RX_BUF);//接收到的字节数
num=atof(S);
printf("num=%f\r\n",num);
if(0<=num&&num<10) //0~10
{
printf("数值在[0,10)区间\r\n");
Num=num*100;
bai=Num/100;
shi=Num%100/10;
ge=Num%10;
GPIO_Write(GPIOC, (u16)smg[bai]-0x80 );
delay_ms(1000);
GPIO_Write(GPIOC, (u16)smg[shi] );
delay_ms(1000);
GPIO_Write(GPIOC, (u16)smg[ge] );
delay_ms(1000);
}
else if(10<=num&&num<100) //10~100
{
printf("数值在[10,100)区间\r\n");
Num=num*10;
bai=Num/100;
shi=Num%100/10;
ge=Num%10;
GPIO_Write(GPIOC, (u16)smg[bai] );
delay_ms(1000);
GPIO_Write(GPIOC, (u16)smg[shi]-0x80 );
delay_ms(1000);
GPIO_Write(GPIOC, (u16)smg[ge] );
delay_ms(1000);
}
else//超出范围
{
printf("数值超出[0,100)区间\r\n");
for(i=0;i<3;i++)
{
GPIO_Write(GPIOC, (u16)0x00 );
delay_ms(500);
GPIO_Write(GPIOC, (u16)0xff );
delay_ms(500);
}
}
}
j++;delay_ms (10);
if(j>=300)//3秒没数据
{
GPIO_Write(GPIOC,~(u16)0x01);
delay_ms(300);
GPIO_Write(GPIOC,~(u16)0x40);
delay_ms(300);
GPIO_Write(GPIOC,~(u16)0x08);
delay_ms(300);
}
}
}
复制代码
所有资料51hei提供下载:
数码管.7z
(212.25 KB, 下载次数: 68)
2019-3-5 10:34 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
admin
时间:
2019-3-6 02:18
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1