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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10080|回復: 28
收起左側

單片機+1602+DS1302+DS18B20迷你時鐘設計

  [復制鏈接]
ID:70481 發表于 2014-12-16 17:08 | 顯示全部樓層 |閱讀模式
程序 LCD1602液晶時鐘.zip (51.17 KB, 下載次數: 102)
由于已經工作了,很少上51hei論壇打理帖子,對不起各位

程序較早寫的,待優化的地方較多,僅供大家參考

該作品僅供大家討論學習用,切勿用在商業用途。


第一個版本的資料

阻焊層.pdf (6.39 KB, 下載次數: 32)
電路原理圖.pdf (43.22 KB, 下載次數: 78)
絲印層.pdf (9.33 KB, 下載次數: 17)
原理圖負片.pdf (22.86 KB, 下載次數: 24)
測試源程序keil編譯.zip (1.14 KB, 下載次數: 75)

第一個版本

3D顯示效果圖(正面)(沒有3D模型只能顯示這樣,大家見諒)
200145d32413cmm17nlmzu.jpg.thumb.jpg
3D顯示效果圖(反面) (沒有3D模型只能顯示這樣,大家見諒)
200145ysp2alsahxzxw6ea.jpg.thumb.jpg
自制切割機
200018v7nnff1vhoont21h.jpg.thumb.jpg

做好絲印層(就這個我用熱轉印做的)打好孔,裁好PCB
200021dupf1ipcp7oufzda.jpg.thumb.jpg

PCB反面(PCB我經過了化學鍍錫處理)
200024xvdlebxypffdyy0b.jpg.thumb.jpg

焊接好PCB板
200031h7rrxi5sxszz3it5.jpg.thumb.jpg

ATMEL的AT89S52
200041lqg3cd2g9c427hei.jpg.thumb.jpg

DS1302就在單片機中間
200035z90ns2b4espbbate.jpg.thumb.jpg

在DS1302的上方也預留DS18B20的接口
200038am53131gq2733ddc.jpg.thumb.jpg

安裝液晶顯示器效果
200044q2yy7r08mhac5027.jpg.thumb.jpg
200026e1p23tgz184c5xu4.jpg.thumb.jpg
200048mhqqxgxlghqvt7jl.jpg.thumb.jpg

200051dd6ll6myltm6omnw.jpg.thumb.jpg
第二個版本
更新了蜂鳴器、ISP、可控制背光,優化了PCB布局
145956dl0z4fraqgq0jaah.jpg.thumb.jpg
150000dqvvplsvz92xzguu.jpg.thumb.jpg
150003kh4mmxynmerbs4er.jpg.thumb.jpg
150006jezz9gsgge9h179i.jpg.thumb.jpg
150009rqlskerzykvoyibf.jpg.thumb.jpg
150012tt9xw8rz5m8v28pp.jpg.thumb.jpg
150015v9qlssp0f7llf79v.jpg.thumb.jpg
150018y5fvizintvkinxco.jpg.thumb.jpg
整體的效果
150023tjqw2kjmkeefkgnq.jpg.thumb.jpg
關閉背光的效果
150030sdq466ypsnn4udu6.jpg.thumb.jpg
程序已完工,程序運行(程序等資料過一段時間發出)
現在附件發的程序是測試程序,大家注意下
150034rwrhz6dzjprh8kwz.jpg.thumb.jpg







回復

使用道具 舉報

