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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

能不能不用DS1302做一個1602的液晶顯示的時鐘電路

  [復制鏈接]
跳轉到指定樓層
樓主
最近看了很多時鐘電路,大部分都采用了DS1302時鐘芯片,想要一個不采用DS1302時鐘芯片做的基于AT89C52的用LCD1602顯示的時鐘電路的仿真和程序呀,想研究一下~
謝謝~
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:47286 發表于 2017-6-9 14:29 | 只看該作者
當然可以啊 但會比較麻煩啊 你用計數器做一個1s中斷 每60個1s就是1分鐘 以此類推 再存進去當前日期 滿小時就加一天 然后再算月 夠30或31加月 再算平潤年 只要數值算出來 顯示根本不是事啊

這么干純學習還行 真干點什么太累了 還不如幾塊錢買個1302得了 呵呵
回復

使用道具 舉報

板凳
ID:86421 發表于 2017-6-9 15:43 | 只看該作者
  1. /*-----------------------------------------------
  2.   名稱:定時器時鐘數碼管顯示
  3.   內容:定時器時鐘數碼管顯示,時間和日期切換顯示 按下按鍵,調節時間
  4.         時間格式xx-xx-xx 時分秒
  5.         
  6. ------------------------------------------------*/
  7. #include<reg52.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義

  8. #define KeyPort P3 //定義按鍵端口

  9. #define DataPort P0 //定義數據端口 程序中遇到DataPort 則用P0 替換

  10. sbit LATCH1=P2^2;//定義鎖存使能端口 段鎖存
  11. sbit LATCH2=P2^3;//                 位鎖存

  12. unsigned char hour,minute,second;//定義時分秒

  13. bit UpdateTimeFlag;//定義讀時間標志

  14. unsigned char code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 顯示段碼值0~9
  15. unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分別對應相應的數碼管點亮,即位碼
  16. unsigned char TempData[8]; //存儲顯示值的全局變量

  17. void DelayUs2x(unsigned char t);//us級延時函數聲明
  18. void DelayMs(unsigned char t); //ms級延時
  19. void Display(unsigned char FirstBit,unsigned char Num);//數碼管顯示函數
  20. unsigned char KeyScan(void);//鍵盤掃描
  21. void Init_Timer0(void);//定時器初始化
  22. /*------------------------------------------------
  23.                     主函數
  24. ------------------------------------------------*/
  25. void main (void)
  26. {
  27. unsigned char num;                  

  28. Init_Timer0();

  29. while (1)         //主循環
  30.   {


  31. num=KeyScan();
  32. switch(num)
  33.   {
  34.                case 1:hour++;if(hour==24)hour=0;     //正常時間 小時 加1
  35.              break;
  36.                 case 2:hour--;if(hour==255)hour=23;   //正常時間 小時減1
  37.                  break;
  38.                 case 3:minute++;if(minute==60)minute=0;     //分鐘加1
  39.                  break;
  40.                 case 4:minute--;if(minute==255)minute=59;   //分鐘減1
  41.                  break;
  42.                 default:break;
  43.   }
  44. if(UpdateTimeFlag==1)
  45. {
  46.   UpdateTimeFlag=0;

  47. TempData[0]=dofly_DuanMa[hour/10]; //時                        //數據的轉換,因我們采用數碼管0~9的顯示,將數據分開
  48. TempData[1]=dofly_DuanMa[hour%10];
  49. TempData[2]=0x40;                                                            //加入"-"
  50. TempData[3]=dofly_DuanMa[minute/10];//分
  51. TempData[4]=dofly_DuanMa[minute%10];
  52. TempData[5]=0x40;
  53. TempData[6]=dofly_DuanMa[second/10];//秒
  54. TempData[7]=dofly_DuanMa[second%10];       

  55.   }       
  56. }
  57. }
  58. /*------------------------------------------------
  59. uS延時函數,含有輸入參數 unsigned char t,無返回值
  60. unsigned char 是定義無符號字符變量,其值的范圍是
  61. 0~255 這里使用晶振12M,精確延時請使用匯編,大致延時
  62. 長度如下 T=tx2+5 uS
  63. ------------------------------------------------*/
  64. void DelayUs2x(unsigned char t)
  65. {   
  66. while(--t);
  67. }
  68. /*------------------------------------------------
  69. mS延時函數,含有輸入參數 unsigned char t,無返回值
  70. unsigned char 是定義無符號字符變量,其值的范圍是
  71. 0~255 這里使用晶振12M,精確延時請使用匯編
  72. ------------------------------------------------*/
  73. void DelayMs(unsigned char t)
  74. {
  75.      
  76. while(t--)
  77. {
  78.      //大致延時1mS
  79.      DelayUs2x(245);
  80.          DelayUs2x(245);
  81. }
  82. }
  83. /*------------------------------------------------
  84. 顯示函數,用于動態掃描數碼管
  85. 輸入參數 FirstBit 表示需要顯示的第一位,如賦值2表示從第三個數碼管開始顯示
  86. 如輸入0表示從第一個顯示。
  87. Num表示需要顯示的位數,如需要顯示99兩位數值則該值輸入2
  88. ------------------------------------------------*/
  89. void Display(unsigned char FirstBit,unsigned char Num)
  90. {
  91.       static unsigned char i=0;
  92.           

  93.            DataPort=0;   //清空數據,防止有交替重影
  94.        LATCH1=1;     //段鎖存
  95.        LATCH1=0;

  96.        DataPort=dofly_WeiMa[i+FirstBit]; //取位碼
  97.        LATCH2=1;     //位鎖存
  98.        LATCH2=0;

  99.        DataPort=TempData[i]; //取顯示數據,段碼
  100.        LATCH1=1;     //段鎖存
  101.        LATCH1=0;
  102.       
  103.            i++;
  104.        if(i==Num)
  105.               i=0;


  106. }
  107. /*------------------------------------------------
  108.                     定時器初始化子程序
  109. ------------------------------------------------*/
  110. void Init_Timer0(void)
  111. {
  112. TMOD |= 0x01;          //使用模式1,16位定時器,使用"|"符號可以在使用多個定時器時不受影響                     
  113. //TH0=0x00;              //給定初值
  114. //TL0=0x00;
  115. EA=1;            //總中斷打開
  116. ET0=1;           //定時器中斷打開
  117. TR0=1;           //定時器開關打開
  118. }
  119. /*------------------------------------------------
  120.                  定時器中斷子程序
  121. ------------------------------------------------*/
  122. void Timer0_isr(void) interrupt 1
  123. {
  124. static unsigned int num,i;
  125. TH0=(65536-2000)/256;//重新賦值 2ms
  126. TL0=(65536-2000)%256;

  127. Display(0,8);       // 調用數碼管掃描
  128. i++;
  129. if(i==10)          //20ms更新一次
  130.     {
  131.         i=0;
  132.         UpdateTimeFlag=1; //更新時間志位置1
  133.         }
  134. num++;
  135. if(num==500)        //大致1s
  136.    {
  137.     num=0;
  138.         second++;
  139.         if(second==60)  //秒到60,分鐘加1
  140.          {
  141.           second=0;          
  142.           minute++;
  143.           if(minute==60)//分鐘到60,小時加1
  144.             {
  145.                  minute=0;
  146.                  hour++;
  147.                  if(hour==24)//小時到24,回零
  148.                    hour=0;
  149.                 }
  150.          }
  151.    
  152.   }
  153. }

  154. /*------------------------------------------------
  155. 按鍵掃描函數,返回掃描鍵值
  156. ------------------------------------------------*/
  157. unsigned char KeyScan(void)
  158. {
  159. unsigned char keyvalue;
  160. if(KeyPort!=0xff)
  161.    {
  162.     DelayMs(10);
  163.     if(KeyPort!=0xff)
  164.            {
  165.             keyvalue=KeyPort;
  166.             while(KeyPort!=0xff);
  167.                 switch(keyvalue)
  168.                 {
  169.                  case 0xfe:return 1;break;
  170.                  case 0xfd:return 2;break;
  171.                  case 0xfb:return 3;break;
  172.                  case 0xf7:return 4;break;
  173.                  case 0xef:return 5;break;
  174.                  case 0xdf:return 6;break;
  175.                  case 0xbf:return 7;break;
  176.                  case 0x7f:return 8;break;
  177.                  default:return 0;break;
  178.                 }
  179.           }
  180.    }
  181.    return 0;
  182. }

