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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4003|回復: 3
收起左側

51單片機數碼管24小時可調時鐘 可存多條時間記錄 用于記錄某事件發生時間

[復制鏈接]
ID:304877 發表于 2019-4-19 21:55 | 顯示全部樓層 |閱讀模式
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
捕獲.JPG

單片機源程序如下:
  1. /*
  2. P1口三個led燈代表模式:
  3. 模式1:開始記錄
  4. 模式2:查看記錄  按s3下一條  s4下一條
  5. 模式3:時間矯正 按s2選擇矯正位  按s3加一 按s4減一  led       
  6. 注:p33口低電平觸發記錄;  調整實踐時時鐘停止        可存儲十條記錄,自動清除最舊記錄
  7. */

  8. #include<reg52.h>
  9. #include<intrins.h>
  10. #define uchar unsigned char
  11. #define uint unsigned int
  12. sbit du=P2^6;
  13. sbit we=P2^7;
  14. sbit s2=P3^0;
  15. sbit s3=P3^1;
  16. sbit s4=P3^2;
  17. sbit led1=P1^7;
  18. sbit led2=P1^6;
  19. sbit led3=P1^5;                  //模式狀態燈


  20. uchar temp0;//P1口狀態存儲
  21. uint temp;//秒調整
  22. uchar ii,ii2; //中斷存儲循環用
  23. uchar Mode=1;//模式選擇
  24. uchar num=1; //記錄調出值
  25. uchar time[10][4];        //雞蛋時間記錄儲存
  26. double timeh,timem,times; //系統時間


  27. uchar code ld[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00};
  28. void display(uchar i,uchar j,uchar k,uchar l);
  29. void delay(uint z);
  30. void inti()
  31. {
  32. EA=1;//總開關
  33. EX1=1;//int1中斷                 p33口
  34. IT1=0;//觸發方式:低電平
  35. ET0=1;//定時器0中斷允許
  36. TMOD=0x01;//模式選擇;//定時器0,1,16位定時器
  37. TH0=0x4b;
  38. TL0=0xfe;//50ms
  39. TR0=1;
  40. }               
  41. void main()
  42. {
  43. inti(); //初始化配置
  44. while(1)
  45. {
  46.   if(s2==0)
  47.   {
  48.   Mode++;
  49.   if(Mode==6)Mode=1;
  50.   if(!(Mode==1||Mode==2))ET0=0;
  51.   if(Mode==1||Mode==2)ET0=1;
  52.   while(!s2);
  53.   delay(100);
  54.   }        //模式選擇


  55.   if(Mode==1)//模式1     工作模式顯示時間
  56.   {
  57.   display(100,timeh,timem,times);
  58.   led1=0;led2=1;led3=1;
  59.   }


  60.   if(Mode==2)//模式2 查詢
  61.   {
  62.   led1=1;led2=0;led3=1;
  63.   if(s3==0)
  64.   {
  65.   num++;
  66.   if(num==11)num=10;//防止查詢溢出
  67.   while(!s3);
  68.   delay(100);
  69.   }
  70.   if(s4==0)
  71.   {
  72.   num--;
  73.   if(num==0)num=1;//防止查詢溢出
  74.   while(!s4);
  75.   delay(100);
  76.   }
  77.   display(num,time[num-1][0],time[num-1][1],time[num-1][2]);  
  78.   }


  79.   if(Mode==3)//模式3   時間矯正  時
  80.   {
  81.   led1=1;led2=1;led3=0;
  82.   if(s3==0)
  83.   {
  84.   timeh++;
  85.   if(timeh==24)timeh=0;
  86.   if(timeh<0)timeh=23;
  87.   while(!s3);
  88.   delay(100);
  89.   }
  90.   if(s4==0)
  91.   {
  92.   timeh--;
  93.   if(timeh==24)timeh=0;
  94.   if(timeh<0)timeh=23;
  95.   while(!s4);
  96.   delay(100);
  97.   }
  98.   display(100,timeh,100,100);
  99.   }
  100.   if(Mode==4)//模式3   時間矯正  分
  101.   {
  102.   led1=1;led2=1;led3=0;
  103.   if(s3==0)
  104.   {
  105.   timem++;
  106.   if(timem==60)timem=0;
  107.   if(timem<0)timem=59;
  108.   while(!s3);
  109.   delay(100);
  110.   }
  111.   if(s4==0)
  112.   {
  113.   timem--;
  114.   if(timem==60)timem=0;
  115.   if(timem<0)timem=59;
  116.   while(!s4);
  117.   delay(100);
  118.   }
  119.   display(100,100,timem,100);
  120.   }
  121.   if(Mode==5)//模式3   時間矯正  秒
  122.   {
  123.   led1=1;led2=1;led3=0;
  124.   if(s3==0)
  125.   {
  126.   times++;
  127.   if(times==60)times=0;
  128.   if(times<0)times=59;
  129.   while(!s3);
  130.   delay(100);
  131.   }
  132.   if(s4==0)
  133.   {
  134.   times--;
  135.   if(times==60)times=0;
  136.   if(times<0)times=59;
  137.   while(!s4);
  138.   delay(100);
  139.   }
  140.   display(100,100,100,times);   
  141.   }

  142. }
  143. }
  144. void timer0() interrupt 1
  145. {

  146. temp++;
  147. TH0=0x4b;
  148. TL0=0xfe; //50ms進入一次
  149. if(temp==20)
  150. {
  151. times++;
  152. temp=0;
  153. }
  154. if(times==60)
  155. {
  156. timem++;
  157. times=0;
  158. }
  159. if(timem==60)
  160. {
  161. timeh++;
  162. timem=0;
  163. }
  164. if(timeh==24)
  165. {
  166. timeh=0;
  167. } //時間計算




  168. }
  169. void int1() interrupt 2         //p33口
  170. {
  171. for(ii=0;ii<10;ii++)
  172. {
  173. for(ii2=0;ii2<3;ii2++)
  174. {
  175.   time[9-ii][ii2]=time[8-ii][ii2];
  176. }
  177. }
  178. time[0][0]=timeh;
  179. time[0][1]=timem;
  180. time[0][2]=times;//存儲數據
  181. temp0=P1;
  182. P1=0;//中斷響應
  183. delay(1000);
  184. P1=temp0;
  185. }               
  186. void display(uchar i,uchar j,uchar k,uchar l)
  187. {
  188.         
  189.         uchar shi1,ge1,shi2,ge2,shi3,ge3,shi4,ge4;
  190.                 if(i<100)
  191.                 {
  192.                 shi1=i/10;
  193.                 ge1=i%10;
  194.                 }
  195.                 else
  196.                 {
  197.                 shi1=ge1=10;
  198.                 }
  199.                 if(j<100)
  200.                 {
  201.                 shi2=j/10;
  202.                 ge2=j%10;
  203.                 }
  204.                 else
  205.                 {
  206.                 shi2=ge2=10;
  207.                 }
  208.                 if(k<100)
  209.                 {
  210.                 shi3=k/10;
  211.                 ge3=k%10;
  212.                 }
  213.                 else
  214.                 {
  215.                 shi3=ge3=10;
  216.                 }
  217.                 if(l<100)
  218.                 {
  219.                 shi4=l/10;
  220.                 ge4=l%10;
  221.                 }
  222.                 else
  223.                 {
  224.                 shi4=ge4=10;
  225.                 }            
  226.                 P0=0xff;                 //清除段碼
  227.         we=1;  
  228.         P0=0xfe;//1111 1110
  229.         we=0;//第一次位選
  230.                              
  231.         du=1;                       
  232.         P0=ld[shi1];
  233.         du=0;
  234.         delay(1);//第一次段選

  235.                 P0=0xff;                 //清除段碼
  236.         we=1;  
  237.         P0=0xfd;//1111 1101
  238.         we=0;//第二次位選

  239.         du=1;
  240.         P0=ld[ge1];
  241.         du=0;
  242.         delay(1);//第二次段選


  243.                                 P0=0xff;                 //清除段碼
  244.         we=1;  
  245.         P0=0xfb;//1111 1011
  246.         we=0;//第一次位選
  247.                              
  248.         du=1;                       
  249.         P0=ld[shi2];
  250.         du=0;
  251.         delay(1);//第一次段選

  252.                 P0=0xff;                 //清除段碼
  253.         we=1;  
  254.         P0=0xf7;//1111 0111
  255.         we=0;//第二次位選

  256.         du=1;
  257.         P0=ld[ge2];
  258.         du=0;
  259.         delay(1);//第二次段選


  260.                                 P0=0xff;                 //清除段碼
  261.         we=1;  
  262.         P0=0xef;//1110 1111
  263.         we=0;//第一次位選
  264.                              
  265.         du=1;                       
  266.         P0=ld[shi3];
  267.         du=0;
  268.         delay(1);//第一次段選

  269.                 P0=0xff;                 //清除段碼
  270. ……………………

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

所有資料51hei提供下載:
proteus仿真51開發板.zip (35.92 KB, 下載次數: 25)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:304877 發表于 2019-4-19 21:59 | 顯示全部樓層
喜歡分享自己做的東西  大佬勿噴
回復

使用道具 舉報

ID:386381 發表于 2019-4-20 18:57 來自手機 | 顯示全部樓層
這個實用,可以記錄電池充或放電的時間,謝謝樓主分享。
回復

使用道具 舉報

ID:304877 發表于 2019-4-21 22:55 來自手機 | 顯示全部樓層
文鳳軒 發表于 2019-4-20 18:57
這個實用,可以記錄電池充或放電的時間,謝謝樓主分享。

我都沒想到呢,,改一改就可以實現記錄電池充電和放點時間了呢
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产伦精品一区二区三区四区视频 | julia中文字幕久久一区二区 | 韩日精品在线观看 | 国产精品久久av | 国内精品一区二区三区 | 天天干国产 | 国产一区在线免费 | 欧美日韩国产中文 | 黑人精品欧美一区二区蜜桃 | 一级毛片高清 | 国产欧美在线一区 | 欧美一级欧美一级在线播放 | 亚洲成人精品 | 精品久久国产 | 特级毛片爽www免费版 | 99成人免费视频 | 天堂一区二区三区 | 一区二区三区四区五区在线视频 | 中文字幕乱码一区二区三区 | 欧美日韩国产精品一区 | av中文字幕在线播放 | 精品国产一区二区三区四区在线 | 久久91精品国产一区二区三区 | 日日噜噜噜夜夜爽爽狠狠视频97 | 亚洲精品日韩视频 | 少妇一区二区三区 | 国产一区二区三区www | 日本激情视频中文字幕 | 精品日韩在线 | 精品1区 | 国产a区| 午夜精品一区二区三区免费视频 | 久久久久久久国产精品影院 | 91在线精品秘密一区二区 | 99综合 | 久久精品国产清自在天天线 | 国产欧美精品一区 | 国产免费又色又爽又黄在线观看 | 久久99精品国产 | 青青久在线视频 | 亚洲成人免费 |