ID:70481 發表于 2014-12-16 17:10 | 顯示全部樓層
源碼預覽:
  1. //#include <at89x52.h>          
  2. #include <intrins.h>
  3. #include <STC89C5xRC.H>

  4. #define DataPort P0

  5. unsigned char code one[] = "20  /  /  ";                 //固定字符
  6. unsigned char code two[] = "  :  :  ";                //固定字符
  7. unsigned char code wendu[] = {0x18, 0x1a, 0x05, 0x04, 0x04, 0x05, 0x02, 0x00};//溫度符號
  8. unsigned char code week_char[] = "MON TUE WED THU FRI STA SUN"; //星期字符串
  9. unsigned char miao, fen, shi, ri, yue, nian, week;
  10. unsigned int tp;
  11. bit time_flag, temp_flag;

  12. /******************************
  13. LCD1602
  14. 4PIN----RS
  15. 5PIN----RW
  16. 6PIN----EN
  17. *****************************/
  18. sbit beep = P1^0;                //蜂鳴器
  19. sbit DQ = P3^7;                        //18B20端口
  20. sbit RS = P2^4;                        //1602寄存器選擇
  21. sbit RW = P2^5;                        //1602讀寫控制
  22. sbit EN = P2^6;                        //1602使能端
  23. sbit key1 = P3^1;                //菜單鍵
  24. sbit key2 = P3^2;                //加
  25. sbit key3 = P3^3;                //減
  26. sbit RST = P3^5;                //1302復位
  27. sbit SDA = P3^4;                //1302數據
  28. sbit SCK = P3^6;                //1302時鐘                  

  29. void delay_us(unsigned char t)
  30. {
  31.   while(--t);
  32. }

  33. /***********ms延時程序***********/
  34. void delay_ms(unsigned int ms)
  35. {
  36.         unsigned int a, b;
  37.         for(a = ms; a > 0; a--)
  38.                 for(b = 110; b > 0; b--);
  39. }

  40. /********蜂鳴器響一聲**********/
  41. void beepplay()
  42. {
  43.         beep = 0;
  44.         delay_ms(60);
  45.         beep = 1;
  46. }

  47. /*********LCD判忙*************/
  48. void lcd_busy()
  49. {
  50.         DataPort = 0xff;
  51.         RS = 0;
  52.         RW = 1;
  53.         EN = 1;
  54.         delay_ms(1);
  55.         while(DataPort & 0x80);
  56.         EN = 0;
  57. }

  58. /**********LCD寫數據************/
  59. void write_date(unsigned char dat)
  60. {
  61.         lcd_busy();
  62.         RS = 1;
  63.         RW = 0;
  64.         DataPort = dat;
  65.         delay_ms(2);
  66.         EN = 1;
  67.         delay_ms(2);
  68.         EN = 0;
  69. }

  70. /*********LCD寫指令***********/
  71. void write_com(unsigned char com)
  72. {
  73.         lcd_busy();
  74.         RS = 0;
  75.         RW = 0;
  76.         DataPort = com;
  77.         delay_ms(2);
  78.         EN = 1;
  79.         delay_ms(2);
  80.         EN = 0;
  81. }

  82. /*********LCD初始化*************/
  83. void initLCD()
  84. {
  85.         unsigned char i;
  86.         delay_ms(5);                //延時啟動,等待電壓穩定
  87.         write_com(0x38);        //設置16*2顯示,5*7點陣,8位數據口
  88.         write_com(0x0c);        //設置開顯示,不顯示光標
  89.         write_com(0x06);        //寫一個字符地址指針加1
  90.         write_com(0x01);        //清屏
  91.         delay_ms(1);                //第一行起始地址0x80,第二行起始地址0xc0
  92.         write_com(0x81);          //第一行首空一個字符,開始寫入第一行固定字符
  93.        
  94.         for(i = 0; i < 10; i++)
  95.                 write_date(one[ i]);
  96.         delay_ms(1);
  97.         write_com(0xc2);        //第二行首空兩個字符,開始寫入第二行的固定字符
  98.        
  99.         for(i = 0; i < 8; i++)
  100.                 write_date(two[ i]);

  101.         write_com(0xcd);        //顯示地址
  102.         write_date('.');         //顯示"."
  103.         write_date(0x20);         //0x20顯示就是空  
  104. //        write_date('C');         //顯示C
  105.        
  106.         write_com(0x40);
  107.         for(i = 0; i < 8; i++)
  108.                 write_date(wendu[ i]);
  109.         write_com(0xcf);
  110.         write_date(0x00);
  111. }

  112. /*********10轉BCD**********/                   
  113. unsigned char toBCD(unsigned char dat)
  114. {
  115.         unsigned char tmp;
  116.         tmp=(((dat / 10) * 16)+(dat % 10));
  117.         return(tmp);       
  118. }

  119. /**********DS1302寫一個字節*********/          
  120. void writebyte(unsigned char dat)
  121. {
  122.         unsigned char i;
  123.         for(i = 0; i < 8; i++)
  124.         {
  125.                 SDA = dat & 0x01;
  126.                 SCK = 1;
  127.                 _nop_();_nop_();
  128.                 SCK = 0;
  129.                 dat >>= 1;          
  130.         }
  131. }

  132. /********寫DS1302寄存器********/         
  133. void write1302(unsigned char dizhi,shuju)
  134. {
  135.         RST = 0;
  136.         SCK = 0;
  137.         RST = 1;
  138.         writebyte(dizhi);        //寫入的地址
  139.         writebyte(shuju);        //寫入的數據
  140.         SCK = 1;
  141.         RST = 0;
  142. }

  143. /*******讀取DS1302寄存器********/
  144. unsigned char read1302(unsigned char dizhi)
  145. {
  146.         unsigned char i, dat, tmp;
  147.         RST = 0;
  148.         SCK = 0;
  149.         RST = 1;
  150.         writebyte(dizhi | 0x01);
  151.         for(i = 8; i > 0; i--)
  152.         {
  153.                 dat >>= 1;
  154.                 if(SDA)
  155.                         dat |= 0x80;
  156.                 SCK=1;
  157.                 _nop_();_nop_();
  158.                 SCK=0;
  159.         }
  160.         RST = 0;
  161.         tmp = dat >> 4;
  162.         tmp = ((tmp * 10)+(dat &= 0x0f));
  163.         return(tmp);
  164. }

  165. /*******DS18B20初始化*********/
  166. void init1820()
  167. {
  168.         DQ = 1;
  169.         _nop_();_nop_();
  170.         DQ = 0;
  171.         delay_us(200);
  172.         delay_us(200);
  173.         DQ = 1;
  174.         delay_us(80);
  175.         DQ = 1;
  176. }

  177. /*******向DS18B20中讀出一個字節*********/
  178. unsigned char readonebyte_18b20()
  179. {
  180.         unsigned char i=0, dat=0;
  181.         for(i = 8; i > 0; i--)
  182.         {
  183.                 DQ = 0;
  184.                 dat >>= 1;
  185.                 DQ = 1;
  186.                 if(DQ)
  187.                         dat |= 0x80;
  188.                 delay_us(25);
  189.         }
  190.         return(dat);
  191. }

  192. /******向DS18B20中寫入一個字節*******/
  193. void writeonebyte_18b20(unsigned char dat)
  194. {
  195.         unsigned char i=0;   
  196.         for(i = 8; i > 0; i--)   
  197.         {
  198.                 DQ = 0;  
  199.                 DQ = dat & 0x01;
  200.                 delay_us(25);
  201.                 DQ = 1;
  202.                 dat >>= 1;
  203.         }
  204.         delay_us(25);
  205. }

  206. /*********讀取溫度*********/
  207. unsigned int readtemp(void)
  208. {
  209.         unsigned int xx, tempL=0, tempH=0;
  210.         init1820();
  211.         writeonebyte_18b20(0xcc);
  212.         writeonebyte_18b20(0x44);
  213.         delay_us(100);
  214.         init1820();
  215.         writeonebyte_18b20(0xcc);
  216.         writeonebyte_18b20(0xbe);
  217.         tempL = readonebyte_18b20();
  218.         tempH = readonebyte_18b20();
  219.         tempH <<= 8;
  220.         xx = tempL | tempH;
  221.         return(xx);       
  222. }

  223. /********顯示函數*********/
  224. void display(unsigned char dizhi, dat)
  225. {
  226.         unsigned char a, b;
  227.         a = dat / 10;         //取得十位數字
  228.         b = dat % 10;                                        //取得個位數字
  229.         write_com(dizhi);                        //設定顯示的地址
  230.         write_date(a + 0x30);        //數字+0x30得到該數字的LCD1602顯示碼
  231.         write_date(b + 0x30);
  232. }

  233. /***********溫度顯示函數**************/
  234. void display_wendu(unsigned char dizhi, dat)
  235. {
  236.          write_com(dizhi);
  237.          write_date(dat);
  238. }

  239. /**********顯示周字符**********/
  240. void display_week(unsigned char week)
  241. {
  242.         unsigned char i;
  243.         write_com(0x8d);        //設置星期顯示地址
  244.         switch(week)
  245.         {
  246.                 case 1:        for(i = 0; i < 3; i++)
  247.                                 write_date(week_char[ i]);break;
  248.                 case 2: for(i = 4; i < 7; i++)
  249.                                 write_date(week_char[ i]);break;
  250.                 case 3: for(i = 8; i < 11; i++)
  251.                                 write_date(week_char[ i]);break;
  252.                 case 4: for(i = 12; i < 15; i++)
  253.                                 write_date(week_char[ i]);break;
  254.                 case 5: for(i = 16; i < 19; i++)
  255.                                 write_date(week_char[ i]);break;
  256.                 case 6: for(i = 20; i < 23; i++)
  257.                                 write_date(week_char[ i]);break;
  258.                 case 7: for(i = 24; i < 27; i++)
  259.                                 write_date(week_char[ i]);break;
  260.         }
  261. }

  262. /*********按鍵掃描********/
  263. void keyscan()
  264. {
  265.         unsigned char num;
  266.         if(key1 == 0)                                //判斷key1是不是按下
  267.         {
  268.                 delay_ms(20);                //按鍵消抖
  269.                 if(key1 == 0)                         //再次檢測key1是否按下
  270.                 {
  271.                         beepplay();                       
  272.                         while(!key1);        //等待key1釋放
  273.                         num++;
  274.                         switch(num)
  275.                         {
  276.                                 case 1: TR0 = 0;                                                                                //關閉中斷
  277.                                                 temp_flag = 0;
  278.                                                 time_flag = 0;
  279.                                                 write1302(0x8e, 0x00);                                                //允許寫入DS1302
  280.                                                 write1302(0x80, 0x80);                                                //時間暫停
  281.                                                 write_com(0x0f);                                                                        //設置光標閃爍
  282.                                                 write_com(0xc9);break;                                                //秒鐘閃爍地址
  283.                                 case 2: write_com(0xc6);break;                                //分閃爍地址
  284.                                 case 3: write_com(0xc3);break;                                //時閃爍地址
  285.                                 case 4: write_com(0x8f);break;                                //星期閃爍地址
  286.                                 case 5: write_com(0x8a);break;                                //日閃爍地址
  287.                                 case 6: write_com(0x87);break;                                //月閃爍地址
  288.                                 case 7: write_com(0x84);break;                                //年閃爍地址
  289.                                 case 8: write_com(0x0c);                                                        //設置光標不閃爍
  290.                                                 write1302(0x90,0xa9);                                                        //充電
  291.                                                 write1302(0x8c, toBCD(nian));
  292.                                                 write1302(0x86, toBCD(ri));
  293.                                                 write1302(0x88, toBCD(yue));
  294.                                                 write1302(0x8a, toBCD(week));
  295.                                                 write1302(0x84, toBCD(shi));
  296.                                                 write1302(0x82, toBCD(fen));
  297.                                                 write1302(0x80, toBCD(miao));                         //寫入秒
  298.                                                 write1302(0x8e, 0x80);                                                        //禁止寫入DS1302
  299.                                                 num = 0;TR0 = 1;break;                                                                //定時器打開計數清零
  300.                         }
  301.                 }
  302.         }
  303.    if(num != 0)           //i>0,按鍵key2,key3無效
  304.    {
  305.                 if(key2 == 0)
  306.                 {
  307.                         delay_ms(20);
  308.                         if(key2 == 0)
  309.                         {
  310.                                 beepplay();
  311.                                 while(!key2);  //等待釋放
  312.                                 switch(num)
  313.                                 {
  314.                                         case 1: miao++;if(miao >= 60)miao = 0;        //秒++
  315.                                                         display(0xc8, miao);                        //顯示秒
  316.                                                         write_com(0xc9);break;                //因為顯示地址指針自動加1,重新定義秒的地址
  317.                                         case 2: fen++;if(fen == 60)fen = 0;                //分++
  318.                                                         display(0xc5, fen);                        //顯示當前調入分數據
  319.                                                         write_com(0xc6);break;
  320.                                         case 3: shi++;if(shi == 24)shi = 0;
  321.                                                         display(0xc2, shi);
  322.                                                         write_com(0xc3);break;
  323.                                         case 4: week++;if(week == 8)week = 1;
  324.                                                         display_week(week);
  325.                                                         write_com(0x8f);break;
  326.                                         case 5: ri++;if(ri == 32)ri = 1;
  327.                                                         display(0x89, ri);
  328.                                                         write_com(0x8a);break;
  329.                                         case 6: yue++;if(yue == 13)yue = 1;
  330.                                                         display(0x86, yue);
  331.                                                         write_com(0x87);break;
  332.                                         case 7: nian++;if(nian == 100)nian = 0;
  333.                                                         display(0x83, nian);
  334.                                                         write_com(0x84);break;
  335.                                 }
  336.                         }
  337.                 }
  338.                 if(key3==0)                           //按鍵0有效,判斷key3按下是不是0
  339.                 {
  340.                         delay_ms(20);           //按鍵消抖
  341.                         if(key3==0)
  342.                         {
  343.                                 beepplay();           //調用蜂鳴器響一聲
  344.                                 while(!key3);  //等待釋放key3
  345.                                 switch(num)
  346.                                 {
  347.                                         case 1: miao--;if(miao == 255 | miao > 60)miao = 59;        //減1,減到0再減1就是255
  348.                                                         display(0xc8, miao);
  349.                                                         write_com(0xc9);break;
  350.                                         case 2: fen--;if(fen == 255)fen = 59;
  351.                                                         display(0xc5, fen);
  352.                                                         write_com(0xc6);break;
  353.                                         case 3: shi--;if(shi == 255)shi = 23;
  354.                                                         display(0xc2, shi);
  355.                                                         write_com(0xc3);break;
  356.                                         case 4: week--;if(week == 0)week = 7;
  357.                                                         display_week(week);
  358.                                                         write_com(0x8f);break;
  359.                                         case 5: ri--;if(ri == 0)ri = 31;
  360.                                                         display(0x89, ri);
  361.                                                         write_com(0x8a);break;
  362.                                         case 6: yue--;if(yue == 0)yue = 12;
  363.                                                         display(0x86, yue);
  364.                                                         write_com(0x87);break;
  365.                                         case 7: nian--;if(nian == 255)nian = 99;
  366.                                                         display(0x83, nian);
  367.                                                         write_com(0x84);break;
  368.                                 }
  369.                         }
  370.                 }
  371.         }                       
  372. }

  373. /***********更新時間***********/
  374. void update_time()
  375. {
  376.         if(time_flag == 1)
  377.         {
  378.                 time_flag = 0;
  379.                 miao = read1302(0x81);                //讀秒
  380.                 fen = read1302(0x83);                        //讀分  
  381.                 shi = read1302(0x85);                        //讀時  
  382.                 ri = read1302(0x87);                        //讀日  
  383.                 yue = read1302(0x89);                        //讀月  
  384.                 week = read1302(0x8b);                //讀周  
  385.                 nian = read1302(0x8d);                //讀年

  386.                 display(0xc8, miao);                        //更新秒
  387.                 display(0xc5, fen);                        //更新分
  388.                 display(0xc2, shi);                        //更新時
  389.                 display(0x89, ri);                        //更新日
  390.                 display(0x86, yue);                        //更新月
  391.                 display(0x83, nian);                        //更新年
  392.                 display_week(week);                 //更新周
  393.         }
  394. }

  395. /**********更新溫度*********/
  396. void update_temp()
  397. {
  398.         unsigned int temp;
  399.         if(temp_flag == 1)
  400.         {       
  401.                 temp_flag = 0;
  402.                 temp = readtemp();
  403.                 tp = temp;
  404.                 if(tp & 0x8000)
  405.                         tp = (~tp)+1;
  406.                 tp = ((tp * 5) >> 3);
  407.                 if(temp & 0x8000)
  408.                 {
  409.                         display_wendu(0xcb, '-');
  410.                         display_wendu(0xcc, (tp % 100 / 10) + 0x30);
  411.                         display_wendu(0xce, (tp % 10) + 0x30);
  412.                 }
  413.                 else
  414.                 {
  415.                         if((tp / 100 % 10) == 0)
  416.                                 display_wendu(0xcb, 0x20);
  417.                         else
  418.                                 display_wendu(0xcb, (tp / 100 % 10) + 0x30);
  419.                         display_wendu(0xcc, (tp % 100 / 10) + 0x30);
  420.                         display_wendu(0xce, (tp % 10) + 0x30);
  421.                 }          
  422.         }
  423. }

  424. /********定時器初始化************/
  425. void init_Time0()
  426. {
  427.         TMOD = 0x01;        //設置定時器工作模式
  428.         TH0 = 0;
  429.   TL0 = 0;
  430.         EA = 1;                //開總中斷
  431.         ET0 = 1;                //開定時器0中斷
  432.         TR0 = 1;                //啟動定時器
  433. }

  434. /**********主函數*************/
  435. void main()
  436. {
  437.         initLCD();                         //初始化LCD
  438.         init_Time0();                //初始化定時器          
  439.         while(1)
  440.         {
  441.                 keyscan();                //鍵盤掃描
  442.                 update_time();         //更新時間
  443.                 update_temp();        //更新溫度
  444.         }                                                                  
  445. }                                               

  446. /************中斷程序***************/
  447. void Time0()interrupt 1                                 //中斷程序不易過多
  448. {
  449.         static unsigned char x, y;
  450.         TH0 = (65536-10000) / 256;                         //賦值10ms
  451.         TL0 = (65536-10000) % 256;                 
  452.         x++;
  453.         if(x == 10)
  454.         {
  455.                 x = 0; y++;
  456.                 time_flag = 1;
  457.                 if(y == 5)
  458.                 {
  459.                         y = 0;
  460.                         temp_flag = 1;       
  461.                 }
  462.         }       
  463. }
