|
網(wǎng)上看到很多人做單片機(jī)萬(wàn)年歷的,但是OLED萬(wàn)年歷的很少做,放假這幾天沒(méi)事干,做著玩一玩,累,很多東西都要自己重頭做起,這個(gè)例程只是一個(gè)初步,后面還有很多東西沒(méi)有做進(jìn)來(lái),我的OLED是IIC接口的,0.96寸的雙色屏.晶振是11.0592
M的.網(wǎng)上的買的時(shí)鐘模塊也沒(méi)有到貨.后面會(huì)加上,晶振應(yīng)該用12,或者24M的.時(shí)間會(huì)更準(zhǔn)確.按鍵調(diào)時(shí)也沒(méi)有加,我準(zhǔn)備用
遙控器.就這個(gè)簡(jiǎn)單的程序就花了近4K的程序空間,單片機(jī)用的STC12C5404,后面換成STC12C5412,不知道寫不寫得下.下面的跟貼有移植到STM32的圖片
如果有不懂的,或者調(diào)試中遇到困難,可以加我QQ或者we信QQ112001198
本人從事單片機(jī)30多年,可以幫你輕松的進(jìn)階STM32.
話不多說(shuō),上程序:
#include "codetab.h"
#include "LQ12864.h"
unsigned char a=0,b=0,c=0,d=0,e=0,f=0,g=0;
unsigned int l=0;
unsigned int i=31500; //這個(gè)值校時(shí),12小時(shí)制 比如8.39分,8*3600+39*60+秒數(shù)
bit disp=0;
void Timer0Init()//定時(shí)一秒,完成后進(jìn)行中斷
{
TMOD|=0X01;//0000 0001方式一
TH0=0X4C; //給定時(shí)器賦初值,定時(shí)50ms
TL0=0X00;
ET0=1;//打開(kāi)定時(shí)器0中斷允許
EA=1;//打開(kāi)總中斷
TR0=1;//打開(kāi)定時(shí)器
TF0=0;
}
void display()
{
OLED_P16x16Ch(0,2,f*2);
OLED_P16x16Ch(0,4,f*2+1); //0
OLED_P16x16Ch(16,2,e*2);
OLED_P16x16Ch(16,4,e*2+1);//1
OLED_P16x16Ch(32,2,32);
OLED_P16x16Ch(32,4,33);//:
OLED_P16x16Ch(48,2,d*2);
OLED_P16x16Ch(48,4,d*2+1);//2
OLED_P16x16Ch(64,2,c*2);
OLED_P16x16Ch(64,4,c*2+1);//3
OLED_P16x16Ch(80,2,32);
OLED_P16x16Ch(80,4,33);//:
OLED_P16x16Ch(95,2,b*2);
OLED_P16x16Ch(95,4,b*2+1);//4
OLED_P16x16Ch(111,2,a*2);
OLED_P16x16Ch(111,4,a*2+1);//5;
}
void main(void)
{
// unsigned char i;
// while(1){
// SCL=!SCL;
// delay(1000);//1000是257ms;
// SDA=!SDA;}
Timer0Init();
ET0=1;
EA=1;
delay(2000);
// OLED_CLS();
OLED_Init(); //OLED初始化
OLED_Fill(0xff); //屏全亮
delay(2000);
OLED_Fill(0x00); //屏全滅
delay(200);
//初始化時(shí)間顯示區(qū)
while(1)
{
OLED_P8x16Str(8,0,"2020");//第一行 -- 8x16的顯示單元顯示ASCII碼
OLED_P16x16Ch(40,0,34);//第一行第三列顯示年
OLED_P8x16Str(56,0,"02");
OLED_P16x16Ch(74,0,35); //顯示月
OLED_P8x16Str(90,0,"02");
OLED_P16x16Ch(106,0,36); //顯示日
if(disp)
{
display();
disp=0;
}
OLED_P16x16Ch(0,6,37);//星
OLED_P16x16Ch(16,6,38);//期
OLED_P16x16Ch(32,6,36);//日
OLED_P16x16Ch(48,6,20);//空
OLED_P16x16Ch(63,6,39);//正
OLED_P16x16Ch(79,6,35);//月
OLED_P16x16Ch(95,6,40);//初
OLED_P16x16Ch(111,6,29);//九
while(disp)
{
display();
disp=0;
}
}
}
void Timer0() interrupt 1 using 1
{
TF0=0;
TH0=0X4C; //50ms中斷一次
TL0=0X00;
g++;
disp=1;
if(g<20)return;
else {i++;g=0;}
if(i<10)
{//
a=i;
}//
else if(i>=10&&i<60)
{//
a=i%10;
b=i/10;
}//
else if(i>=60&&i<600)
{//
c=i/60;
b=(i-60*c)/10;
a=i-60*c-10*b;
}//
else if(i>=600&&i<3600)
{//
d=i/600;
c=(i-600*d)/60;
b=(i-600*d-60*c)/10;
a=i-600*d-60*c-10*b;
}//
else if(i>=3600&&i<43200)
{//
if(i>=36000)
{
l=36000;f=1;//表示有進(jìn)位
} //
e=(i-l)/3600;
d=(i-l-3600*e)/600;
c=(i-l-3600*e-600*d)/60;
b=(i-l-3600*e-600*d-60*c)/10;
a=i-l-3600*e-600*d-60*c-10*b;
}//點(diǎn)亮小時(shí),十二小時(shí)制。
else if(i==43200)
{i=0;f=0;a=0;b=0;c=0;d=0;e=0;}
disp=1;
}
全部資料51hei下載地址:
OLED12864-萬(wàn)年歷12小時(shí)制.zip
(81.16 KB, 下載次數(shù): 213)
2020-2-3 20:30 上傳
點(diǎn)擊文件名下載附件
|
|