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

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

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 1761|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)DS1302時(shí)鐘LCD1602顯示代碼,proteus7和8的仿真都有

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
DS1302時(shí)鐘LCD1602顯示,proteus7和8的仿真都有
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機(jī)源程序如下:
  1. //調(diào)用1602顯示驅(qū)動(dòng),在此文件內(nèi)已包含51頭文件和定義數(shù)據(jù)類(lèi)型
  2. #include "LCD1602.h"
  3. /*====================================
  4. IO接口定義
  5. ====================================*/
  6. sbit TSCLK = P1^1; //時(shí)鐘
  7. sbit TIO = P1^0;   //數(shù)據(jù)
  8. sbit TRST = P1^2;  //使能

  9. #define MAIN_Fosc                11059200UL        //宏定義主時(shí)鐘HZ
  10. #define DS1302_W_ADDR 0x80  //寫(xiě)時(shí)鐘日歷寄存器起始地址
  11. #define DS1302_R_ADDR 0x81        //讀時(shí)鐘日歷寄存器起始地址

  12. //時(shí)鐘日歷暫存數(shù)組,秒、分、時(shí)、日、月、周、年
  13. uchar TimeData[7]={0, 0, 0, 0, 0, 0, 0};

  14. /*=================================================
  15. *函數(shù)名稱(chēng):Delay_Ms
  16. *函數(shù)功能:12T 51單片機(jī)自適應(yīng)主時(shí)鐘毫秒級(jí)延時(shí)函數(shù)
  17. *說(shuō)明:需定義MAIN_Fosc(晶振主頻單位HZ)
  18. *輸入:ms:要延時(shí)的毫秒
  19. =================================================*/
  20. void Delay_Ms(INT16U ms)
  21. {
  22.      INT16U i;
  23.          do{
  24.               i = MAIN_Fosc / 96000;
  25.                   while(--i);   //96T per loop
  26.      }while(--ms);
  27. }
  28. /*=================================================
  29. *函數(shù)名稱(chēng):DS1302_W_Byte
  30. *函數(shù)功能:DS1302寫(xiě)一字節(jié)數(shù)據(jù)
  31. *輸入:dat:要寫(xiě)入的數(shù)據(jù)
  32. =================================================*/
  33. void DS1302_W_Byte(uchar dat)
  34. {
  35.         uchar i;
  36.         for(i = 0; i < 8; i++) //每次寫(xiě)1bit,寫(xiě)8次
  37.         {
  38.                 TSCLK = 0;                   //拉低時(shí)鐘總線(xiàn)
  39.                 TIO = dat & 0x01;  //從一字節(jié)最低位開(kāi)始寫(xiě)
  40.                 TSCLK = 1;                   //拉高時(shí)鐘總線(xiàn),DS1302把數(shù)據(jù)讀走
  41.                 dat >>= 1;                   //數(shù)據(jù)右移一位
  42.         }       
  43. }
  44. /*=================================================
  45. *函數(shù)名稱(chēng):DS1302_R_Byte
  46. *函數(shù)功能:DS1302讀一字節(jié)
  47. *輸出:dat:讀取的數(shù)據(jù)
  48. =================================================*/
  49. uchar DS1302_R_Byte()
  50. {
  51.         uchar i, dat;
  52.         for(i = 0; i < 8; i++)  //每次寫(xiě)1bit,寫(xiě)8次
  53.         {
  54.                 TSCLK = 0;                        //拉低時(shí)鐘總線(xiàn),DS1302把數(shù)據(jù)放到數(shù)據(jù)總線(xiàn)上
  55.                 dat >>= 1;                         //數(shù)據(jù)右移一位,數(shù)據(jù)從最低位開(kāi)始讀
  56.                 if(TIO)        dat |= 0x80;//讀取數(shù)據(jù)
  57.                 TSCLK = 1;                        //拉高時(shí)鐘總線(xiàn)
  58.         }
  59.         return dat;                                //返回讀取的數(shù)據(jù)
  60. }
  61. /*=================================================
  62. *函數(shù)名稱(chēng):DS1302_W_DAT
  63. *函數(shù)功能:寫(xiě)DS1302數(shù)據(jù)一次寫(xiě)2個(gè)字節(jié)
  64. *說(shuō)明:先寫(xiě)命令后寫(xiě)數(shù)據(jù)
  65. *調(diào)用:DS1302_W_Byte()
  66. *輸入:cmd:需要寫(xiě)的命令 ,dat:需要些的數(shù)據(jù)
  67. =================================================*/
  68. void DS1302_W_DAT(uchar cmd, uchar dat)
  69. {
  70.         TRST = 0;                         //拉低使能端
  71.         TSCLK = 0;                         //拉低數(shù)據(jù)總線(xiàn)
  72.         TRST = 1;                         //拉高使能端,開(kāi)始寫(xiě)數(shù)據(jù)
  73.         DS1302_W_Byte(cmd);         //寫(xiě)命令
  74.         DS1302_W_Byte(dat);         //寫(xiě)數(shù)據(jù)
  75. }
  76. /*=================================================
  77. *函數(shù)名稱(chēng):DS1302_R_DAT
  78. *函數(shù)功能:讀DS1302數(shù)據(jù)
  79. *說(shuō)明:先寫(xiě)入命令字節(jié)后讀出對(duì)應(yīng)數(shù)據(jù)
  80. *調(diào)用:        DS1302_W_Byte();DS1302_R_Byte();
  81. *輸入:        cmd:需要寫(xiě)的命令
  82. *輸出:        dat:讀出的數(shù)據(jù)
  83. =================================================*/
  84. uchar DS1302_R_DAT(uchar cmd)
  85. {
  86.         uchar dat;
  87.         TRST = 0;                                 //拉低使能端
  88.         TSCLK = 0;                                //拉低數(shù)據(jù)總線(xiàn)
  89.         TRST = 1;                                //拉高使能端,開(kāi)始寫(xiě)數(shù)據(jù)
  90.         DS1302_W_Byte(cmd);                //寫(xiě)命令
  91.         dat = DS1302_R_Byte();        //讀出數(shù)據(jù)
  92.         return dat;                                //返回讀出數(shù)據(jù)
  93. }

  94. /*=================================================
  95. *函數(shù)名稱(chēng):DS1302_Clear_WP
  96. *函數(shù)功能:清除DS1302寫(xiě)保護(hù)
  97. *說(shuō)明:先寫(xiě)入命令0x8e(寫(xiě)控制寄存器)接著向該寄存器寫(xiě)0
  98. *調(diào)用:DS1302_W_DAT()
  99. =================================================*/
  100. void DS1302_Clear_WP()
  101. {
  102.         DS1302_W_DAT(0x8e,0x00);  //把控制寄存器WP位置0
  103. }
  104. /*=================================================
  105. *函數(shù)名稱(chēng):DS1302_Clear_WP
  106. *函數(shù)功能:設(shè)置DS1302寫(xiě)保護(hù)
  107. *說(shuō)明:先寫(xiě)入命令0x8e(寫(xiě)控制寄存器)接著向該寄存器寫(xiě)0x80
  108. *調(diào)用:DS1302_W_DAT()
  109. =================================================*/
  110. void DS1302_Set_WP()
  111. {       
  112.         DS1302_W_DAT(0x8e,0x80); //把控制寄存器WP位置1
  113.         TRST = 0;                                 //拉低使能端
  114.         TSCLK = 0;                                 //拉低數(shù)據(jù)總線(xiàn)
  115. }

  116. /*=================================================
  117. *函數(shù)名稱(chēng):Read_DS1302_Time
  118. *函數(shù)功能:讀取DS1302時(shí)鐘數(shù)據(jù)
  119. *說(shuō)明:        讀取DS1302時(shí)鐘數(shù)據(jù) 返回?cái)?shù)據(jù)存入時(shí)鐘日歷暫存
  120.                 數(shù)組TimeData(數(shù)據(jù)格式BCD碼)
  121. *調(diào)用:DS1302_Clear_WP();DS1302_R_DAT();DS1302_Set_WP();
  122. *輸入:        addr:需要讀取時(shí)鐘日歷寄存器的起始地址
  123. =================================================*/
  124. void Read_DS1302_Time(uchar addr)
  125. {
  126.         uchar i;
  127.         DS1302_Clear_WP();            //清楚些保護(hù)
  128.         for(i = 0; i < 7; i++)        //從DS1302讀取7個(gè)字節(jié)的時(shí)鐘日歷數(shù)據(jù)
  129.         {
  130.                 TimeData[i] = DS1302_R_DAT(addr);//先寫(xiě)入要讀取數(shù)據(jù)的寄存器起始地址,再讀出數(shù)據(jù)存入TimeData數(shù)組
  131.                 addr += 2;                                                 //時(shí)鐘日歷寄存器地址+2轉(zhuǎn)向下一個(gè)寄存器
  132.         }
  133.         DS1302_Set_WP();   //開(kāi)起寫(xiě)保護(hù)
  134. }
  135. /*=================================================
  136. *函數(shù)名稱(chēng):main
  137. *函數(shù)功能:主函數(shù) 1602液晶顯示DS1302數(shù)據(jù)
  138.                    Date:年-月-日-星期
  139.                    Time:時(shí):分:秒
  140. =================================================*/
  141. void main()
  142. {
  143.         InitLcd1602();                      //1602初始化
  144.         LcdShowStr(0,0,"Date:");  //1602顯示字符串
  145.         LcdShowStr(0,1,"Time:");  //1602顯示字符串
  146.         while(1)
  147.         {
  148.                 Read_DS1302_Time(DS1302_R_ADDR); //先寫(xiě)入時(shí)鐘日歷寄存器起始地址再讀出時(shí)鐘日歷寫(xiě)入到TimeData數(shù)組中
  149.                 DisplayOneStr (5,0,TimeData[6]); //年
  150.                 DisplayOneChar (7,0,'-');                 //-
  151.                 DisplayOneStr (8,0,TimeData[4]); //月
  152.                 DisplayOneChar (10,0,'-');                 //-
  153.                 DisplayOneStr (11,0,TimeData[3]);//日

  154.                 DisplayOneStr (5,1,TimeData[2]); //時(shí)
  155.                 DisplayOneChar (7,1,':');                 //:
  156.                 DisplayOneStr (8,1,TimeData[1]); //分
  157.                 DisplayOneChar (10,1,':');                 //:
  158.                 DisplayOneStr (11,1,TimeData[0]);//秒
  159.                 Delay_Ms(1000);                                         //延時(shí)1秒
  160.         }               
  161. }