復制代碼
回復

使用道具 舉報

ID:66137 發表于 2014-12-16 23:25 | 顯示全部樓層
高手,這東西不錯,等你發正式版的程序。。
回復

使用道具 舉報

ID:48140 發表于 2014-12-17 11:36 來自手機 | 顯示全部樓層
這東西真好可以好好學習一下。51hei有你更精彩!!
回復

使用道具 舉報

ID:70614 發表于 2014-12-17 13:29 | 顯示全部樓層
制作的真漂亮
回復

使用道具 舉報

ID:70391 發表于 2014-12-20 17:42 | 顯示全部樓層
不錯的東西,學習了。謝謝分享。
回復

使用道具 舉報

ID:70391 發表于 2014-12-21 11:03 | 顯示全部樓層
配有實物圖,很好的東西,樓主很厲害,謝謝分享。
回復

使用道具 舉報

ID:73762 發表于 2015-3-5 10:05 | 顯示全部樓層
支持一個,謝謝樓主
回復

使用道具 舉報

ID:73949 發表于 2015-3-5 16:02 | 顯示全部樓層
學習學習!謝謝分享!
回復

使用道具 舉報

ID:70614 發表于 2015-3-21 12:49 | 顯示全部樓層
真詳細 謝謝分享
回復

使用道具 舉報

