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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

這個單片機程序怎么改成可調時間的啊?

[復制鏈接]
跳轉到指定樓層
樓主
ID:297618 發表于 2018-3-31 17:37 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. #include "reg52.h"                         //此文件中定義了單片機的一些特殊功能寄存器
  2. #include"ds1302.h"        

  3. typedef unsigned int u16;          //對數據類型進行聲明定義
  4. typedef unsigned char u8;

  5. sbit LSA=P2^2;
  6. sbit LSB=P2^3;
  7. sbit LSC=P2^4;


  8. char num=0;
  9. u8 DisplayData[8];
  10. u8 code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

  11. void delay(u16 i)
  12. {
  13.         while(i--);        
  14. }


  15. void datapros()         
  16. {
  17.            Ds1302ReadTime();
  18.         DisplayData[0] = smgduan[TIME[2]/16];                                //時
  19.         DisplayData[1] = smgduan[TIME[2]&0x0f];                                 
  20.         DisplayData[2] = 0x40;
  21.         DisplayData[3] = smgduan[TIME[1]/16];                                //分
  22.         DisplayData[4] = smgduan[TIME[1]&0x0f];        
  23.         DisplayData[5] = 0x40;
  24.         DisplayData[6] = smgduan[TIME[0]/16];                                //秒
  25.         DisplayData[7] = smgduan[TIME[0]&0x0f];
  26. }

  27. void DigDisplay()
  28. {
  29.         u8 i;
  30.         for(i=0;i<8;i++)
  31.         {
  32.                 switch(i)         //位選,選擇點亮的數碼管,
  33.                 {
  34.                         case(0):
  35.                                 LSA=0;LSB=0;LSC=0; break;//顯示第0位
  36.                         case(1):
  37.                                 LSA=1;LSB=0;LSC=0; break;//顯示第1位
  38.                         case(2):
  39.                                 LSA=0;LSB=1;LSC=0; break;//顯示第2位
  40.                         case(3):
  41.                                 LSA=1;LSB=1;LSC=0; break;//顯示第3位
  42.                         case(4):
  43.                                 LSA=0;LSB=0;LSC=1; break;//顯示第4位
  44.                         case(5):
  45.                                 LSA=1;LSB=0;LSC=1; break;//顯示第5位
  46.                         case(6):
  47.                                 LSA=0;LSB=1;LSC=1; break;//顯示第6位
  48.                         case(7):
  49.                                 LSA=1;LSB=1;LSC=1; break;//顯示第7位        
  50.                 }
  51.                 P0=DisplayData[7-i];//發送數據
  52.                 delay(100); //間隔一段時間掃描        
  53.                 P0=0x00;//消隱
  54.         }               
  55. }

  56. void main()
  57. {        
  58.         Ds1302Init();
  59.         while(1)
  60.         {
  61.                 datapros();         //數據處理函數
  62.                 DigDisplay();//數碼管顯示函數               
  63.         }               
  64. }

  65. #include"ds1302.h"

  66. //---DS1302寫入和讀取時分秒的地址命令---//
  67. //---秒分時日月周年 最低位讀寫位;-------//
  68. uchar code READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d};
  69. uchar code WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};

  70. //---DS1302時鐘初始化2016年5月7日星期六12點00分00秒。---//
  71. //---存儲順序是秒分時日月周年,存儲格式是用BCD碼---//
  72. uchar TIME[7] = {0, 0, 0x12, 0x07, 0x05, 0x06, 0x16};


  73. void Ds1302Write(uchar addr, uchar dat)
  74. {
  75.         uchar n;
  76.         RST = 0;
  77.         _nop_();

  78.         SCLK = 0;//先將SCLK置低電平。
  79.         _nop_();
  80.         RST = 1; //然后將RST(CE)置高電平。
  81.         _nop_();

  82.         for (n=0; n<8; n++)//開始傳送八位地址命令
  83.         {
  84.                 DSIO = addr & 0x01;//數據從低位開始傳送
  85.                 addr >>= 1;
  86.                 SCLK = 1;//數據在上升沿時,DS1302讀取數據
  87.                 _nop_();
  88.                 SCLK = 0;
  89.                 _nop_();
  90.         }
  91.         for (n=0; n<8; n++)//寫入8位數據
  92.         {
  93.                 DSIO = dat & 0x01;
  94.                 dat >>= 1;
  95.                 SCLK = 1;//數據在上升沿時,DS1302讀取數據
  96.                 _nop_();
  97.                 SCLK = 0;
  98.                 _nop_();        
  99.         }        
  100.                  
  101.         RST = 0;//傳送數據結束
  102.         _nop_();
  103. }


  104. uchar Ds1302Read(uchar addr)
  105. {
  106.         uchar n,dat,dat1;
  107.         RST = 0;
  108.         _nop_();

  109.         SCLK = 0;//先將SCLK置低電平。
  110.         _nop_();
  111.         RST = 1;//然后將RST(CE)置高電平。
  112.         _nop_();

  113.         for(n=0; n<8; n++)//開始傳送八位地址命令
  114.         {
  115.                 DSIO = addr & 0x01;//數據從低位開始傳送
  116.                 addr >>= 1;
  117.                 SCLK = 1;//數據在上升沿時,DS1302讀取數據
  118.                 _nop_();
  119.                 SCLK = 0;//DS1302下降沿時,放置數據
  120.                 _nop_();
  121.         }
  122.         _nop_();
  123.         for(n=0; n<8; n++)//讀取8位數據
  124.         {
  125.                 dat1 = DSIO;//從最低位開始接收
  126.                 dat = (dat>>1) | (dat1<<7);
  127.                 SCLK = 1;
  128.                 _nop_();
  129.                 SCLK = 0;//DS1302下降沿時,放置數據
  130.                 _nop_();
  131.         }

  132.         RST = 0;
  133.         _nop_();        //以下為DS1302復位的穩定時間,必須的。
  134.         SCLK = 1;
  135.         _nop_();
  136.         DSIO = 0;
  137.         _nop_();
  138.         DSIO = 1;
  139.         _nop_();
  140.         return dat;        
  141. }


  142. void Ds1302Init()
  143. {
  144.         uchar n;
  145.         Ds1302Write(0x8E,0X00);                 //禁止寫保護,就是關閉寫保護功能
  146.         for (n=0; n<7; n++)//寫入7個字節的時鐘信號:分秒時日月周年
  147.         {
  148.                 Ds1302Write(WRITE_RTC_ADDR[n],TIME[n]);        
  149.         }
  150.         Ds1302Write(0x8E,0x80);                 //打開寫保護功能
  151. }


  152. void Ds1302ReadTime()
  153. {
  154.         uchar n;
  155.         for (n=0; n<7; n++)//讀取7個字節的時鐘信號:分秒時日月周年
  156.         {
  157.                 TIME[n] = Ds1302Read(READ_RTC_ADDR[n]);
  158.         }
  159.                
  160. }

