|
- 單片機(jī)用的是stc12c5a60s2
- 顯示屏用0.96寸的oled
- 時(shí)鐘芯片DS1302
- 用兩塊4x6cm的萬能板疊起來制作的,所以比較迷你型,不過麻雀雖小,五臟俱全,如下圖
- 上層正面
-
- 上層背面
-
- 下層正面
-
下層背面
11.電路圖如下
12.本來打算用type-c供電的,后面發(fā)現(xiàn)顯示屏一直不亮,一度懷疑是我程序問題,排除了很多因素,因?yàn)榉(wěn)壓我用的是78l05
后面查了78L05數(shù)據(jù)手冊才發(fā)現(xiàn)芯片要有1.7v以上壓差才能有5V輸出,所以我暫時(shí)用7V的電池供電,以后再改善一下
單片機(jī)源程序如下:
#include <reg51.h>
#include "delay.h"
#include "oledfont.h"
#include "bmp.h"
#include "oled.h"
#include "ds1302.h"
#define uchar unsigned char
#define uint unsigned int
//主函數(shù)
void main()
{
TMOD=0x11; //指定定時(shí)/計(jì)數(shù)器的工作方式為3
TH0=0; //定時(shí)器T0的高四位=0
TL0=0; //定時(shí)器T0的低四位=0
EA=1; //開總中斷
ET0=1; //允許T0中斷
TR0=1; //開啟中斷,啟動(dòng)定時(shí)器
OLED_Init() ; //液晶屏初始化子函數(shù)
OLED_ColorTurn(0); //0正常顯示,1 反色顯示
OLED_DisplayTurn(0); //0正常顯示 1 屏幕翻轉(zhuǎn)顯示
//welcome0(); //調(diào)用歡迎信息1
ds1302_init(); //DS1302時(shí)鐘的初始化子函數(shù)
led=1;
n=0;
while(1)
{
key();
}
}
void timer0() interrupt 1 //取得并顯示日歷和時(shí)間
{
sec = BCD(read_1302(0x81));//讀取1302的秒數(shù)據(jù)并轉(zhuǎn)換成十進(jìn)制數(shù)
min = BCD(read_1302(0x83));
hour = BCD(read_1302(0x85));
day = BCD(read_1302(0x87));
mouth= BCD(read_1302(0x89));
year = BCD(read_1302(0x8d));
week = BCD(read_1302(0x8b));
OLED_ShowNum(0,0,20,2,16);// 顯示20
OLED_ShowNum(16,0,year/10,1,16);// 顯示年
OLED_ShowNum(24,0,year%10,1,16);//
OLED_ShowChar(32,0,'-',16);//
OLED_ShowNum(40,0,mouth/10,1,16);// 顯示月
OLED_ShowNum(48,0,mouth%10,1,16);//
OLED_ShowChar(56,0,'-',16);//
OLED_ShowNum(64,0,day/10,1,16);// 顯示日
OLED_ShowNum(72,0,day%10,1,16);//
OLED_ShowNum(0,2,hour/10,1,16);// 顯示時(shí)
OLED_ShowNum(8,2,hour%10,1,16);//
OLED_ShowString(16,2,":",16);//
OLED_ShowNum(24,2,min/10,1,16);// 顯示分
OLED_ShowNum(32,2,min%10,1,16);//
OLED_ShowString(40,2,":",16);//
OLED_ShowNum(48,2,sec/10,1,16);// 顯示秒
OLED_ShowNum(56,2,sec%10,1,16);//
write_week(0,5,16,week); //寫星期函數(shù)
}
Keil代碼下載:
源碼+圖紙.7z
(51.52 KB, 下載次數(shù): 105)
2022-4-9 18:24 上傳
點(diǎn)擊文件名下載附件
|
評分
-
查看全部評分
|