ID:75864 發表于 2015-4-1 11:06 | 顯示全部樓層
學習,樓主的動手能力真強大
回復

使用道具 舉報

ID:74143 發表于 2015-4-3 14:35 | 顯示全部樓層
頂一個。。。。
回復

使用道具 舉報

ID:61484 發表于 2015-4-14 22:09 | 顯示全部樓層
學習下
回復

使用道具 舉報

ID:72047 發表于 2015-4-17 04:48 | 顯示全部樓層
這個資料不錯,下載一下
回復

使用道具 舉報

ID:77523 發表于 2015-4-22 15:36 來自手機 | 顯示全部樓層
我也做了1602得時鐘,可惜不能用,希望外做一次
回復

使用道具 舉報

ID:74992 發表于 2015-4-22 21:49 | 顯示全部樓層
給樓主頂帖,實在是不錯哦!
回復

使用道具 舉報

ID:77776 發表于 2015-4-23 21:09 | 顯示全部樓層
看著我也想做一個
回復

使用道具 舉報

ID:77689 發表于 2015-5-26 12:35 來自手機 | 顯示全部樓層
樓主,給我發一份程序吧,謝謝了,我的編程能力不行,1719190054@qq.com
回復

使用道具 舉報

ID:83273 發表于 2015-6-28 22:57 | 顯示全部樓層
挺不錯的
回復

