51单片机新人一个,自己最近在做DIY,虽然DIY做的很low,但是还是可以对学习STM32的小伙伴们提供一点点的价值的,发这个帖子,主要是我最近才接触到51黑论坛,却没发现这是一个宝藏论坛,在制作DIY小玩意的过程中,很多资料也是在51黑电子论坛中找到的刚完成了一个作品忍不住提供一点点自己的价值。本设计主要的功能正如标题所示
•(1)OLED显示。
•(2)万年历。
•(3)浮点数显示BMP280的数据(大气压强,海拔高度,温度)。
说它low主要是我更多的整合了别人的程序,模块驱动整合搬运工就是我了,如果有什么问题,还麻烦各位大佬不吝赐教!超级感谢
实物图
单片机源程序如下:
// 文 件 名 : main.c
// 作 者 : ZengXianLu
// 生成日期 : 2021-04-16
// oled接线
// ----------------------------------------------------------------
// GND 电源地
// VCC 接5V或3.3v电源
// D0 接PA5(SCL)
// D1 接PA7(SDA)
// RES 接PB0
// DC 接PB1
// CS 接PA4
// ----------------------------------------------------------------
// BMP280接线
// ----------------------------------------------------------------
// VCC 3.3v电源
// GND 电源地
// SDA PC11
// SCL PC12
// ----------------------------------------------------------------
#include "delay.h"
#include "sys.h"
#include "oled.h"
#include "bmp.h"
#include "sys.h"
#include "usart.h"
#include "led.h"
#include "myiic.h"
#include "dsciic.h"
#include "bme280.h"
#include "DS3231.h"
int main(void)
{
float bmp280_temp;
float bmp280_press;
float bmp280_humi;
float high;
u8 t=0;
//==================
delay_init(); //延时函数初始化
OLED_Init(); //初始化OLED
OLED_Clear();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
uart_init(9600);
LED_Init(); //初始化LED
IIC_Init();
bme280Init();
//2021-05-23 23:39:42
delay_init(); //延时函数初始化
NVIC_Configuration();// 设置中断优先级分组
uart_init(9600); //串口初始化为9600
LED_Init(); //初始化与LED连接的硬件接口
DS3231_Init();
DS3231_Set(21,5,26,12,30,00); //首次设置时间,设置完成后注释掉,重新下载一次程序即可掉电保存
//年,月,日,时,分,秒
//2021-05-23 23:39:42
while(1)
{
// bme280GetData(&bmp280_press,&bmp280_temp,&bmp280_humi,&high);
// //delay_ms(1500);
// //LED0=!LED0;
// printf("bmp280_press:%f\r\n",bmp280_press);
// delay_ms(10);
// printf("bmp280_temp :%f\r\n",bmp280_temp);
//// delay_ms(100);
//// printf("bmp280_humidity :%f\r\n",bmp280_humi);
// delay_ms(10);
// printf("bmp280_high :%f\r\n\r\n",high);
bme280GetData(&bmp280_press,&bmp280_temp,&bmp280_humi,&high);
get_show_time();
if(t!=calendar.sec)
{
t=calendar.sec;
printf("年月日:");
printf("%ld,%d,%d\r\n",calendar.w_year+2000,calendar.w_month,calendar.w_date);
printf("时分秒:");
printf("%d,%d,%d\r\n",calendar.hour,calendar.min,calendar.sec);
printf("bmp280_press:%f\r\n",bmp280_press);
delay_ms(10);
printf("bmp280_temp :%f\r\n",bmp280_temp);
delay_ms(100);
printf("bmp280_humidity :%f\r\n",bmp280_humi);
delay_ms(10);
printf("bmp280_high :%f\r\n\r\n",high);
OLED_ShowString(0,0,"Pres:"); //一个字符八个单位,例如x为0,第一个字符后为8开始
OLED_ShowString(0,1,"Temp:");
OLED_ShowString(0,2,"High:");
OLED_ShowString(106,0,"Pa");
OLED_ShowString(106,1,"C");
OLED_ShowString(106,2,"m");
OLED_ShowNum(40,0,bmp280_press,4,16); //最后一个变量是x轴的单位,每一个数字占多长
OLED_Showdecimal(40,1,bmp280_temp,9,16);
OLED_Showdecimal(40,2,high,9,16);
OLED_Showdecimal1(40,0,bmp280_press,9,16);
// //时间
// OLED_ShowNum(0,3,calendar.w_year+2000,4,16);
// OLED_ShowString(32,3,"/");
// OLED_ShowNum(40,3,calendar.w_month,2,16);
// OLED_ShowString(56,3,"/");
// OLED_ShowNum(64,3,calendar.w_date,2,16);
// OLED_ShowNum(0,4,calendar.hour,2,16);
// OLED_ShowString(16,4,":");
// OLED_ShowNum(24,4,calendar.min,2,16);
// OLED_ShowString(40,4,":");
// OLED_ShowNum(48,4,calendar.sec,2,16);
// LED0=!LED0;
}
//3333333333333333
//3333333333333333
// delay_ms(8000);
// OLED_Clear();
OLED_ShowString(0,3,"Design by ZXL");
OLED_ShowNum(0,5,calendar.w_year+2000,4,16);
OLED_ShowString(32,5,"/");
OLED_ShowNum(40,5,calendar.w_month,2,16);
OLED_ShowString(56,5,"/");
OLED_ShowNum(64,5,calendar.w_date,2,16);
OLED_ShowNum(0,6,calendar.hour,2,16);
OLED_ShowString(16,6,":");
OLED_ShowNum(24,6,calendar.min,2,16);
OLED_ShowString(40,6,":");
OLED_ShowNum(48,6,calendar.sec,2,16);
// delay_ms(8000);
}
}
代码:
代码.7z
(234.4 KB, 下载次数: 229)
|