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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4998|回復: 3
打印 上一主題 下一主題
收起左側

Lcdl602顯示電子時鐘帶農歷 原理圖PCB文件與仿真

[復制鏈接]
跳轉到指定樓層
樓主
Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)


仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載):

  
序號
  
元件名稱
個數
備注
  
1
  
STC89C52
1


  
2
  
瓷片電容30pf
2


  
3
  
晶振12MHZ
1


  
4
  
電解電容10uf
1


  
5
  
電阻10k
2


  
6
  
輕觸按鍵開關
5


  
8
  
自鎖按鈕開關
1


  
9
  
9腳排阻10k
1


  
10
  
LCD1602
1


  
11
  
瓷片電容0.1uf
3


  
12
  
臥式電位器10k
1


  
13
  
5腳排阻10k
1


  
14
  
DS18B20
1


  
15
  
DS1302
1


  
16
  
3V紐扣電池CR1220
1


  
17
  
CR1220紐扣電池座
1


  
18
  
晶振32768HZ
1


  
19
  
DIP40底座
1


  
20
  
DIP8底座
1


  
21
  
16P單排母
1


  
22
  
USB-A型母座
1


  
23
  
無源蜂鳴器
1


  
24
  
三極管8550
1


  
25
  
電阻100
2



單片機源程序如下:
  1. /******************************************************************************
  2. *  設計名稱:Lcdl602顯示電子時鐘
  3. *  功能:農歷顯示、溫度顯示、鬧鐘、
  4. ******************************************************************************/
  5. #include<reg51.h>
  6. #include"main.h"
  7. #include"lcd.h"
  8. #include"ds1302.h"
  9. #include"temp.h"
  10. #include"key.h"
  11. #include"lunar.h"
  12. #include"alarm.h"

  13. /*******************************************************************************
  14. * 主函數
  15. *******************************************************************************/
  16. void main()
  17. {        
  18.         //AlarmSound();
  19.         TimeInit();                                                     //定時器初始化
  20.         Ds1302Init();                                             //時鐘1302初始化         讀溫度不用初始化因為每次讀溫度都進行初始化
  21.         LcdInit();                                                     //Lcd初始化
  22.         while(1)
  23.         {        
  24.                 if((AlarmTime[0]==TIME[1])&&(AlarmTime[1]==TIME[2])&&(AlarmFlag==1)&&(keynum==10))
  25.                 {
  26.                         TR0=1;
  27.                         AlarmDisplay();
  28.                         while((AlarmTimeControl==0)&&(AlarmFlag==1))
  29.                         {
  30.                                 AlarmSound();
  31.                         }
  32.                         AlarmTimeControl=0;
  33.                 }
  34.                 Ds1302ReadTime();                                 //讀時間
  35.                 Ds18b20ReadTemp();                                 //讀溫度
  36.                 ReadLunarTime();                                 //讀農歷時間
  37.                 if(keynum==10)
  38.                 {
  39.                         LcdDisplay();                                 //Lcd顯示
  40.                 }
  41.                 KeyDown();                                                 //檢測按鍵
  42.                 if(KeyValue!=0)                                     //目的是每改變一次鍵值只執行一次按鍵函數
  43.                 {
  44.                         KeyExe();                                         //執行按鍵功能
  45.                 }
  46.         }
  47. }

  48. /************************鬧鈴時間到顯示函數**********************/
  49. void AlarmDisplay()
  50. {
  51.         LcdWriteCom(0x80);                                         //第一行收地址開始顯示
  52.         LcdWriteData(0x20);
  53.         LcdWriteData(0x20);
  54.         LcdWriteData(0x20);
  55.         LcdWriteData('T');
  56.         LcdWriteData('i');
  57.         LcdWriteData('m');               
  58.         LcdWriteData('e');
  59.         LcdWriteData(0x27);
  60.         LcdWriteData('s');        
  61.         LcdWriteData(0x20);
  62.         LcdWriteData('u');
  63.         LcdWriteData('p');
  64.         LcdWriteData(0x20);
  65.         LcdWriteData(0x20);
  66.         LcdWriteData(0x20);
  67.         LcdWriteData(0x20);

  68.         LcdWriteCom(0x80+0X40);                                  //第二行首地址開始顯示
  69.         LcdWriteData(0x20);               
  70.         LcdWriteData(0x20);               
  71.         LcdWriteData(0x20);               
  72.         LcdWriteData(0x20);               
  73.         LcdWriteData(0x20);               
  74.         LcdWriteData('0'+AlarmTime[1]/16);
  75.         LcdWriteData('0'+(AlarmTime[1]&0x0f));               
  76.         LcdWriteData(0x3a);
  77.         LcdWriteData('0'+AlarmTime[0]/16);
  78.         LcdWriteData('0'+(AlarmTime[0]&0x0f));         
  79.         LcdWriteData(0x20);
  80.         LcdWriteData(0x20);
  81.         LcdWriteData(0x20);
  82.         LcdWriteData(0x20);
  83.         LcdWriteData(0x20);
  84.         LcdWriteData(0x20);
  85. }

  86. /*******************************************************************************
  87. * 1602顯示函數
  88. *******************************************************************************/
  89. void LcdDisplay()
  90. {
  91.           unsigned char datas[] = {0, 0, 0, 0, 0}; //定義數組
  92.         uchar flag;                                                 //溫度標志位
  93.         float tp;  
  94.         if(temp< 0)                                                 //當溫度值為負數
  95.           {
  96.                   LcdWriteCom(0x80+0x49);                         //寫地址 80表示初始地址
  97.                 temp=temp-1;
  98.                 temp=~temp;
  99.                 tp=temp;
  100.                 temp=tp*0.0625*100+0.5;                             //留兩個小數點就*100,+0.5是四舍五入,因為C語言浮點數轉換為整型的時候把小數點
  101.                                                      //后面的數自動去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進1了,小于0.5的就
  102.                                                         //算由?.5,還是在小數點后面。
  103.           }
  104.          else
  105.           {                        
  106.                   LcdWriteCom(0x80+0x49);                         //寫地址 80表示初始地址
  107.                 tp=temp;                             //因為數據處理有小數點所以將溫度賦給一個浮點型變量
  108.                                                      //如果溫度是正的那么,那么正數的原碼就是補碼它本身
  109.                 temp=tp*0.0625*100+0.5;        
  110.                                                                                          //留兩個小數點就*100,+0.5是四舍五入,因為C語言浮點數轉換為整型的時候把小數點
  111.                                                                                          //后面的數自動去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進1了,小于0.5的就
  112.                                                                                          //算加上0.5,還是在小數點后面。
  113.         }
  114.         datas[0] = temp / 10000;
  115.         datas[1] = temp % 10000 / 1000;
  116.         datas[2] = temp % 1000 / 100;
  117.         datas[3] = temp % 100 / 10;
  118.         datas[4] = temp % 10;
  119.         if(temp%10000>=0)
  120.                 flag=0x2b;
  121.         else
  122.                 flag=0x2d;               


  123.         LcdWriteCom(0x80);                                               //第一行收地址開始顯示
  124.         LcdWriteData('2');
  125.         LcdWriteData('0');
  126.         LcdWriteData('0'+TIME[6]/16);                         //年
  127.         LcdWriteData('0'+(TIME[6]&0x0f));
  128.         LcdWriteData('-');
  129.         LcdWriteData('0'+TIME[4]/16);                       //月
  130.         LcdWriteData('0'+(TIME[4]&0x0f));
  131.         LcdWriteData('-');
  132.         LcdWriteData('0'+TIME[3]/16);                       //日
  133.         LcdWriteData('0'+(TIME[3]&0x0f));
  134.         LcdWriteData(0x20);
  135.         LcdWriteData('0'+LunarMonth/16);
  136.         LcdWriteData('0'+(LunarMonth&0x0f));
  137.         LcdWriteData('-');           
  138.         LcdWriteData('0'+LunarDay/16);
  139.         LcdWriteData('0'+(LunarDay&0x0f));

  140.          LcdWriteCom(0x80+0X40);                                       //第二行首地址開始顯示
  141.         LcdWriteData('0'+TIME[2]/16);                       //時
  142.         LcdWriteData('0'+(TIME[2]&0x0f));                                 
  143.         LcdWriteData(0x3a);
  144.         LcdWriteData('0'+TIME[1]/16);                       //分
  145.         LcdWriteData('0'+(TIME[1]&0x0f));        
  146.         LcdWriteData(0x3a);
  147.         LcdWriteData('0'+TIME[0]/16);                       //秒
  148.         LcdWriteData('0'+(TIME[0]&0x0f));
  149.         LcdWriteData(0x20);
  150.         LcdWriteData('0'+(TIME[5]&0x07));               //周
  151.         LcdWriteData(0x20);
  152.         LcdWriteData(flag);                                         
  153.         LcdWriteData('0'+datas[1]);                               //溫度
  154.         LcdWriteData('0'+datas[2]);
  155.         LcdWriteData('.');
  156.         LcdWriteData('0'+datas[3]);
  157. }

  158. /***********************定時器初始化函數*****************************/
  159. void TimeInit()
  160. {
  161.         TMOD=0X01;
  162.         TH0=0X00;
  163.         TL0=0X01;
  164.         EA=1;
  165.         ET0=1;
  166. }

  167. void timer() interrupt 1
  168. {
  169.         TH0=0X00;
  170.         TL0=0X01;
  171.         t++;
  172.         KeyDown1();                                                           //檢測按鍵
  173.         if(KeyValue!=0)        
  174.         {
  175.                 AlarmFlag=0;
  176.                 TR0=0;
  177.                 AlarmTimeControl=1;
  178.                 TH0=0X00;
  179.                 TL0=0X01;
  180.                 t=0;
  181.                 KeyValue=0;
  182.         }                           
  183.         if(t==1000)
  184.         {        
  185.                 AlarmTimeControl=1;
  186.                 TR0=0;
  187.                 TH0=0X00;
  188.                 TL0=0X01;
  189.                 t=0;
  190.         }
  191. }

  192. void KeyDown1()
  193. {
  194. ……………………

  195. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
萬年歷 (完整).rar (844.53 KB, 下載次數: 79)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:112693 發表于 2017-8-1 00:06 | 只看該作者
謝謝分享!!!!!!!!!
回復

使用道具 舉報

板凳
ID:44037 發表于 2017-8-1 07:49 | 只看該作者
謝謝樓主分享   學習一下
回復

使用道具 舉報

地板
ID:451637 發表于 2018-12-23 21:10 | 只看該作者
謝謝樓主的分享
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 黄a网站| 久久精品99 | 国产91丝袜 | 欧美激情va永久在线播放 | 精品欧美一区二区三区精品久久 | 日韩欧美第一页 | 免费的av | 久草视频观看 | 欧美日韩精品综合 | 国产日产久久高清欧美一区 | 国产乱码精品一区二区三区忘忧草 | 密色视频 | 色吧久久 | 国产精品久久久久久影院8一贰佰 | 国产色99| 一区欧美| 日韩亚洲欧美一区 | 特级特黄特色的免费大片 | 久久专区 | 97综合在线 | 国产在线播 | 午夜一级黄色片 | 久久69精品久久久久久久电影好 | 国产精品免费视频一区 | 手机av网 | 色婷婷影院 | 懂色av蜜桃av | 国产亚洲久 | 成人性视频免费网站 | 国产二区三区 | 人人鲁人人莫人人爱精品 | 亚洲国产精品久久 | 亚洲二区视频 | 成人亚洲精品 | 少妇久久久 | 久久久国产一区 | 久久精品国产一区二区电影 | 久久影院一区 | www.xxxx欧美| 国内自拍第一页 | 亚洲成人免费在线 |