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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2603|回復: 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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 羞羞视频网 | 99精品国产一区二区三区 | 综合中文字幕 | 欧美一区二区三区在线观看 | 国产aa| 黄片毛片免费观看 | 日本小视频网站 | 精品国产18久久久久久二百 | 国产精品1区2区3区 欧美 中文字幕 | 成年人免费网站 | 成人午夜影院 | 欧美日韩视频网站 | 国产日韩欧美中文 | 色综合久久久 | 在线观看国产视频 | 久久久www成人免费无遮挡大片 | 超碰在线网站 | 亚洲狠狠 | 九九九视频精品 | 日日摸夜夜添夜夜添精品视频 | 国产91综合一区在线观看 | 午夜资源 | 国产aⅴ爽av久久久久久久 | 国产区在线视频 | 免费爱爱视频 | 精品久久久久久亚洲精品 | av大片| 午夜国产 | 99re视频在线观看 | 91精品国产综合久久香蕉922 | 999免费网站| 国内精品一区二区 | 全免费a级毛片免费看视频免费下 | 国产中文字幕av | 精品国产精品 | 国产精品久久久久久久久久 | 中文字幕人成乱码在线观看 | 国产成人精品一区二区三区在线 | 午夜久久久久 | 国产黄色大片网站 | 久久国产精品网 |