久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3637|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

STC89C52單片機(jī)0.96寸OLED萬(wàn)年歷程序(可調(diào)節(jié)時(shí)鐘)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
之前學(xué)校比賽,于是在網(wǎng)上收集資料,于是做了一個(gè)OLED顯示的萬(wàn)年歷
可通過(guò)按鍵調(diào)節(jié)時(shí)間,需要四個(gè)按鍵

單片機(jī)源程序如下:
  1. #include <REGX52.H>
  2. #include "LCD1602.h"
  3. #include "DS1302.h"
  4. #include "Key.h"
  5. #include "Timer0.h"
  6. #include "oled.h"
  7. #include "bmp.h"
  8. #include "Delay.h"
  9. #include "Buzzer.h"


  10. unsigned char KeyNum,MODE,TimeSetSelect,TimeSetFlashFlag;

  11. void TimeShow(void)//時(shí)間顯示功能
  12. {
  13.         DS1302_ReadTime();//讀取時(shí)間
  14.         OLED_ShowNum(0,4,DS1302_Time[0],2,16);
  15.         OLED_ShowNum(38,4,DS1302_Time[1],2,16);
  16.         OLED_ShowNum(73,4,DS1302_Time[2],2,16);
  17.         OLED_ShowNum(0,6,DS1302_Time[3],2,16);
  18.         OLED_ShowNum(38,6,DS1302_Time[4],2,16);
  19.         OLED_ShowNum(73,6,DS1302_Time[5],2,16);
  20. }

  21. void TimeSet(void)//時(shí)間設(shè)置功能
  22. {
  23.         Buzzer_Time();
  24.         if(KeyNum==2)//按鍵2按下
  25.         {
  26.                 TimeSetSelect++;//設(shè)置選擇位加1
  27.                 TimeSetSelect%=6;//越界清零
  28.         }
  29.         if(KeyNum==3)//按鍵3按下
  30.         {
  31.                 Buzzer_Time();
  32.                 DS1302_Time[TimeSetSelect]++;//時(shí)間設(shè)置位數(shù)值加1
  33.                 if(DS1302_Time[0]>99){DS1302_Time[0]=0;}//年越界判斷
  34.                 if(DS1302_Time[1]>12){DS1302_Time[1]=1;}//月越界判斷
  35.                 if( DS1302_Time[1]==1 || DS1302_Time[1]==3 || DS1302_Time[1]==5 || DS1302_Time[1]==7 ||
  36.                         DS1302_Time[1]==8 || DS1302_Time[1]==10 || DS1302_Time[1]==12)//日越界判斷
  37.                 {
  38.                         if(DS1302_Time[2]>31){DS1302_Time[2]=1;}//大月
  39.                 }
  40.                 else if(DS1302_Time[1]==4 || DS1302_Time[1]==6 || DS1302_Time[1]==9 || DS1302_Time[1]==11)
  41.                 {
  42.                         if(DS1302_Time[2]>30){DS1302_Time[2]=1;}//小月
  43.                 }
  44.                 else if(DS1302_Time[1]==2)
  45.                 {
  46.                         if(DS1302_Time[0]%4==0)
  47.                         {
  48.                                 if(DS1302_Time[2]>29){DS1302_Time[2]=1;}//閏年2月
  49.                         }
  50.                         else
  51.                         {
  52.                                 if(DS1302_Time[2]>28){DS1302_Time[2]=1;}//平年2月
  53.                         }
  54.                 }
  55.                 if(DS1302_Time[3]>23){DS1302_Time[3]=0;}//時(shí)越界判斷
  56.                 if(DS1302_Time[4]>59){DS1302_Time[4]=0;}//分越界判斷
  57.                 if(DS1302_Time[5]>59){DS1302_Time[5]=0;}//秒越界判斷
  58.         }
  59.         if(KeyNum==4)//按鍵3按下
  60.         {
  61.                 Buzzer_Time();
  62.                 DS1302_Time[TimeSetSelect]--;//時(shí)間設(shè)置位數(shù)值減1
  63.                 if(DS1302_Time[0]<0){DS1302_Time[0]=99;}//年越界判斷
  64.                 if(DS1302_Time[1]<1){DS1302_Time[1]=12;}//月越界判斷
  65.                 if( DS1302_Time[1]==1 || DS1302_Time[1]==3 || DS1302_Time[1]==5 || DS1302_Time[1]==7 ||
  66.                         DS1302_Time[1]==8 || DS1302_Time[1]==10 || DS1302_Time[1]==12)//日越界判斷
  67.                 {
  68.                         if(DS1302_Time[2]<1){DS1302_Time[2]=31;}//大月
  69.                         if(DS1302_Time[2]>31){DS1302_Time[2]=1;}
  70.                 }
  71.                 else if(DS1302_Time[1]==4 || DS1302_Time[1]==6 || DS1302_Time[1]==9 || DS1302_Time[1]==11)
  72.                 {
  73.                         if(DS1302_Time[2]<1){DS1302_Time[2]=30;}//小月
  74.                         if(DS1302_Time[2]>30){DS1302_Time[2]=1;}
  75.                 }
  76.                 else if(DS1302_Time[1]==2)
  77.                 {
  78.                         if(DS1302_Time[0]%4==0)
  79.                         {
  80.                                 if(DS1302_Time[2]<1){DS1302_Time[2]=29;}//閏年2月
  81.                                 if(DS1302_Time[2]>29){DS1302_Time[2]=1;}
  82.                         }
  83.                         else
  84.                         {
  85.                                 if(DS1302_Time[2]<1){DS1302_Time[2]=28;}//平年2月
  86.                                 if(DS1302_Time[2]>28){DS1302_Time[2]=1;}
  87.                         }
  88.                 }
  89.                 if(DS1302_Time[3]<0){DS1302_Time[3]=23;}//時(shí)越界判斷
  90.                 if(DS1302_Time[4]<0){DS1302_Time[4]=59;}//分越界判斷
  91.                 if(DS1302_Time[5]<0){DS1302_Time[5]=59;}//秒越界判斷
  92.         }
  93.         //更新顯示,根據(jù)TimeSetSelect和TimeSetFlashFlag判斷可完成閃爍功能
  94.         if(TimeSetSelect==0 && TimeSetFlashFlag==1){OLED_ShowString(0,4,"  ",16);}
  95.         else {OLED_ShowNum(0,4,DS1302_Time[0],2,16);}
  96.         if(TimeSetSelect==1 && TimeSetFlashFlag==1){OLED_ShowString(38,4,"  ",16);}
  97.         else {OLED_ShowNum(38,4,DS1302_Time[1],2,16);}
  98.         if(TimeSetSelect==2 && TimeSetFlashFlag==1){OLED_ShowString(73,4,"  ",16);}
  99.         else {OLED_ShowNum(73,4,DS1302_Time[2],2,16);}
  100.         if(TimeSetSelect==3 && TimeSetFlashFlag==1){OLED_ShowString(0,6,"  ",16);}
  101.         else {OLED_ShowNum(0,6,DS1302_Time[3],2,16);}
  102.         if(TimeSetSelect==4 && TimeSetFlashFlag==1){OLED_ShowString(38,6,"  ",16);}
  103.         else {OLED_ShowNum(38,6,DS1302_Time[4],2,16);}
  104.         if(TimeSetSelect==5 && TimeSetFlashFlag==1){OLED_ShowString(73,6,"  ",16);}
  105.         else {OLED_ShowNum(73,6,DS1302_Time[5],2,16);}
  106. }

  107. void main()
  108. {
  109.         
  110.         OLED_Init();//
  111.         OLED_ColorTurn(0);//
  112.   OLED_DisplayTurn(0);//
  113. //        DS1302_Init();
  114.         Timer0Init();
  115.         
  116.         
  117.         DS1302_SetTime();//設(shè)置時(shí)間
  118.         OLED_DrawBMP(0,0,128,64,BMP1);
  119.                
  120.         Delay(200);
  121.         OLED_Clear();
  122.         Delay(20);
  123.         OLED_ShowString(0,1,"Time is money",16);
  124.         //        OLED_ShowString(0,4, "  -   -  ",16);
  125.         //        OLED_ShowString(0,6, "  -   -  ",16);
  126.         OLED_ShowChinese(18,4,0,16);//?D
  127.         OLED_ShowChinese(55,4,1,16);//?°
  128.         OLED_ShowChinese(92,4,2,16);//?°
  129.         OLED_ShowChinese(18,6,3,16);//μ?
  130.         OLED_ShowChinese(55,6,4,16);//×ó
  131.         OLED_ShowChinese(92,6,5,16);//??
  132.         while(1)
  133.         {
  134.                 KeyNum=Key();//讀取鍵碼
  135.                 if(KeyNum==1)//按鍵1按下
  136.                 {
  137.                         Buzzer_Time();
  138.                         if(MODE==0){MODE=1;TimeSetSelect=0;}//功能切換
  139.                         else if(MODE==1){MODE=0;DS1302_SetTime();}
  140.                 }
  141.                 switch(MODE)//根據(jù)不同的功能執(zhí)行不同的函數(shù)
  142.                 {
  143.                         case 0:TimeShow();break;
  144.                         case 1:TimeSet();break;
  145.                 }
  146.         }
  147.         
  148.         
  149. }

  150. void Timer0_Routine() interrupt 1
  151. {
  152.         static unsigned int T0Count;
  153.         TL0 = 0x66;                //設(shè)置定時(shí)初值
  154.         TH0 = 0xFC;                //設(shè)置定時(shí)初值
  155.         T0Count++;
  156.         if(T0Count>=20)//每20ms進(jìn)入一次
  157.         {
  158.                 T0Count=0;
  159.                 TimeSetFlashFlag=!TimeSetFlashFlag;//閃爍標(biāo)志位取反
  160.         }
  161. }