復制代碼

這是定時器的時鐘程序,顯示部分可以自己改。
回復

使用道具 舉報

地板
ID:96682 發表于 2017-6-9 16:30 | 只看該作者
使用單片機的定時器就能做到,只是沒有 DS1302 的斷電時間保持功能
回復

使用道具 舉報

5#
ID:203500 發表于 2017-6-9 16:35 | 只看該作者
就是利用定時器設計一個時鐘,只是精度沒有DS1302時鐘芯片高
回復

使用道具 舉報

6#
ID:194255 發表于 2017-6-9 17:07 | 只看該作者
可以呀,但是那樣的話,單片機一斷電,就會復位了,之后時間就不準了
回復

使用道具 舉報

7#
ID:111634 發表于 2017-6-9 18:19 | 只看該作者
實時時鐘是單片機控制系統的常見課題。若采用單片機片內定時/計數器,一方面需要占用寶貴的硬件資源;另一方面,停電、關機等因素又使得計時不連續,復位時需要重新初始化和校時。采用外接實時時鐘芯片,則能很好地解決這個問題。DS1302是目前性價比最高的時鐘芯片。
回復

使用道具 舉報

8#
ID:111634 發表于 2017-6-9 18:21 | 只看該作者
本帖最后由 zl2168 于 2017-6-9 18:22 編輯

