- 单片机用的是stc12c5a60s2
- 显示屏用0.96寸的oled
- 时钟芯片DS1302
- 用两块4x6cm的万能板叠起来制作的,所以比较迷你型,不过麻雀虽小,五脏俱全,如下图
- 上层正面
-
- 上层背面
-
- 下层正面
-
下层背面
11.电路图如下
12.本来打算用type-c供电的,后面发现显示屏一直不亮,一度怀疑是我程序问题,排除了很多因素,因为稳压我用的是78l05
后面查了78L05数据手册才发现芯片要有1.7v以上压差才能有5V输出,所以我暂时用7V的电池供电,以后再改善一下
单片机源程序如下:
#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
//主函数
void main()
{
TMOD=0x11; //指定定时/计数器的工作方式为3
TH0=0; //定时器T0的高四位=0
TL0=0; //定时器T0的低四位=0
EA=1; //开总中断
ET0=1; //允许T0中断
TR0=1; //开启中断,启动定时器
OLED_Init() ; //液晶屏初始化子函数
OLED_ColorTurn(0); //0正常显示,1 反色显示
OLED_DisplayTurn(0); //0正常显示 1 屏幕翻转显示
//welcome0(); //调用欢迎信息1
ds1302_init(); //DS1302时钟的初始化子函数
led=1;
n=0;
while(1)
{
key();
}
}
void timer0() interrupt 1 //取得并显示日历和时间
{
sec = BCD(read_1302(0x81));//读取1302的秒数据并转换成十进制数
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);// 显示时
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); //写星期函数
}
Keil代码下载:
源码+图纸.7z
(51.52 KB, 下载次数: 105)
|