復(fù)制代碼

上圖所有代碼51hei附件下載:
DS1302可調(diào)時(shí)鐘(OLED) (測(cè)試).zip (99.36 KB, 下載次數(shù): 116)

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 伊人春色在线 | 国产一区二区电影网 | 高清成人av | 精品1区2区3区4区 | 三级视频在线观看电影 | 国产精品国产三级国产aⅴ无密码 | 亚洲人成人网 | 久久69精品久久久久久久电影好 | 日本不卡一区二区三区在线观看 | 日本三级网 | 香蕉一区| 精品国产视频 | 伊人精品在线 | 午夜影院在线播放 | 在线看av网址 | 羞羞网站免费观看 | 99久久日韩精品免费热麻豆美女 | 亚洲成人精品国产 | 日韩aⅴ视频 | 日本不卡在线观看 | 色爱综合 | 久久亚洲国产 | 99re热这里只有精品视频 | 日日草夜夜草 | 91视频91 | 在线黄 | 日韩欧美三级 | 中文字幕一二三 | 少妇性l交大片免费一 | 亚洲福利一区 | 日韩在线一区二区 | 欧美精品一区二区三区在线 | 日韩一区二区三区在线 | 在线一区二区三区 | 免费观看黄 | 欧美白人做受xxxx视频 | 久久久久国产精品一区二区 | 日本精品一区二区三区在线观看 | 国产成人在线视频播放 | 秋霞a级毛片在线看 | 欧美综合一区 |