51單片機新人一個,自己最近在做DIY,雖然DIY做的很low,但是還是可以對學習STM32的小伙伴們提供一點點的價值的,發(fā)這個帖子,主要是我最近才接觸到51黑論壇,卻沒發(fā)現(xiàn)這是一個寶藏論壇,在制作DIY小玩意的過程中,很多資料也是在51黑電子論壇中找到的剛完成了一個作品忍不住提供一點點自己的價值。本設計主要的功能正如標題所示
•(1)OLED顯示。
•(2)萬年歷。
•(3)浮點數(shù)顯示BMP280的數(shù)據(jù)(大氣壓強,海拔高度,溫度)。
說它low主要是我更多的整合了別人的程序,模塊驅(qū)動整合搬運工就是我了,如果有什么問題,還麻煩各位大佬不吝賜教!超級感謝
542b34cab5a1b9cb8332928062ae505.jpg (105.05 KB, 下載次數(shù): 76)
下載附件
實物圖
2021-5-28 00:19 上傳
單片機源程序如下:
// 文 件 名 : 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(); //延時函數(shù)初始化
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(); //延時函數(shù)初始化
NVIC_Configuration();// 設置中斷優(yōu)先級分組
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軸的單位,每一個數(shù)字占多長
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, 下載次數(shù): 235)
2021-5-28 04:19 上傳
點擊文件名下載附件
|