復(fù)制代碼

Keil代碼與Proteus仿真下載:
DS1302時(shí)鐘LCD1602不帶星期.zip (95.21 KB, 下載次數(shù): 58)

評(píng)分

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

查看全部評(píng)分

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 精品久久久精品 | 精品96久久久久久中文字幕无 | 老外黄色一级片 | 久久在线视频 | 中文字幕一级 | 欧美性视频在线播放 | 精品区一区二区 | 自拍偷拍精品 | 一区二区视屏 | aaa在线观看 | 中文字幕高清视频 | 日韩在线观看视频一区 | 亚洲精品白浆高清久久久久久 | 久久精品免费看 | 日韩在线视频观看 | 熟女毛片 | 国产精品伦一区二区三级视频 | 国产目拍亚洲精品99久久精品 | 色香婷婷 | 亚洲一区二区三区视频免费观看 | 999免费观看视频 | 久久91精品国产 | 尤物在线精品视频 | 精品网站999www | 亚洲乱码一区二区三区在线观看 | 久久国产精品久久久久久 | www.中文字幕.com | 亚洲第一视频 | 日日摸日日碰夜夜爽亚洲精品蜜乳 | 久久亚洲一区二区三区四区 | 精品久久电影 | 欧洲视频一区二区 | 一本大道久久a久久精二百 欧洲一区二区三区 | 中文字幕日韩欧美一区二区三区 | 久久久tv| 九色porny自拍视频 | 国产精品成人国产乱一区 | 日韩精品在线播放 | 日韩精品久久一区二区三区 | 成人免费视频观看视频 | 91成人免费|