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

QQ登錄

只需一步,快速開始

搜索
查看: 3945|回復(fù): 2
收起左側(cè)

OLED簡(jiǎn)易萬(wàn)年歷單片機(jī)源程序

[復(fù)制鏈接]
ID:68739 發(fā)表于 2017-12-2 19:43 | 顯示全部樓層 |閱讀模式
簡(jiǎn)易萬(wàn)年歷在德飛萊開發(fā)板上
1.JPG 2.JPG

單片機(jī)源程序如下:
  1. #include <REGX52.H>
  2. #include "type.H"
  3. #include "OLEDDrive.H"
  4. #include"DS1302.h"
  5. #define FunKeyVal 1//按下功能鍵
  6. #define AddKeyVal 2//按下增加鍵
  7. #define SubKeyVal 3//按下減少鍵
  8. #define EscKeyVal 4//退出鍵
  9. //當(dāng)前選中的時(shí)那個(gè)位置編號(hào)
  10. #define IDMax       9
  11. #define SelectYear  1
  12. #define SelectMonth 2
  13. #define SelectDate  3
  14. #define SelectDay   4
  15. #define SelectHour  5
  16. #define SelectMin   6
  17. #define SelectSec   7
  18. #define SelectClockHour 8
  19. #define SelectClockMin  9


  20. #define DIRUP  1
  21. #define DIRDOW 2
  22. extern uint16 ReadTemp(uint8 mode);
  23. uint8 buf[5];//顯示緩存
  24. uint8 SelectState[]={0x00,0xff};
  25. bit ReadTemperatureFlag=0;//溫度讀取標(biāo)志位
  26. uint16 Temperature;//DS18B20讀取的16位溫度數(shù)據(jù)
  27. code uint8 DecimalNum[16]={'0','1','1','2','3','3','4',
  28. '4','5','6','6','7','8','8','9','9'};//DS18B20讀取的16bit數(shù)據(jù)最低4位對(duì)應(yīng)的小數(shù)4舍5入取一位

  29. sfr IAP_CONTR = 0XE7;//特殊功能寄存器
  30. uint8 ClockHour=0;
  31. uint8 ClockMin=0;
  32. bit ClockFlag=0;
  33. sbit BEEP=P3^7;
  34. uint8 ID=0;//功能切換
  35. code uint8 weekstr[8][3]={
  36. "   ","Mon","Tue","Wed","Thu","Fri","Sat","Sun"};
  37. uint8 code Mon2[2][13]={0,31,28,31,30,31,30,31,31,30,31,30,31,
  38.                                   0,31,29,31,30,31,30,31,31,30,31,30,31};
  39. uint8 code TempIco[]={
  40. /*--  調(diào)入了一幅圖像:這是您新建的圖像  --*/
  41. /*--  寬度x高度=8x16  --*/
  42. 0x00,0x00,0xFC,0x02,0xAA,0xFC,0x00,0x00,0x08,0x1C,0x3F,0x7E,0x7E,0x3F,0x1C,0x08,
  43. };
  44. uint8 code BEEPIco[]=
  45. {/*--  調(diào)入了一幅圖像:C:\Users\wise\Desktop\喇叭.bmp  --*/
  46. /*--  寬度x高度=16x16  --*/
  47. 0xF0,0x10,0x10,0xF0,0x18,0x0C,0x06,0x03,0xFF,0xFF,0xB0,0x98,0x8C,0x86,0x83,0x81,
  48. 0x0F,0x08,0x08,0x0F,0x08,0x30,0x20,0xC0,0xFF,0xFF,0x0D,0x19,0x31,0x61,0xC1,0x81};

  49. //溫度單位符號(hào)℃
  50. uint8 code TempUint[]={
  51. /*--  調(diào)入了一幅圖像:這是您新建的圖像  --*/
  52. /*--  寬度x高度=6x8  --*/
  53. 0x02,0x05,0x72,0x88,0x88,0x00,
  54. };
  55. void UARTInit()
  56. {   
  57.     SCON = 0x50;           //設(shè)定串口工作方式   
  58.     PCON = 0x00;           //波特率不倍增      
  59.     TMOD = 0x20;           //定時(shí)器1工作于8位自動(dòng)重載模式, 用于產(chǎn)生波特率   
  60.     EA = 1;   
  61.     ES = 1;              //允許串口中斷  
  62.     TL1 = 0xfd;   
  63.     TH1 = 0xfd;             //波特率9600  
  64.     TR1 = 1;
  65. }
  66. /**************************************************
  67. 將2位十進(jìn)制數(shù)轉(zhuǎn)為字符
  68. **************************************************/
  69. void Dec2ToStr(uint8 dec,uint8 *str)
  70. {
  71.     *str++=dec/10+0x30;
  72.     *str=dec%10+0x30;
  73. }
  74. /**************************************************
  75. 閏年判斷2000-2099年能被4整除就時(shí)閏年
  76. **************************************************/
  77. uint8 IsLeapYear(uint8 year)
  78. {
  79.     if((year%4)==0)
  80.     {
  81.         return 1;
  82.     }
  83.     return 0;
  84. }
  85. /**************************************************
  86. 顯示年信息
  87. **************************************************/
  88. void ShowYear(void)
  89. {
  90.     GUIShowString(2*6,0,"20",2,SelectState[SelectYear==ID]);
  91.     Dec2ToStr(time.year,buf);
  92.     GUIShowString(4*6,0,buf,2,SelectState[SelectYear==ID]);
  93.     GUIShowString(6*6,0,"-",1,0);   
  94. }
  95. /**************************************************
  96. 顯示月信息
  97. **************************************************/
  98. void ShowMonth(void)
  99. {
  100.     Dec2ToStr(time.month,buf);
  101.     GUIShowString(7*6,0,buf,2,SelectState[SelectMonth==ID]);
  102.     GUIShowString(9*6,0,"-",1,0);
  103. }
  104. /**************************************************
  105. 顯示日期信息
  106. **************************************************/
  107. void ShowDate(void)
  108. {
  109.     Dec2ToStr(time.date,buf);
  110.     GUIShowString(10*6,0,buf,2,SelectState[SelectDate==ID]);
  111. }
  112. /**************************************************
  113. 顯示星期信息
  114. **************************************************/
  115. void ShowDay(void)
  116. {
  117.     GUIShowString(17*6,0,weekstr[time.day],3,SelectState[SelectDay==ID]);
  118. }
  119. /**************************************************
  120. 顯示小時(shí)信息
  121. **************************************************/
  122. void ShowHour(void)
  123. {
  124.     GUIShowChar15X24(0,2,time.hour/10,SelectState[SelectHour==ID]);
  125.     GUIShowChar15X24(1*15,2,time.hour%10,SelectState[SelectHour==ID]);
  126.     GUIShowChar15X24(2*15,2,10,0);
  127. }
  128. /**************************************************
  129. 顯示分信息
  130. **************************************************/
  131. void ShowMin(void)
  132. {
  133.     GUIShowChar15X24(3*15,2,time.min/10,SelectState[SelectMin==ID]);
  134.     GUIShowChar15X24(4*15,2,time.min%10,SelectState[SelectMin==ID]);
  135.     GUIShowChar15X24(5*15,2,10,0);
  136. }
  137. /**************************************************
  138. 顯示秒信息
  139. **************************************************/
  140. void ShowSec(void)
  141. {
  142.     GUIShowChar15X24(6*15,2,time.sec/10,SelectState[SelectSec==ID]);
  143.     GUIShowChar15X24(7*15,2,time.sec%10,SelectState[SelectSec==ID]);
  144. }
  145. /**************************************************
  146. 顯示鬧鈴時(shí)
  147. **************************************************/
  148. void ShowClockHour(void)
  149. {
  150.     Dec2ToStr(ClockHour,buf);
  151.     GUIShowString(11*6,7,buf,2,SelectState[SelectClockHour==ID]);
  152.     GUIShowString(13*6,7,":",1,0);      
  153. }
  154. /**************************************************
  155. 顯示鬧鈴分
  156. **************************************************/
  157. void ShowClockMin(void)
  158. {
  159.     Dec2ToStr(ClockMin,buf);
  160.     GUIShowString(14*6,7,buf,2,SelectState[SelectClockMin==ID]);     
  161. }
  162. void Dec1ToStr1(uint8 dec,uint8 *str)
  163. {
  164.         str[0]=' ';
  165.         str[1]=' ';
  166.         str[2]=dec+0x30;
  167. }
  168. void Dec2ToStr1(uint8 dec,uint8 *str)
  169. {
  170.         str[0]=' ';
  171.         str[1]=dec/10+0x30;
  172.         str[2]=dec%10+0x30;
  173. }
  174. void Dec3ToStr1(uint8 dec,uint8 *str)
  175. {
  176.         str[0]=dec/100+0x30;
  177.         str[1]=dec%100/10+0x30;
  178.         str[2]=dec%10+0x30;
  179. }
  180. /**************************************************
  181. 顯示溫度信息
  182. **************************************************/
  183. void ShowTemperature(uint16 temperature,uint8* str)
  184. {
  185.     str[3]='.';
  186.         if(temperature&0x8000)//負(fù)溫度
  187.         {
  188.                 temperature=~temperature+1;
  189.                 str[4]=DecimalNum[temperature&0x0f];//計(jì)算小數(shù)部分
  190.                 temperature=temperature>>4;
  191.                 if(temperature>9)//負(fù)溫度的時(shí)候最多只有2位整數(shù)部分
  192.                 {
  193.                         Dec3ToStr1(temperature,str);
  194.                         str[0]='-';                               
  195.                 }
  196.                 else
  197.                 {
  198.                         Dec2ToStr1(temperature,str);
  199.                         str[1]='-';       
  200.                 }
  201.         }
  202.         else
  203.         {
  204.                 str[4]=DecimalNum[temperature&0x0f];//計(jì)算小數(shù)部分
  205.                 temperature=temperature>>4;
  206.                 if(temperature>99)
  207.                 {
  208.                         Dec3ToStr1(temperature,str);                       
  209.                 }
  210.                 else if(temperature>9)
  211.                 {
  212.                         Dec2ToStr1(temperature,str);                       
  213.                 }
  214.                 else
  215.                 {
  216.                         Dec1ToStr1(temperature,str);                       
  217.                 }                               
  218.         }
  219.         GUIShowString(8,7,str,5,0);  
  220. }
  221. /**************************************************
  222. 顯示時(shí)間信息
  223. **************************************************/
  224. void ShowTime(void)
  225. {
  226.     ShowYear();//顯示時(shí)間
  227.     ShowMonth();
  228.    
  229. ……………………

  230. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
B1.程序.zip (102.25 KB, 下載次數(shù): 74)


評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:243748 發(fā)表于 2017-12-28 12:58 來(lái)自手機(jī) | 顯示全部樓層
學(xué)習(xí)一下
回復(fù)

使用道具 舉報(bào)

ID:362103 發(fā)表于 2018-6-30 06:47 | 顯示全部樓層
學(xué)習(xí)一下
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表