找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2241|回复: 2
打印 上一主题 下一主题
收起左侧

使用STC15单片机驱动的OLED DS1302时钟

[复制链接]
跳转到指定楼层
楼主
ID:466381 发表于 2021-2-13 02:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
以前搞的一个项目,现在拿出来分享一下代码(实物很久以前就损坏了)

单片机源程序如下:
  1. #include<stc15f2k60s2.h>
  2. #include<LQ12864.h>
  3. #include<ds1302.h>
  4. #include<ds18b20.h>
  5. sbit SetMode=P5^4;
  6. sbit SetTimes=P5^5;

  7. void delayk(unsigned int MS)   //误差 0us
  8. {
  9.         while(MS--)
  10.         {
  11.     unsigned char a,b;
  12.     for(b=129;b>0;b--)
  13.         for(a=45;a>0;a--);
  14. }
  15. }
  16. unsigned int tem;
  17. unsigned char GK;//水平测
  18. unsigned char model=0;
  19. unsigned char code Shuzi[]="0123456789:-";
  20. unsigned char TimeMode[9];
  21. unsigned char DateMode[11];
  22. unsigned char TempMode[6];
  23. unsigned char GKMode[3];
  24. unsigned char InitTime[7]={0,0,14,4,4,4,19};//秒分时日月周年
  25. unsigned int Celsius;
  26. void KeysCan()
  27. {
  28. if(!SetMode)
  29. {
  30. delayk(50);
  31. model++;
  32. if(model==7){model=0;}
  33. while(!SetMode);
  34. }
  35. }
  36. unsigned char Gaokao()
  37. {
  38. unsigned char temp;
  39. switch(InitTime[4])
  40. {
  41.         case 4:temp=70-InitTime[3];break;
  42.         case 5:temp=40-InitTime[3];break;
  43.         case 6:temp=9-InitTime[3];break;
  44. }
  45. return(temp);
  46. }

  47. void TMPdisplay()
  48. {
  49. TempMode[0]=Shuzi[tem%1000/100];
  50. TempMode[1]=Shuzi[tem%100/10];
  51. TempMode[2]='.';
  52. TempMode[3]=Shuzi[tem%10];
  53. TempMode[4]='^';
  54. TempMode[5]='C';
  55. TempMode[6]='\0';

  56. OLED_P8x16Str(64,0,TempMode);
  57. }

  58. void SMG()
  59. {
  60. unsigned char a;
  61. a=read1302(Read_hour);
  62. InitTime[2]=((a>>4)*10+(a&0x0f));
  63. TimeMode[0]=Shuzi[a>>4];
  64. TimeMode[1]=Shuzi[a&0x0f];
  65. TimeMode[2]=Shuzi[10];
  66. a=read1302(Read_minute);
  67. InitTime[1]=((a>>4)*10+(a&0x0f));
  68. TimeMode[3]=Shuzi[a>>4];
  69. TimeMode[4]=Shuzi[a&0x0f];
  70. TimeMode[5]=Shuzi[10];
  71. a=read1302(Read_second);        
  72. InitTime[0]=((a>>4)*10+(a&0x0f));
  73. TimeMode[6]=Shuzi[a>>4];
  74. TimeMode[7]=Shuzi[a&0x0f];        
  75. TimeMode[8]='\0';

  76. a=read1302(Read_year);
  77. InitTime[6]=((a>>4)*10+(a&0x0f));
  78. DateMode[0]=Shuzi[2];        
  79. DateMode[1]=Shuzi[0];        
  80. DateMode[2]=Shuzi[a>>4];        
  81. DateMode[3]=Shuzi[a&0x0f];        
  82. DateMode[4]=Shuzi[11];
  83. a=read1302(Read_month);        
  84. InitTime[4]=((a>>4)*10+(a&0x0f));
  85. DateMode[5]=Shuzi[a>>4];        
  86. DateMode[6]=Shuzi[a&0x0f];        
  87. DateMode[7]=Shuzi[11];
  88. a=read1302(Read_day);        
  89. InitTime[3]=((a>>4)*10+(a&0x0f));
  90. DateMode[8]=Shuzi[a>>4];        
  91. DateMode[9]=Shuzi[a&0x0f];        
  92. DateMode[10]='\0';        

  93. GK=Gaokao();
  94. GKMode[0]=Shuzi[GK/10];
  95. GKMode[1]=Shuzi[GK%10];
  96. GKMode[2]='\0';
  97. }


  98. void main()
  99. {
  100. OLED_Init();
  101. Draw_BMP(0,0,128,8,Zhangtianlan);
  102. delayk(300);
  103. OLED_CLS();
  104.         OLED_P8x16Str(4,4,"Time:");
  105. for(model=0;model<8;model++)
  106. {
  107. OLED_P16x16Ch(16*model,6,model,CNY);
  108. }
  109. model=0;
  110. init_ds1302_io();


  111. while(1)
  112. {
  113. unsigned char b,c;
  114. TMPchange();
  115. for(c=0;c<15;c++)
  116. {
  117. KeysCan();
  118. if(!SetTimes)
  119. {
  120. delayk(20);
  121. switch(model)
  122. {
  123.         case 0:InitTime[model]=0;SetTime(InitTime);break;
  124.         case 1:InitTime[model]++;  if(InitTime[model]==60){InitTime[model]=0;}  SetTime(InitTime);break;
  125.         case 2:InitTime[model]++;  if(InitTime[model]==24){InitTime[model]=0;} SetTime(InitTime);break;
  126.         
  127.         case 3:InitTime[model]++;  
  128.         switch(InitTime[model+1])
  129.                 {
  130.                 case 2:if(InitTime[model]==29){InitTime[model]=1;}break;
  131.                 case 4:if(InitTime[model]==31){InitTime[model]=1;}break;
  132.                 case 6:if(InitTime[model]==31){InitTime[model]=1;}break;
  133.                 case 9:if(InitTime[model]==31){InitTime[model]=1;}break;
  134.                 case 11:if(InitTime[model]==31){InitTime[model]=1;}break;
  135.                 default:if(InitTime[model]==32){InitTime[model]=1;}break;
  136.                 }
  137.         SetTime(InitTime);
  138.         break;

  139.         case 4:InitTime[model]++;  if(InitTime[model]==13){InitTime[model]=1;}  SetTime(InitTime);break;
  140.         case 5:InitTime[model]++;  if(InitTime[model]==8){InitTime[model]=1;}  SetTime(InitTime);break;
  141.         case 6:InitTime[model]++;  if(InitTime[model]==100){InitTime[model]=0;}  SetTime(InitTime);break;
  142. }
  143. while(!SetTimes);
  144. }
  145. SMG();
  146. b=read1302(Read_week);
  147. InitTime[5]=((b>>4)*10+(b&0x0f));
  148. switch(b)
  149. {
  150.         case 1:OLED_P8x16Str(96,2,"Mon");break;
  151.         case 2:OLED_P8x16Str(96,2,"Tue");break;
  152.         case 3:OLED_P8x16Str(96,2,"Wed");break;
  153.         case 4:OLED_P8x16Str(96,2,"Thu");break;
  154.         case 5:OLED_P8x16Str(96,2,"Fri");break;
  155.         case 6:OLED_P8x16Str(96,2,"Sat");break;
  156.         case 7:OLED_P8x16Str(96,2,"Sun");break;
  157. }
  158. OLED_P8x16Str(52,4,TimeMode);
  159. OLED_P8x16Str(5,2,DateMode);
  160. switch(model+1)
  161. {
  162.         case 1:OLED_P8x16Str(4,0,"SetSec\0");break;
  163.         case 2:OLED_P8x16Str(4,0,"SetMin\0");break;
  164.         case 3:OLED_P8x16Str(4,0,"SetHou\0");break;
  165.         case 4:OLED_P8x16Str(4,0,"SetDay\0");break;
  166.         case 5:OLED_P8x16Str(4,0,"SetMon\0");break;
  167.         case 6:OLED_P8x16Str(4,0,"SetWek\0");break;
  168.         case 7:OLED_P8x16Str(4,0,"SetYea\0");break;//break;
  169. }
  170. TMPdisplay();
  171. OLED_P8x16Str(96,6,GKMode);
  172. }
  173. tem=TMPget();
  174. }
  175. }
复制代码

所有程序51hei提供下载:
OLED-DS1302时钟 STC15版.zip (83.98 KB, 下载次数: 45)



评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:410182 发表于 2021-3-11 23:43 | 只看该作者
学习一下,为啥不用注释呀
回复

使用道具 举报

板凳
ID:466381 发表于 2021-3-16 23:31 | 只看该作者
yuzhihang123 发表于 2021-3-11 23:43
学习一下,为啥不用注释呀

很久以前的代码,当时写的时候没注释
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表