使用道具 舉報

ID:84732 發表于 2015-7-5 14:04 | 顯示全部樓層
我也照著做個看看
回復

使用道具 舉報

ID:85555 發表于 2015-7-14 14:12 | 顯示全部樓層
不錯。
回復

使用道具 舉報

ID:124081 發表于 2016-6-1 00:05 | 顯示全部樓層
明天仔細看看
回復

使用道具 舉報

ID:116662 發表于 2016-6-5 21:49 | 顯示全部樓層
樓主做工真漂亮,謝謝分享
回復

使用道具 舉報

ID:135369 發表于 2016-11-9 21:13 | 顯示全部樓層
學習了,正好我也要給女票做一個
回復

使用道具 舉報

ID:162718 發表于 2017-1-22 15:07 | 顯示全部樓層
時間是沒有問題的,但是溫度沒有用,自己寫這樣的程序也是出現這個問題,我把樓主的程序抄回去還是沒有辦法度溫度,溫度總是0.00,不知道什么原因,看了好多人都是這個問題,是不是什么地方出錯了。
回復

使用道具 舉報

ID:71689 發表于 2017-2-1 21:01 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

ID:157769 發表于 2017-4-6 21:52 | 顯示全部樓層
bevispan 發表于 2017-1-22 15:07
時間是沒有問題的,但是溫度沒有用,自己寫這樣的程序也是出現這個問題,我把樓主的程序抄回去還是沒有辦法 ...