復制代碼


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

使用道具 舉報

沙發
ID:297618 發表于 2018-4-1 15:08 | 只看該作者
數碼管顯示的時鐘,要如何改才能改成可調時間的?
回復

使用道具 舉報

板凳
ID:123289 發表于 2018-4-1 16:12 | 只看該作者
不是程序如何改,而是你的思路如何改!
列出現在的思路,畫出邏輯原理圖,看看哪里需要改進?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品视频不卡 | 久久国产综合 | 亚洲香蕉在线视频 | 国产精品久久国产精品 | 黑人久久 | 成人av网站在线观看 | 中国一级特黄毛片大片 | www国产亚洲精品久久网站 | 天天狠狠| 在线观看国产视频 | 欧美精品网站 | 色综合激情 | 日本在线视 | 色就干 | 亚洲成人精品在线观看 | 亚洲精品在线免费看 | 亚洲 欧美 日韩在线 | 国产区久久 | 欧美老少妇一级特黄一片 | 免费国产视频在线观看 | 日本一二区视频 | 韩日一区| 色综合久久天天综合网 | 久久99视频精品 | 亚洲人在线播放 | 久久99精品久久久久婷婷 | a精品视频| 成人在线免费看 | 国产亚洲网站 | 最新国产精品视频 | 三级黄片毛片 | www国产成人免费观看视频,深夜成人网 | 精品99久久| 一级少妇女片 | 国产91视频免费 | 欧美色影院 | 在线视频91 | 国产精品免费av | 国产成人免费在线 | 日本视频在线播放 | 日韩欧美大片 |