實例94  模擬電子鐘(由80C51定時器產生秒時基)
Proteus仿真一下,確認有效。
實例94 模擬電子鐘(由80C51定時器產生秒時基).rar (43.05 KB, 下載次數: 22)

以上摘自張志良編著80C51單片機仿真設計實例教程——基于Keil CProteus》清華大學出版社ISBN 978-7-302-41682-1內有常用的單片機應用100案例,用于仿真實驗操作,電路與程序真實可靠可信可行書中電路和程序設計有詳細說明,程序語句條條有注解。仿真電路和Hex文件能在清華出版社網站免費下載,程序源代碼只能到書上看了。到圖書館借,或到新華書店翻閱,或到網上書店打折購買。
回復

使用道具 舉報

9#
ID:209608 發表于 2017-6-9 20:28 | 只看該作者
我前兩天就用定時器做了一個
回復

使用道具 舉報

10#
ID:123289 發表于 2017-6-9 20:32 | 只看該作者
已有單片機時,再用時鐘芯片,一般來說就是浪費,除非有極其特殊的需求。
回復

使用道具 舉報

11#
ID:209529 發表于 2017-6-9 22:15 | 只看該作者
其實不管用外部時鐘芯片還是直接單片機定時,精度都難保證的。一個是晶振我們無法保證就精準,但是外部時鐘芯片,可以在掉電后保持時鐘繼續運行。
回復

使用道具 舉報

12#
ID:197788 發表于 2017-6-10 12:35 | 只看該作者
你可以用定時器做,麻煩了點,只是沒有ds1302精準,而且1302做的話斷電后上電復位還能保持時鐘運行。
回復

使用道具 舉報

13#
ID:471066 發表于 2019-2-7 15:28 | 只看該作者
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区三区国产精品 | 久久9视频 | 91毛片网 | 欧美一区二区三区在线观看视频 | 国产精品美女久久久久久久久久久 | 91视频在线观看免费 | 午夜免费网站 | 欧美一区二区三区精品 | 99亚洲精品 | 欧美精品成人影院 | 不卡视频一区二区三区 | 日本字幕在线观看 | 亚洲国产精品99久久久久久久久 | 久久不卡 | av在线三级 | 国产xxxx在线 | www精品 | 男女视频在线观看免费 | 影音先锋中文在线 | 久久久久久久av | 99久久免费精品 | 91精品一区二区三区久久久久 | 日日干日日操 | 一级高清免费毛片 | 久久久九九九九 | 日韩综合| 亚洲精品欧洲 | 精产嫩模国品一二三区 | 免费亚洲成人 | 日韩精品在线看 | 国产www.| 在线播放亚洲 | 羞视频在线观看 | 亚洲三级在线 | 青青草综合网 | 国产99免费视频 | 激情的网站 | 成人免费视频7777777 | 国产精品久久久久久久久久免费看 | 色吊丝2 | 国产成人高清在线观看 |