可以i嘗試用這段代碼,DS1302寫地址讀取時間函數。1602可以同時顯示溫度和時間

/*******************************************************************************
* 函 數 名         : Ds1302Read
* 函數功能                   : 讀取一個地址的數據
* 輸    入         : addr
* 輸    出         : dat
*******************************************************************************/

uchar Ds1302Read(uchar addr)
{
        uchar n,dat,dat1;
        RST = 0;
        _nop_();

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

        for(n=0; n<8; n++)//開始傳送八位地址命令
        {
                DSIO = addr & 0x01;//數據從低位開始傳送
                addr >>= 1;
                SCLK = 1;//數據在上升沿時,DS1302讀取數據
                _nop_();
                SCLK = 0;//DS1302下降沿時,放置數據
                _nop_();
        }
        _nop_();
        for(n=0; n<8; n++)//讀取8位數據
        {
                dat1 = DSIO;//從最低位開始接收
                dat = (dat>>1) | (dat1<<7);
                SCLK = 1;
                _nop_();
                SCLK = 0;//DS1302下降沿時,放置數據
                _nop_();
        }

        /*RST = 0;
        _nop_();        //以下為DS1302復位的穩定時間,必須的。
        SCLK = 1;
        _nop_();
        DSIO = 0;
        _nop_();
        DSIO = 1;
        _nop_();
        return dat;        */
        SCLK=1;//以下為溫度與時間共存必須代碼,原因現在不清楚,以后仔細分析。
        _nop_();
        SCLK=0;
        _nop_();
        RST=0;
        _nop_();
                RST=1;
        _nop_();
        _nop_();        
        DSIO = 0;
        _nop_();
        DSIO = 1;
        _nop_();
return dat;
}
回復

