找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 20252|回復: 62
收起左側(cè)

DS1302+LCD1602顯示日期、星期、時間Proteus仿真+單片機程序

  [復制鏈接]
回帖獎勵 10 黑幣 回復本帖可獲得 10 黑幣獎勵! 每人限 1 次
ID:293363 發(fā)表于 2019-5-20 16:16 | 顯示全部樓層 |閱讀模式
本帖最后由 陳潤源home 于 2019-5-20 19:42 編輯

說明:開機顯示當前計算機時間(若下載到開發(fā)板上請手動調(diào)節(jié)時間)
       第1次按下MODE鍵,如果此時按下 S+ /S-,則秒的值 +1/ -1,按下yes保存設(shè)定值
       第2次按下MODE鍵,如果此時按下 S+ /S-,則分的值 +1/ -1,按下yes保存設(shè)定值
       第3次按下MODE鍵,如果此時按下 S+ /S-,則時的值 +1/ -1,按下yes保存設(shè)定值
       第4次按下MODE鍵,如果此時按下 S+ /S-,則天的值 +1/ -1,按下yes保存設(shè)定值
       第5次按下MODE鍵,如果此時按下 S+ /S-,則月的值 +1/ -1,按下yes保存設(shè)定值
       第6次按下MODE鍵,如果此時按下 S+ /S-,則周的值 +1/ -1,按下yes保存設(shè)定值
       第7次按下MODE鍵,如果此時按下 S+ /S-,則年的值 +1/ -1,按下yes保存設(shè)定值
       第8次按下MODE鍵,開始正常計時。


本程序已通過“清翔電子”開發(fā)板完美驗證,請壇友放心下載。用其他開發(fā)板的童鞋請自行修改端口。




附件還內(nèi)附DS1302資料+標準程序,需要的小伙伴請下載

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

仿真圖.jpg 0.png

