wwwxxx国产_337p日本欧洲亚洲大胆张筱雨_免费在线看成人av_日本黄色不卡视频_国产精品成熟老女人_99视频一区_亚洲精品97久久中文字幕_免费精品视频在线_亚洲色图欧美视频_欧美一区二三区

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5455|回復: 2
收起左側

51單片機+vb上位機的ds1820溫度采集系統程序

  [復制鏈接]
ID:641160 發表于 2020-5-14 21:01 | 顯示全部樓層 |閱讀模式
51hei.png 51hei.png

單片機源程序如下:
  1. #include <reg52.h>//頭文件
  2. #include <intrins.h>
  3. #include <math.h>
  4. #define uchar unsigned char//宏定義
  5. #define uint unsigned short int//宏定義
  6. #define sint short int
  7. #define nop _nop_()
  8. void delay(uint z);//延時1MS
  9. void delay1(uchar x2);//延時7us左右;
  10. void write_Directive(uchar a);//寫LCD指令
  11. void write_Data(uchar a);//寫LCD數據
  12. void write_lcd_com_date(uchar addr,uchar date);//實現LCD寫指令及數據
  13. void LCD_init();//LCD初始化
  14. void start(); //AT24C02開始程序
  15. void send(uchar send_data);//AT24C02發送一個字節
  16. uchar receive();//AT24C02接收一個程序
  17. void ack();//AT24C02是否應答
  18. void yack();//AT24C02應答
  19. void nack();//AT24C02無應答
  20. void stop();//AT24C02停止
  21. void write(uchar xaddress,sint temp);//AT24C02寫入溫度
  22. uint read(uchar daddress);//AT24C02讀出溫度
  23. void send_str(sint cc,uchar chflag);  // 傳送字串
  24. void DB18B20_init_1();//DB18B20_1復位
  25. void write_DB18B20_1(uchar dat);//寫DB18B20_1
  26. uchar read_DB18B20_1();//讀DB18B20_1
  27. void DB18B20_init_1();//DB18B20_2復位
  28. void write_DB18B20_1(uchar dat);//寫DB18B20_2
  29. uchar read_DB18B20_1();//讀DB18B20_2
  30. void tempzh_1();  //溫度轉換1
  31. void tempzh_2();  //溫度轉換2
  32. void tempread_1();  //讀取溫度1
  33. void tempread_2();  //讀取溫度2
  34. void temp(sint TEMPS,uchar t,bit fuflag);//顯示溫度函數
  35. void readcc();     //讀取存儲芯片中最高及最低溫度
  36. void keyscan(); //鍵掃描程序
  37. void write_ds1302(uchar addr, uchar date);//寫DS1302
  38. uchar read_ds1302(uchar addr);//讀DS1302
  39. void init_ds1302();//DS1302初始化
  40. void time();//時間顯示
  41. void timekey();//時間部分功能鍵
  42. void tempkey();//溫度部分功能鍵
  43. void shuma(uchar addr,uchar xz,bit flag);//1302調節函數及轉換
  44. void flash(uchar bz);//字符閃爍函數
  45. void tempbj();  //溫度比較
  46. uchar bdata ch;//定義可位尋址空間,用于24c02的讀取
  47. sbit RS=P1^4;//1602數據/命令選擇
  48. sbit RW=P1^5;//1602讀寫命令選擇
  49. sbit E=P1^6;//1602使能端
  50. sbit led=P0^1;//發光二極管
  51. sbit beep=P0^0;//蜂鳴器
  52. sbit SDA=P0^2;//24c02數據總線
  53. sbit SCL=P0^3;//24c02時鐘總線
  54. sbit DQ1=P1^0;//溫度傳感器1
  55. sbit DQ2=P3^2;//溫度傳感器2
  56. sbit DSIO=P1^2;//1302輸入輸出口
  57. sbit DSCLK=P1^1;//1302脈沖
  58. sbit DSRST=P1^3;//1302復位
  59. sbit key1=P3^7;//五個按鍵及其標志
  60. sbit key2=P0^7;
  61. sbit key3=P0^6;
  62. sbit key4=P0^5;
  63. sbit key5=P0^4;
  64. bit  k1flag=0;
  65. bit  k2flag=0;
  66. bit  k3flag=0;
  67. bit  k4flag=0;
  68. bit  k5flag=0;
  69. sbit a0=ch^0;//定義ch各位
  70. sbit a1=ch^1;
  71. sbit a2=ch^2;
  72. sbit a3=ch^3;
  73. sbit a4=ch^4;
  74. sbit a5=ch^5;
  75. sbit a6=ch^6;
  76. sbit a7=ch^7;
  77. bit fuflag1=0;//負溫度標志1
  78. bit fuflag2=0;//負溫度標志2
  79. bit ackflag=0;//24c02應答是否標志
  80. bit sendflag=0;//串口發送標志
  81. sint temps1,temps2,tempd1,tempd2,tempx1,tempx2,uptem1,downtem1,uptem2,downtem2;//溫度參數
  82. uchar count=0,tcount=0,scount=0,t=0;
  83. uchar secondh,secondl,minuteh,minutel,hourh,hourl,second,minute,hour;//時鐘參數
  84. uchar monthl,monthh,month,dayl,dayh,day,year,yearl,yearh,week;
  85. uchar code DispTab_1[12]={'0','1','2','3','4','5','6','7','8','9',' ','-'};//1602:0-9 數字
  86. uchar DispBuf[5]; //5字節的顯示緩沖區
  87. uchar code zzz[] = {"Made In Gao J C"};//定義字符串
  88. uchar code cc1[4] = {"DQ1:"};
  89. uchar code cc2[4] = {"DQ2:"};
  90. uchar code cc3[14] = {"DQ1 is so high"};
  91. uchar code cc4[13] = {"DQ1 is so low"};
  92. uchar code cc5[14] = {"DQ2 is so high"};
  93. uchar code cc6[13] = {"DQ2 is so low"};

  94. void delay(uint z)//1ms延時
  95. {
  96. uchar i;
  97. while(z--)
  98. for(i = 120;i > 0;i--);
  99. }

  100. void delay1(uchar x2)//短延時,由于18b20
  101. {
  102. while(x2--);
  103. }

  104. void write_Directive(uchar a)//寫LCD指令
  105. {
  106. RS = 0;
  107. RW = 0;
  108. delay(1);
  109. E = 0;
  110. P2 = a;
  111. delay(1);
  112. E = 1;
  113. delay(1);
  114. E = 0;
  115. delay(1);
  116. }

  117. void write_Data(uchar a)//寫LCD數據
  118. {
  119. RS = 1;
  120. RW = 0;
  121. delay(1);
  122. E = 0;
  123. P2 = a;
  124. delay(1);
  125. E = 1;
  126. delay(1);
  127. E = 0;
  128. delay(1);
  129. }

  130. void write_lcd_com_date(uchar addr,uchar date)//實現LCD寫指令及數據
  131. {
  132. write_Directive(addr);
  133. delay(1);
  134. write_Data(date);
  135. }

  136. void LCD_init()//LCD初始化
  137. {
  138. uchar i;
  139. delay(15);
  140. write_Directive(0x38);
  141. delay(5);
  142. write_Directive(0x38);
  143. delay(5);
  144. write_Directive(0x38);
  145. write_Directive(0x01);
  146. write_Directive(0x02);//光標復位
  147. write_Directive(0x0c);//不顯示光標
  148. //write_Directive(0x0f);//顯示光標
  149. write_Directive(0x84);//顯示字符串
  150. for(i = 0;i < 7;i++)
  151. write_Data(zzz[i]);
  152. write_Directive(0xc3);
  153. for(i = 8;i < 15;i++)
  154. write_Data(zzz[i]);
  155. }

  156. void start() //AT24C02開始程序
  157. {
  158. SCL = 1;
  159. SDA = 1;
  160. nop;
  161. nop;
  162. SDA = 0;
  163. nop;
  164. nop;
  165. SCL = 0;
  166. }

  167. void send(uchar send_data)//AT24C02發送一個字節
  168. {
  169. ch = send_data;
  170. SDA = a7; SCL = 1; nop;nop; SCL = 0;
  171. SDA = a6; SCL = 1; nop;nop; SCL = 0;
  172. SDA = a5; SCL = 1; nop;nop; SCL = 0;
  173. SDA = a4; SCL = 1; nop;nop; SCL = 0;
  174. SDA = a3; SCL = 1; nop;nop; SCL = 0;
  175. SDA = a2; SCL = 1; nop;nop; SCL = 0;
  176. SDA = a1; SCL = 1; nop;nop; SCL = 0;
  177. SDA = a0; SCL = 1; nop;nop; SCL = 0;
  178. }

  179. uchar receive()//AT24C02接收一個程序
  180. {
  181. SDA = 1;
  182. SCL = 1; nop;nop; a7 = SDA; SCL = 0;
  183. SCL = 1; nop;nop; a6 = SDA; SCL = 0;
  184. SCL = 1; nop;nop; a5 = SDA; SCL = 0;
  185. SCL = 1; nop;nop; a4 = SDA; SCL = 0;
  186. SCL = 1; nop;nop; a3 = SDA; SCL = 0;
  187. SCL = 1; nop;nop; a2 = SDA; SCL = 0;
  188. SCL = 1; nop;nop; a1 = SDA; SCL = 0;
  189. SCL = 1; nop;nop; a0 = SDA; SCL = 0;
  190. return(ch);
  191. }

  192. void ack()//AT24C02是否應答
  193. {
  194. SDA = 1;
  195. SCL = 1;
  196. nop;
  197. nop;
  198. if(SDA)
  199. ackflag = 1;
  200. else
  201. ackflag = 0;
  202. SCL=0;
  203. }

  204. void yack()//AT24C02應答
  205. {
  206. SDA = 0;
  207. SCL = 1;
  208. nop;
  209. nop;
  210. SCL = 0;
  211. SDA = 1;
  212. }
  213. void nack()//AT24C02無應答
  214. {
  215. SDA = 1;
  216. SCL = 1;
  217. nop;
  218. nop;
  219. SCL = 0;
  220. SDA = 0;
  221. }

  222. void stop()//AT24C02停止
  223. {
  224. SDA = 0;
  225. SCL = 1;
  226. nop;
  227. nop;
  228. SDA = 1;
  229. nop;
  230. nop;
  231. SCL = 0;
  232. SDA = 0;
  233. }

  234. void write(uchar xaddress,sint temp)//AT24C02寫入溫度
  235. {
  236. uchar a,b;
  237. do{
  238. start();
  239. send(0xa0);
  240. ack();
  241. } while(ackflag);

  242. do{
  243. send(xaddress);
  244. ack();
  245. }while(ackflag);
  246. a = temp;
  247. temp >>= 8;
  248. b = temp;
  249. do{
  250. send(a);
  251. ack();
  252. }while(ackflag);
  253. do{
  254. send(b);
  255. ack();
  256. }while(ackflag);
  257. stop();
  258. }

  259. uint read(uchar daddress)//AT24C02讀出溫度
  260. {
  261. uchar a,b;
  262. sint temp;
  263. do{
  264. start();
  265. send(0XA0);
  266. ack();
  267. }while(ackflag);     

  268. do{
  269. send(daddress);
  270. ack();
  271. }while(ackflag);

  272. do{
  273. start();
  274. send(0XA1);
  275. ack();
  276. }while(ackflag);   
  277. a = receive();
  278. yack();
  279. b = receive();
  280. yack();
  281. nack();
  282. stop();
  283. temp = b;
  284. temp <<= 8;
  285. temp |= a;
  286. return temp;     
  287. }

  288. void send_str(sint cc,uchar chflag)  // 傳送字串
  289. {
  290. uchar i,a,b,ch[4];
  291. ES=0;
  292. cc = abs(cc);
  293. a = cc / 100;
  294. b = cc % 100;
  295. ch[1] = b;
  296. ch[2] = a;
  297. ch[3] = chflag;
  298. for(i = 3;i > 0;i--){
  299. SBUF = ch[i];
  300. while(!TI);    // 等特數據傳送
  301. TI = 0;       // 清除數據傳送標志
  302. ES=1;
  303. }      
  304. }


  305. /*void serial() interrupt 4
  306. {a=SBUF;
  307. RI=0;
  308. flag=1;
  309. }
  310. */

  311. void DB18B20_init_1()//DB18B20復位
  312. {
  313. DQ1 = 1;
  314. delay1(20);
  315. DQ1 = 0;
  316. delay1(80);
  317. DQ1 = 1;
  318. delay1(15);
  319. }

  320. void write_DB18B20_1(uchar dat)//寫DB18B20
  321. {
  322. uchar i;
  323. for(i = 8;i > 0;i--){
  324. DQ1 = 1;
  325. delay1(10);
  326. DQ1 = 0;
  327. nop;
  328. DQ1 = dat&0x01;
  329. delay1(10);
  330. DQ1 = 1;
  331. dat >>= 1;
  332. }
  333. delay1(7);
  334. }

  335. uchar read_DB18B20_1()//讀DB18B20
  336. {
  337. uchar i,date;
  338. for(i = 8;i > 0;i--){
  339. DQ1 = 0;
  340. date >>= 1;
  341. DQ1 = 1;
  342. if(DQ1)
  343. date |= 0x80;
  344. delay(4);
  345. }
  346. return date;//返回溫度值
  347. }

  348. void DB18B20_init_2()//DB18B20復位
  349. {
  350. DQ2=1;
  351. delay1(20);
  352. DQ2=0;
  353. delay1(80);
  354. DQ2=1;
  355. delay1(15);
  356. }

  357. void write_DB18B20_2(uchar dat)//寫DB18B20
  358. {
  359. uchar i;
  360. for(i = 8;i > 0;i--){
  361. DQ2 = 1;
  362. delay1(10);
  363. DQ2 = 0;
  364. nop;
  365. DQ2 = dat&0x01;
  366. delay1(10);
  367. DQ2 = 1;
  368. dat >>= 1;
  369. }
  370. delay1(7);
  371. }

  372. uchar read_DB18B20_2()//讀DB18B20
  373. {
  374. uchar i,date;
  375. for(i = 8;i > 0;i--){
  376. DQ2 = 0;
  377. date >>= 1;
  378. DQ2 = 1;
  379. if(DQ2)
  380. date |= 0x80;
  381. delay(4);
  382. }
  383. return date;//返回溫度值
  384. }

  385. void tempzh_1()               //溫度轉換
  386. {       
  387. DB18B20_init_1();//DB18B20復位
  388. write_DB18B20_1(0xcc);//寫DB18B20;0xcc 跳過 ROM 指令
  389. write_DB18B20_1(0x44);//寫DB18B20;0x44 啟動溫度轉換指令
  390. }
  391. void tempzh_2()               //溫度轉換
  392. {       
  393. DB18B20_init_2();//DB18B20復位
  394. write_DB18B20_2(0xcc);//寫DB18B20;0xcc 跳過 ROM 指令
  395. write_DB18B20_2(0x44);//寫DB18B20;0x44 啟動溫度轉換指令
  396. }

  397. void tempread_1()//溫度讀取
  398. {
  399. uint temp;
  400. uchar a,b;
  401. fuflag1 = 0;
  402. DB18B20_init_1();//DB18B20復位
  403. write_DB18B20_1(0xcc);//寫DB18B20;0xcc 跳過 ROM 指令
  404. write_DB18B20_1(0xbe);//寫DB18B20;0xbe 讀溫度指令
  405. a = read_DB18B20_1(); //a為低字節8位
  406. b = read_DB18B20_1(); //b為高字節8位
  407. temp = b;     //temp為溫度值UINT 16bit
  408. temp <<= 8;       //兩個字節組合到一起
  409. temp |= a;//此處可以直接把補碼轉換過來,只是關于負數標志的問題需要考慮   
  410. if(b > 7){  //判斷正負,因為負溫度高五位是1,故而可得
  411. fuflag1 = 1;
  412. temps1 = (temp*0.0625-4096)*10-0.5;
  413. }
  414. else{
  415. fuflag1 = 0;
  416. temps1 = temp*0.0625*10+0.5;
  417. }
  418. if(tempd1 < temps1){
  419. tempd1 = temps1;
  420. write(0x00,tempd1);
  421. }
  422. else if(tempx1 > temps1){
  423.            tempx1 = temps1;
  424.        write(0x04,tempx1);
  425.            }

  426. if(sendflag){
  427.         t++;
  428.         if(t == 5){
  429.     send_str(temps1,1);
  430.     send_str(tempd1,2);
  431.     send_str(tempx1,3);
  432.         }   
  433. }
  434. }

  435. void tempread_2()
  436. {
  437. uint temp;
  438. uchar a,b;
  439. fuflag2 = 0;
  440. DB18B20_init_2();//DB18B20復位
  441. write_DB18B20_2(0xcc);//寫DB18B20;0xcc 跳過 ROM 指令
  442. write_DB18B20_2(0xbe);//寫DB18B20;0xbe 讀溫度指令
  443. a = read_DB18B20_2(); //a為低字節8位
  444. b = read_DB18B20_2(); //b為高字節8位
  445. temp = b;     //temp為溫度值UINT 16bit
  446. temp <<= 8;       //兩個字節組合到一起
  447. temp |= a;//此處可以直接把補碼轉換過來,只是關于負數標志的問題需要考慮   
  448. if(b>7){
  449. fuflag2 = 1;
  450. temps2=(temp*0.0625-4096)*10-0.5;
  451. }
  452. else{
  453. fuflag2=0;
  454. temps2=temp*0.0625*10+0.5;
  455. }
  456. if(tempd2<temps2){
  457. tempd2=temps2;
  458. write(0x08,tempd2);
  459. }
  460. else if(tempx2>temps2){
  461.      tempx2=temps2;
  462.      write(0x0c,tempx2);
  463.          }
  464. if(sendflag){
  465.         if(t == 5){
  466.         t = 0;
  467.     send_str(temps2,4);
  468.     send_str(tempd2,5);
  469.     send_str(tempx2,6);
  470.         }
  471. }
  472. }

  473. void temp(sint temps,uchar t,bit fuflag)//顯示溫度函數
  474. {
  475. uchar i;
  476. uint mm;
  477. temps = abs(temps);
  478. DispBuf[0] = temps / 1000;//顯示百位
  479. mm = temps % 1000;
  480. DispBuf[1] = mm / 100;//顯示十位
  481. mm = mm % 100;
  482. DispBuf[2] = mm / 10;//顯示個位
  483. DispBuf[3] = mm % 10;//顯示小數點:0.1
  484. i = DispBuf[0];//百位判斷,如果為0,則消隱
  485. if(i == 0) i = 10;
  486. if(fuflag)//負溫度判斷,如果為0,則溫度為負的,顯示負號
  487. i = 11;
  488. DispBuf[0] = DispTab_1[i];//查表,取字符
  489. i = DispBuf[1];
  490. DispBuf[1] = DispTab_1[i];
  491. i = DispBuf[2];
  492. DispBuf[2] = DispTab_1[i];
  493. i = DispBuf[3];
  494. DispBuf[3] = DispTab_1[i];
  495. i = DispBuf[4];
  496. DispBuf[4] = DispTab_1[i];
  497. write_Directive(0x84+t);//第一行,第五個位置地址
  498. write_Data(DispBuf[0]);//第一行,第五個位置
  499. write_Data(DispBuf[1]);//第一行,第六個位置
  500. write_Data(DispBuf[2]);//第一行,第八個位置
  501. write_Data('.');//第一行,第七個位置
  502. write_Data(DispBuf[3]);//第一行,第九個位置
  503. }

  504. void readcc()//讀24c02中最高和最低溫度并顯示
  505. {          
  506. bit flag;
  507. tempd1 = read(0x00);
  508. if(tempd1 > 0) flag = 0;
  509. else flag = 1;
  510. temp(tempd1,0x00,flag);
  511. tempx1 = read(0x04);
  512. if(tempx1 > 0) flag = 0;
  513. else flag=1;
  514. temp(tempx1,0x06,flag);
  515. tempd2 = read(0x08);
  516. if(tempd2 > 0) flag = 0;
  517. else flag = 1;
  518. temp(tempd2,0x40,flag);
  519. tempx2 = read(0x0c);
  520. if(tempx2 > 0) flag = 0;
  521. else flag = 1;
  522. temp(tempx2,0x46,flag);
  523. }

  524. void keyscan() //鍵掃描程序
  525. {
  526. bit flag = 0;
  527. if(!key1){          //按鍵1
  528. delay(30);
  529.         if(!key1){         
  530.     while(!key1);
  531.     k1flag = 1;
  532.     flag = 1;   
  533.     }
  534. }
  535. if(!key2){       //按鍵2
  536. delay(30);
  537.         if(!key2){
  538.     while(!key2);
  539.     k2flag = 1;
  540.     flag = 1;  
  541.     }
  542. }
  543. if(!key3){         //按鍵3
  544. delay(30);               
  545.         if(!key3){
  546.     while(!key3);
  547.     k3flag = 1;
  548.     flag = 1;
  549.     }
  550. }
  551. if(!key4){          //按鍵4
  552. delay(30);
  553.     if(!key4){         
  554.     while(!key4);
  555.     k4flag = !k4flag;
  556.     flag = 1;      
  557.     }
  558. }
  559. if(!key5){          //按鍵5
  560. delay(30);
  561.         if(!key5){         
  562.     while(!key5);
  563.     k5flag=!k5flag;
  564.     flag=1;
  565.     write_Directive(0x01);                   
  566.     }
  567. }
  568. if(flag){
  569. beep=0;
  570. delay(100);
  571. beep=1;
  572. }
  573. }

  574. uchar read_ds1302(uchar addr)//讀DS1302
  575. {
  576. uchar i,temp = 0x00;
  577. DSRST = 0;
  578. DSIO = 1;
  579. DSCLK = 0;
  580. DSRST = 1;
  581. for(i = 8;i > 0;i--){               //循環8次 寫入地址數據
  582. DSCLK = 0;
  583. DSIO = addr&0x01;             //每次傳輸低字節
  584. addr >>= 1;                  //右移一位
  585. DSCLK = 1;
  586. }
  587. delay(1);
  588. if(DSIO)
  589. temp |= 0x80;                        //每次傳輸低字節
  590. DSCLK = 0;
  591. temp >>= 1;
  592. for(i = 7;i > 0;i--){                   //循環7次 讀取數據此處如果讀8次就會出現亂碼
  593. DSCLK = 0;
  594. if(DSIO)
  595. temp |= 0x80;                        //每次傳輸低字節
  596. DSCLK = 1;
  597. temp >>= 1;                        //右移一位
  598. }
  599. DSCLK = 1;
  600. DSRST = 0;
  601. DSIO = 0;
  602. return temp;               
  603. }

  604. void write_ds1302(uchar addr, uchar date)//寫DS1302
  605. {       
  606. uchar i;
  607. DSRST = 0;
  608. DSCLK = 0;
  609. DSRST = 1;       
  610. for (i = 8;i > 0;i--){             //循環8次 寫入地址數據
  611. DSCLK = 0;
  612. nop;
  613. DSIO = addr&0x01;             //每次傳輸低字節
  614. addr >>= 1;                  //右移一位
  615. DSCLK = 1;
  616. nop;
  617. }
  618. for (i = 8;i > 0;i--){              //循環8次 寫入數據
  619. DSCLK = 0;
  620. nop;
  621. DSIO = date&0x01;             //每次傳輸低字節
  622. date >>= 1;                  //右移一位                DSCLK=1
  623. DSCLK = 1;
  624. nop;
  625. }
  626. DSRST = 0;
  627. delay(1);
  628. }

  629. void init_ds1302()//DS1302初始化
  630. {
  631. write_ds1302(0x8e,0x00);
  632. write_ds1302(0x90,0xa5);
  633. /*write_ds1302(0x80,0x00);    //00秒
  634. write_ds1302(0x82,0x54);    //54分
  635. write_ds1302(0x84,0x17);    //17點
  636. write_ds1302(0x86,0x13);    //13日
  637. write_ds1302(0x88,0x03);    //3月
  638. write_ds1302(0x8a,0x05);    //星期五
  639. write_ds1302(0x8c,0x12);    //2012年*/
  640. }

  641. void time()//時間顯示
  642. {
  643. write_lcd_com_date(0x81,'2');
  644. write_lcd_com_date(0x82,'0');

  645. second = read_ds1302(0x81);
  646. secondl = second & 0x0f;
  647. secondh  = second >> 4;
  648.        
  649. minute = read_ds1302(0x83);
  650. minutel = minute & 0x0f;
  651. minuteh  = minute >> 4;
  652.        
  653. hour = read_ds1302(0x85);
  654. hourl = hour & 0x0f;
  655. hourh  = hour >> 4;       

  656. month = read_ds1302(0x89);
  657. monthl = month & 0x0f;
  658. monthh = month >> 4;
  659.        
  660. year = read_ds1302(0x8d);
  661. yearl = year & 0x0f;
  662. yearh = year >> 4;

  663. day = read_ds1302(0x87);
  664. dayl = day & 0x0f;
  665. dayh = day >> 4;       

  666. week = read_ds1302(0x8b);
  667. week = week&0x0f;

  668. write_lcd_com_date(0xca,0x30 + secondl);
  669. write_lcd_com_date(0xc9,0x30 + secondh);
  670. write_lcd_com_date(0xc8,':');                 
  671. write_lcd_com_date(0xc7,0x30 + minutel);
  672. write_lcd_com_date(0xc6,0x30 + minuteh);                               
  673. write_lcd_com_date(0xc5,':');       
  674. write_lcd_com_date(0xc4,0x30 + hourl);
  675. write_lcd_com_date(0xc3,0x30 + hourh);
  676. write_lcd_com_date(0x84,0x30 + yearl);
  677. write_lcd_com_date(0x83,0x30 + yearh);
  678. write_lcd_com_date(0x85,'-');         
  679. write_lcd_com_date(0x87,0x30 + monthl);
  680. write_lcd_com_date(0x86,0x30 + monthh);               
  681. write_lcd_com_date(0x88,'-');
  682. write_lcd_com_date(0x8a,0x30 + dayl);
  683. write_lcd_com_date(0x89,0x30 + dayh);       
  684. write_lcd_com_date(0x8c,0x30 + week);       
  685. }

  686. void shuma(uchar addr,uchar xz,bit flag)
  687. {
  688. char date;
  689. uchar day=0;
  690. date = read_ds1302(addr + 1);  //讀分寄存器上的數據
  691. date = ((date >> 4) * 10) + (date & 0x0f); //BCD Convert to shi
  692. if(flag == 0) date++;
  693. else date--;
  694. switch(xz)
  695. {
  696. case 0:if(date > 59) date=0;if(date < 0) date = 59;break;//分秒
  697. case 1:if(date > 23) date=0;if(date < 0) date = 23;break;//時
  698. case 2:if(date > 12) date=0;if(date < 0) date = 12;break;//月
  699. case 3:if(date > 99) date=0;if(date < 0) date = 99;break;//年
  700. case 4:if(date > 7)  date=1;if(date < 1) date = 7;break;//星期
  701. case 5:
  702. day = read_ds1302(0X87);
  703. day = ((day >> 4) * 10) + (day & 0x0f);
  704. if(day != 2){
  705.         if(day % 2 == 1){
  706.             if(date > 31)
  707.                 date = 0;
  708.                 else if(date < 0)
  709.                 date = 31;
  710.     }
  711.     else{
  712.             if(date > 30)
  713.             date = 0;
  714.                 else if(date < 0)
  715.             date = 30;
  716.     }
  717. }
  718. else{  
  719.         if(date > 29)
  720.         date = 0;
  721.     else if(date < 0)
  722.     date = 29;
  723. }
  724. break;
  725. ……………………

  726. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
51hei.png

以上是仿真報錯,求大神指導修改一下

所有資料51hei提供下載:
資料.7z (4.42 MB, 下載次數: 91)


回復

使用道具 舉報

ID:1030689 發表于 2022-6-15 20:49 | 顯示全部樓層
這個思路好
回復

使用道具 舉報

ID:326998 發表于 2024-4-13 19:44 | 顯示全部樓層
VB沒過時
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
国产69精品久久久久9999apgf| 91九色国产社区在线观看| av成人动漫在线观看| 一区二区美女| 国产后进白嫩翘臀在线观看视频| 777丰满影院| 亚洲女同志亚洲女同女播放| 三级黄色免费观看| 九九九在线观看视频| 日本不卡二区高清三区| 欧美亚洲一级片| 日韩精品免费在线播放| 精品日本美女福利在线观看| 成人动漫一区二区三区| 欧美视频二区| 久久久精品国产**网站| 91福利在线免费| 神马电影在线观看| 天天色天天看| 欧美日本视频一区| 国产三级三级在线观看| www.99re7.com| 动漫精品一区二区三区| 污片在线免费看| 中文字幕日韩精品无码内射| 色婷婷综合五月| 丁香婷婷深情五月亚洲| 久久久久久穴| 中文精品电影| 杨幂一区二区三区免费看视频| 一二区成人影院电影网| 女子免费在线观看视频www| 午夜成人影视| 日本二区视频| 先锋av影院| 91丨九色丨蝌蚪丨老板| 最近免费中文字幕mv视频| 亚洲一区在线观| 国产亚洲小视频| 一级黄色毛毛片| 美女黄色一级视频| 爱豆国产剧免费观看大全剧苏畅| 亚洲一区二区三区av无码| 欧美一区二区在线| 国产精品久久九九| 92国产精品视频| 国产精品视频大全| 国产suv精品一区二区| 欧美福利视频在线| 久久影院资源网| 中文字幕日韩专区| 亚洲欧美制服综合另类| 精品国产99国产精品| 欧美日本乱大交xxxxx| 色8久久人人97超碰香蕉987| 亚洲午夜免费视频| 亚洲精品中文在线影院| 国产精品盗摄一区二区三区| 久久九九99视频| 久久久国产午夜精品| 91首页免费视频| fc2成人免费人成在线观看播放| 国产一区二区成人久久免费影院| 青娱乐精品视频| 奇米色一区二区三区四区| 久久夜色精品| 日韩成人午夜精品| 另类的小说在线视频另类成人小视频在线| 国产欧美成人| 日本成人超碰在线观看| 日本美女视频一区二区| 韩国av一区二区三区四区 | 99视频免费播放| 3d动漫一区二区三区| 在线观看欧美日韩| 日韩av一卡二卡| 亚洲欧美日韩第一区| 亚洲免费小视频| 色一情一乱一区二区| 久久伊人免费视频| 5566日本婷婷色中文字幕97| 国产精品高潮视频| 99re在线视频观看| 日本黑人久久| 2022中文字幕| 无人在线观看的免费高清视频| 午夜视频在线观| 不卡一区二区在线观看| 精品自拍偷拍视频| 黄色在线视频网址| 午夜美女福利视频| 欧美韩日国产| 污网站在线观看免费| 在线观看国产福利视频| 天天综合视频在线观看| 中文在线а√天堂| 成人性生交大片免费看中文视频| 国产日产精品_国产精品毛片| 偷拍欧美精品| 日本免费在线视频不卡一不卡二| 成人免费毛片aaaaa**| 国产精品久久777777| 一本色道久久加勒比精品| 日韩久久久久久| 久久av.com| 91免费欧美精品| 免费看av软件| 亚洲欧美在线精品| 中国毛片在线观看| 久久一区二区三区视频| 欧美一区二区三区激情| 国产精品日日爱| 神马午夜dy888| 最新黄网在线观看| 成人黄色理论片| 国产精品国内免费一区二区三区| 日本不卡在线视频| 国产欧美日韩激情| 欧美日韩久久不卡| 久久不射电影网| 国产精品久久久久久久久久久久冷 | av美女在线| av午夜在线| 日韩三区四区| 你懂的国产精品| 国产激情一区二区三区| 亚洲在线视频一区| 亚洲精品720p| 亚洲精品伦理在线| 亚洲444eee在线观看| 精品成人a区在线观看| 国模极品一区二区三区| 久久精品一二三区| 在线免费观看av的网站| 久草综合在线视频| 欧美自拍偷拍一区二区| 日本加勒比高清在线| 青青草原av在线| 网友自拍区视频精品| 美女视频免费一区| 亚洲成人免费在线| 日韩综合中文字幕| 精品久久精品久久| 国产一区二区在线观看免费视频| 免费在线观看黄色av| 午夜黄色小视频| 最近中文字幕mv2018在线高清| 不卡视频观看| 91精品秘密在线观看| 91一区二区在线| 日韩西西人体444www| 人九九综合九九宗合| 一二三四中文字幕| 极品尤物一区二区| 五十路在线视频| 亚洲高清成人影院| 精品一区二区三区在线观看视频| 亚洲综合另类| 亚洲图片欧美色图| 欧美贵妇videos办公室| 欧美日韩在线免费观看视频| 妺妺窝人体色WWW精品| 人妻少妇精品无码专区| 一区二区三区不卡在线视频| 日韩一区二区三区高清在线观看| 国内欧美视频一区二区| 在线免费亚洲电影| 国产成人精品视频在线| 黄色免费观看视频网站| 日韩精品人妻中文字幕| 拍拍拍无挡免费播放视频在线观看| 曰本三级在线| 伊人精品成人久久综合软件| 亚洲黄色性网站| 久久在线观看视频| 国产又粗又长又爽视频| 久久久久久蜜桃| 超污黄色软件| 国产精品久久久久久妇女| 美女免费视频一区| 欧美三级电影网站| 91手机视频在线观看| 韩国三级hd中文字幕有哪些| 性欧美8khd高清极品| 撸视在线观看免费视频| 欧美精品一区二区三区精品| 国产欧美精品一区二区三区四区| 亚洲日韩欧美视频一区| 色一情一区二区三区四区| 公肉吊粗大爽色翁浪妇视频| 国产又爽又黄视频| 日韩成人高清| 国产最新精品免费| 日韩精品免费视频| 男人天堂成人网| 亚洲久久在线观看| 中文字幕不卡免费视频| 国产精品自拍区| 亚洲麻豆国产自偷在线| 青草青草久热精品视频在线网站 | 男人天堂网在线视频| 欧美边添边摸边做边爱免费| 欧美久久视频| 欧美中文字幕一区| 亚洲自拍偷拍网址| 91激情视频在线观看| 天堂入口网站| 中文幕av一区二区三区佐山爱| 成人动漫在线一区| 美女撒尿一区二区三区| 苍井空浴缸大战猛男120分钟| 国产精选久久久| 免费a在线看| 日日夜夜精品视频免费| 亚洲成人性视频| 91传媒免费视频| 伊人网中文字幕| 国产精品一区二区三区视频网站| 在线欧美一区| 日韩欧美一区中文| 亚洲精品在线视频观看| 日韩中文字幕高清| 在线视频91p| 奇米精品一区二区三区在线观看 | 亚洲综合久久久| 国产欧美精品在线| 最新中文字幕av| 天天射夜夜爽| 国产99精品一区| 欧美丝袜第三区| 日韩在线电影一区| 中文字幕在线视频免费| 黄色免费在线观看网站| 美女视频黄频大全不卡视频在线播放| 亚洲欧美日韩高清| 国产精品入口免费软件| 亚洲精品人成电影网| 久久久久亚洲精品中文字幕| 亚洲私人影院在线观看| 亚洲free嫩bbb| 久久综合综合久久| 国产51人人成人人人人爽色哟哟| 亚洲欧美日韩国产一区| 亚洲区在线播放| 中文字幕第88页| 91九色国产蝌蚪| 国产乱码精品一区二区三区四区| 在线亚洲免费视频| 亚洲小说欧美另类激情| 人妻一区二区三区四区| 亚洲男男av| 午夜视频在线观看一区| 精品乱子伦一区二区三区| 国内自拍视频在线播放| 牛牛在线精品视频| 久久人人爽爽爽人久久久| 成人激情视频在线播放| 国产又粗又大又爽的视频| 五月婷婷六月婷婷| 中文一区一区三区高中清不卡免费| 久久久噜噜噜久久中文字幕色伊伊| 国产精品久久久久久久久久久不卡| 欧美h片在线观看| 在线观看免费版| jiyouzz国产精品久久| 91精品久久久久久久久久久久久久| www.xxxx日本| 韩国av网站在线| 国产喷白浆一区二区三区| 成人免费看片网址| 国产一区二区三区视频免费观看| 久久xxx视频| 午夜精品福利一区二区三区av| 欧美福利一区二区三区| 国产内射老熟女aaaa∵| 欧洲美女精品免费观看视频| 懂色av影视一区二区三区| 国产视频在线观看网站| 国产精品午夜剧场| 亚洲乱码精品| 久久激情视频免费观看| youjizz亚洲女人| 成年人视频在线免费观看| 成人黄色av电影| 波多野结衣成人在线| 99精品国产99久久久久久97| 中文字幕av一区二区三区四区| 欧美久久久影院| 日韩av自拍偷拍| 亚洲精品套图| 久久亚洲免费视频| 欧美极品一区二区| 中文字幕第一页在线| 久久久久久久久久久9不雅视频| 在线日韩中文字幕| 老司机深夜福利网站| 国产探花在线观看| 精品久久久久久久久久久久| 亚洲不卡中文字幕无码| 先锋影音av网站| 精品中文字幕一区二区| 91传媒视频在线观看| www.av在线.com| 精品国产午夜| 理论片在线不卡免费观看| 天天综合天天做| 欧美aaa视频| 日韩一二三区不卡| 男女一区二区三区| 超碰在线网址| 欧美午夜xxx| 亚洲妇熟xx妇色黄蜜桃| 精品欧美不卡一区二区在线观看 | 日韩av123| 无码久久精品国产亚洲av影片| 日韩视频1区| 国产一区二区激情| 卡通动漫亚洲综合| 日韩欧乱色一区二区三区在线| 日韩精品一区二区三区在线观看| 亚洲调教欧美在线| 久久一卡二卡| 欧美人狂配大交3d怪物一区| 亚洲av成人片色在线观看高潮| 巨大荫蒂视频欧美大片| 精品国产91乱高清在线观看| 天天综合成人网| 成人福利网站| 欧美亚洲国产一区二区三区va| 国产精品人成电影在线观看| 国产理论片在线观看| 日韩三级在线| 国产成人激情小视频| 丰满人妻一区二区三区无码av| 中文字幕免费精品| 国产免费一区二区三区在线观看| 性高潮久久久久久久久久| 亚洲在线播放| 精品日韩欧美| 狠狠操五月天| 久久久国产精品麻豆| 黄色片视频在线播放| a√资源在线| 欧美伊人久久久久久久久影院| 国产精品麻豆入口| 欧美三级网站| 日韩成人在线视频网站| 久久精品视频国产| 日韩a级大片| 2021国产精品视频| 婷婷五月综合久久中文字幕| 久久亚洲精品伦理| 色大师av一区二区三区| 一级黄色av| 天天综合色天天综合色h| 加勒比精品视频| 四虎在线精品| 久久视频在线视频| www.好吊色| 欧美亚洲在线| 亚洲a∨一区二区三区| 超碰97在线免费| 日韩欧美aaa| 亚洲精品一区二区三区在线播放| 都市激情亚洲欧美| 日本免费一区二区三区视频观看| 一色屋成人免费精品网| 成人免费av资源| 久久久久久久少妇| 国产一线二线在线观看| 亚洲全黄一级网站| 国产精品久久久久久久久毛片 | 中文字幕第15页| 欧美日本一区二区高清播放视频| 国产精品一区免费观看| 九色丨porny丨自拍入口| 亚洲午夜私人影院| 五月婷婷欧美激情| 偷拍精品福利视频导航| 国产精品视频精品| 菠萝蜜视频网站入口| 中文字幕人成不卡一区| 亚洲一区二区在线免费| 91精品福利观看| 欧美在线观看一区二区三区| 国产精品久久久高清免费| 国产拍欧美日韩视频二区| 久久久久亚洲av无码网站| 伊人久久一区| 国产精品xxxxx| 8mav模特福利视频在线观看| 亚洲国产综合91精品麻豆| 亚洲色图27p| 亚洲国产老妈| 日韩动漫在线观看| 色大18成网站www在线观看| 亚洲视频在线免费看| 囯产精品一品二区三区| 99久久精品免费看| 国产精品久久久久久亚洲av|