使用道具 舉報

ID:136641 發表于 2017-9-30 17:55 | 顯示全部樓層
手工厲害了我的哥
回復

使用道具 舉報

ID:437276 發表于 2018-12-3 17:13 | 顯示全部樓層
樓主的動手能力真強大,我還需鍛煉這方面的能力
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久91精品国产一区二区三区 | 国产三级| 青青草一区二区 | 国产激情一区二区三区 | 国产精品久久久久一区二区三区 | 成人午夜免费视频 | 日韩在线中文字幕 | 成人福利视频网站 | 久久久久中文字幕 | 久久久国产精品一区 | 久久精品99 | 97视频在线看| 精品国产成人 | 日韩在线成人 | 欧美不卡一区 | 国产一级在线观看 | 久久久精品一区二区 | 国产 欧美 日韩 一区 | 国产精品片aa在线观看 | 日日摸夜夜爽人人添av | 久久av一区 | 国产精品久久9 | 日韩一区三区 | 精品视频999| 精彩视频一区二区三区 | 亚洲综合区 | 色播久久 | 色婷婷av一区二区三区软件 | 日韩视频精品在线 | 欧美 日韩 中文 | 欧美 日韩 亚洲91麻豆精品 | 免费性视频 | 啪啪毛片| 国产精品免费视频一区 | 亚洲区一区二区 | 日韩一区二区免费视频 | 99热最新 | 欧美午夜视频 | 成人免费视频7777777 | aaa国产大片 | 中文字幕在线观 |