單片機源程序如下:
  1. //說明:開機顯示當前PC時間
  2. //     第1次按下MODE鍵,如果此時按下 S+ /S-,則秒的值 +1/ -1,按下yes保存設(shè)定值
  3. //     第2次按下MODE鍵,如果此時按下 S+ /S-,則分的值 +1/ -1,按下yes保存設(shè)定值
  4. //     第3次按下MODE鍵,如果此時按下 S+ /S-,則時的值 +1/ -1,按下yes保存設(shè)定值
  5. //     第4次按下MODE鍵,如果此時按下 S+ /S-,則天的值 +1/ -1,按下yes保存設(shè)定值
  6. //     第5次按下MODE鍵,如果此時按下 S+ /S-,則月的值 +1/ -1,按下yes保存設(shè)定值
  7. //     第6次按下MODE鍵,如果此時按下 S+ /S-,則周的值 +1/ -1,按下yes保存設(shè)定值
  8. //     第7次按下MODE鍵,如果此時按下 S+ /S-,則年的值 +1/ -1,按下yes保存設(shè)定值
  9. //     第8次按下MODE鍵,開始正常計時。
  10. //      
  11. //------------------------------------------------------------------------

  12. #include <reg51.h>                            //調(diào)用含有51專用寄存器的頭文件
  13. #define uchar unsigned char            //用uchar代替unsigned char
  14. #define uint unsigned int                //用uint代替unsigned int

  15. #define yh 0x80       //LCD第一行的初始位置,因為LCD1602字符地址首位D7恒定為1(100000000=80)
  16. #define er 0x80+0x40 //LCD第二行初始位置(因為第二行第一個字符位置地址是0x40)

  17. char a,sec,min,hour,day,mouth,week,year,temp,n;                 //定義變量

  18. sbit rw=P3^6;                 //液晶讀寫端
  19. sbit rs=P3^5;                 //液晶指令/數(shù)據(jù)輸入控制
  20. sbit en=P3^4;                 //液晶使能端

  21. sbit sda=P1^1;             //數(shù)據(jù)線
  22. sbit clk=P1^0;             //時鐘線
  23. sbit rst=P1^2;             //使能

  24. sbit mode=P3^0;      //設(shè)置鍵
  25. sbit s1  =P3^1;      //加鍵
  26. sbit s2  =P3^2;      //減鍵
  27. sbit yes =P3^3;             //調(diào)整確認鍵

  28. sbit ACC0=ACC^0;         //累加器A低位
  29. sbit ACC7=ACC^7;         //累加器A高位

  30. uchar code tab1[]={"20  -  -   "};    //年顯示的固定字符
  31. uchar code tab2[]={"  :  :  "};       //時間顯示的固定字符

  32. /***********************延時子程序********************/
  33. void delay(uint xms)
  34. {
  35.         uint x,y;
  36.         for(x=xms;x>0;x--)
  37.          for(y=110;y>0;y--);
  38. }

  39. /****************液晶寫入指令函數(shù)*******************/
  40. void write_1602com(uchar com)
  41. {
  42.         rs=0;                //數(shù)據(jù)/指令選擇置為指令
  43.         rw=0;                //讀寫選擇置為寫
  44.         P0=com;              //送入數(shù)據(jù)
  45.         delay(1);
  46.         en=1;                //拉高使能端,為制造有效的下降沿做準備
  47.         delay(1);
  48.         en=0;                //en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令
  49. }

  50. /********************液晶寫入數(shù)據(jù)函數(shù)***************/
  51. void write_1602dat(uchar dat)
  52. {
  53.         rs=1;               //數(shù)據(jù)/指令選擇置為數(shù)據(jù)
  54.         rw=0;               //讀寫選擇置為寫
  55.         P0=dat;             //送入數(shù)據(jù)
  56.         delay(1);
  57.         en=1;               //en置高電平,為制造下降沿做準備
  58.         delay(1);
  59.         en=0;               //en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令
  60. }

  61. /**************液晶初始化函數(shù)**********************/
  62. void lcd_init()
  63. {
  64.         write_1602com(0x38);         //設(shè)置液晶工作模式,
  65.         write_1602com(0x0c);         //開顯示不顯示光標
  66.         write_1602com(0x06);         //整屏不移動,光標自動右移
  67.         write_1602com(0x01);         //清顯示

  68.         write_1602com(yh+1);         //日歷顯示固定符號從第一行第1個位置之后開始顯示
  69.         for(a=0;a<14;a++)
  70.         {
  71.         write_1602dat(tab1[a]);      //向液晶屏寫日歷顯示的固定符號部分
  72.         }
  73.         write_1602com(er+2);         //時間顯示固定符號寫入位置,從第2個位置后開始顯示
  74.         for(a=0;a<8;a++)
  75.         {
  76.         write_1602dat(tab2[a]);      //寫顯示時間固定符號,兩個冒號
  77.         }

  78. }

  79. /***************寫數(shù)據(jù)********************/
  80. void write_byte(uchar dat)
  81. {
  82.         ACC=dat;
  83.         rst=1;
  84.         for(a=8;a>0;a--)
  85.         {
  86.          sda=ACC0;
  87.          clk=0;
  88.          clk=1;
  89.          ACC=ACC>>1;
  90.         }
  91. }

  92. /******************讀數(shù)據(jù)********************/
  93. uchar read_byte()
  94. {
  95.         rst=1;
  96.         for(a=8;a>0;a--)
  97.         {
  98.          ACC7=sda;
  99.          clk=1;
  100.          clk=0;
  101.          ACC=ACC>>1;
  102.         }
  103.         return (ACC);
  104. }

  105. /*********向1302芯片寫函數(shù),指定寫入地址,數(shù)據(jù)*********/
  106. void write_1302(uchar add,uchar dat)
  107. {
  108.         rst=0;
  109.         clk=0;
  110.         rst=1;
  111.         write_byte(add);
  112.         write_byte(dat);
  113.         clk=1;
  114.         rst=0;
  115. }

  116. /*********從1302讀數(shù)據(jù)函數(shù),指定讀取數(shù)據(jù)來源地址*******/
  117. uchar read_1302(uchar add)
  118. {
  119.         uchar temp;
  120.         rst=0;
  121.         clk=0;
  122.         rst=1;
  123.         write_byte(add);
  124.         temp=read_byte();
  125.         clk=1;
  126.         rst=0;
  127.         return(temp);
  128. }

  129. /****************BCD碼轉(zhuǎn)十進制函數(shù),輸入BCD,返回十進制*******/
  130. uchar BCD(uchar m)
  131. {
  132. uchar x;
  133. x=m>>4;
  134. return(x=x*10+(m&=0x0f));
  135. }

  136. /********1302芯片初始化子函********/
  137. void ds1302_init()
  138. {
  139. rst=0;
  140. clk=0;
  141. write_1302(0x8e,0x00); //允許寫,禁止寫保護
  142. delay(50);
復制代碼

所有資料51hei提供下載:
DS1302 1602液晶.rar (600.95 KB, 下載次數(shù): 706)

評分

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

查看全部評分

回復

使用道具 舉報

ID:293363 發(fā)表于 2019-5-20 19:38 | 顯示全部樓層
自古一樓是樓主
回復

使用道具 舉報

ID:335647 發(fā)表于 2019-5-23 11:16 | 顯示全部樓層
為什么壓縮包格式損壞?
回復

使用道具 舉報

ID:293363 發(fā)表于 2019-6-1 23:14 | 顯示全部樓層
沒損壞啊,我這下載能打開
回復

使用道具 舉報

ID:554789 發(fā)表于 2019-6-4 15:59 | 顯示全部樓層
真好,剛剛好能用到,感謝樓主
回復

使用道具 舉報

ID:519597 發(fā)表于 2019-6-5 19:16 | 顯示全部樓層
感謝樓主!
回復

使用道具 舉報

ID:559289 發(fā)表于 2019-6-10 19:50 | 顯示全部樓層
感謝樓主,51黑有你更精彩�。。�
回復

使用道具 舉報

ID:469510 發(fā)表于 2019-6-11 14:53 | 顯示全部樓層
感謝樓主,51黑有你更精彩�。。�
回復

使用道具 舉報

ID:560786 發(fā)表于 2019-6-12 12:46 | 顯示全部樓層
謝謝樓主了哈~
回復

使用道具 舉報

ID:560786 發(fā)表于 2019-6-12 12:49 | 顯示全部樓層
謝謝樓主了哈~
回復

使用道具 舉報

ID:560816 發(fā)表于 2019-6-12 13:27 | 顯示全部樓層
感謝樓主,51黑有你更精彩,愛你么么噠
回復

使用道具 舉報

ID:425846 發(fā)表于 2019-6-13 08:54 | 顯示全部樓層
TMOd=0x11,工作模式怎么會是三?
回復

使用道具 舉報

ID:425846 發(fā)表于 2019-6-13 08:57 | 顯示全部樓層
樓主看來還沒學懂,tmod=0x11,是兩個定時器都工作在方式1,居然備注解釋是工作方式3,我也是醉了
回復

使用道具 舉報

ID:425846 發(fā)表于 2019-6-13 09:15 | 顯示全部樓層
從你這程序來看,tmod應(yīng)該是工作模式三,自動重裝,因為沒看到重新設(shè)初值,也就是256vs掃描顯示一次
回復

使用道具 舉報

ID:560725 發(fā)表于 2019-6-13 16:28 | 顯示全部樓層
感謝樓主
回復

使用道具 舉報

ID:480987 發(fā)表于 2019-6-18 14:44 | 顯示全部樓層
感謝樓主
回復

使用道具 舉報

ID:82043 發(fā)表于 2019-6-18 23:54 | 顯示全部樓層
漂亮,有你更精彩�。�!
回復

使用道具 舉報

ID:409545 發(fā)表于 2019-6-20 16:05 來自觸屏版 | 顯示全部樓層
哈哈哈,這個沒記錯的話是課本上的叭,某些人闊以直接抄了
回復

使用道具 舉報

ID:293363 發(fā)表于 2019-6-28 11:10 | 顯示全部樓層
wqwqw111 發(fā)表于 2019-6-13 09:15
從你這程序來看,tmod應(yīng)該是工作模式三,自動重裝,因為沒看到重新設(shè)初值,也就是256vs掃描顯示一次

寫錯了
回復

使用道具 舉報

ID:580058 發(fā)表于 2019-7-8 16:13 | 顯示全部樓層
謝謝大佬
回復

使用道具 舉報

ID:247623 發(fā)表于 2019-8-8 14:26 | 顯示全部樓層
有2個問題
第一:星期顯示不對,不能做到實時顯示,比如2019/8/8,顯示卻是星期五;
第二:在調(diào)整時間的時候,光標不會閃爍
回復

使用道具 舉報

ID:577423 發(fā)表于 2019-8-19 19:22 | 顯示全部樓層
這個程序經(jīng)測試以通過,謝謝大神,希望大神們多出佳作
回復

使用道具 舉報

ID:463339 發(fā)表于 2019-8-21 01:04 | 顯示全部樓層
學習了,學習了,向大神學習。
回復

使用道具 舉報

ID:610572 發(fā)表于 2019-9-11 16:57 來自觸屏版 | 顯示全部樓層
有沒有PCB原理圖啊
回復

使用道具 舉報

ID:612406 發(fā)表于 2019-9-17 09:50 | 顯示全部樓層
謝謝分享!
回復

使用道具 舉報

ID:91721 發(fā)表于 2019-9-19 10:50 | 顯示全部樓層
看著心癢癢呀,好想成為大神這樣的。
回復

使用道具 舉報

ID:484951 發(fā)表于 2019-9-21 17:34 | 顯示全部樓層
真的可以用,謝謝樓主
回復

使用道具 舉報

ID:622486 發(fā)表于 2019-10-11 19:22 | 顯示全部樓層
好難啊,不過還是謝謝樓主
回復

使用道具 舉報

ID:625482 發(fā)表于 2019-10-17 11:26 | 顯示全部樓層
感謝樓主!
回復

使用道具 舉報

ID:415088 發(fā)表于 2019-11-8 14:29 | 顯示全部樓層
正在學習數(shù)碼管加LCD1602,謝謝分享
回復

使用道具 舉報

ID:639253 發(fā)表于 2019-11-11 19:39 | 顯示全部樓層
這個要顯示溫度怎么做,調(diào)試了好久都不成功
回復

使用道具 舉報

ID:640789 發(fā)表于 2019-11-13 08:08 | 顯示全部樓層
感謝分享
回復

使用道具 舉報

ID:638682 發(fā)表于 2019-11-20 17:10 | 顯示全部樓層
感謝分享
回復

使用道具 舉報

ID:626677 發(fā)表于 2019-11-22 22:17 | 顯示全部樓層

感謝分享
回復

使用道具 舉報

ID:446113 發(fā)表于 2019-11-23 10:33 | 顯示全部樓層
感謝分享
回復

使用道具 舉報

ID:639253 發(fā)表于 2019-12-1 14:27 | 顯示全部樓層
這東西為什么星期數(shù)不對,總是多一
回復

使用道具 舉報

ID:664337 發(fā)表于 2019-12-16 12:30 | 顯示全部樓層
感謝分享,向大佬們學習!
回復

使用道具 舉報

ID:671627 發(fā)表于 2019-12-24 18:54 | 顯示全部樓層
有沒有51單片機和LCD的數(shù)字鐘,不要顯示溫度
回復

使用道具 舉報

ID:671627 發(fā)表于 2019-12-24 18:55 | 顯示全部樓層
感謝大佬
回復

使用道具 舉報

ID:671627 發(fā)表于 2019-12-24 19:01 | 顯示全部樓層
為什么我回復不了,大佬幫幫我
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表