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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

工業生產節能時控器單片機程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:112317 發表于 2016-4-6 18:25 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

節能時控器,根據每日供電波峰,波谷,定時用電。節能,降低用電成本。C51-AT89C2051 程序
源碼: 569417381jsnk.rar (2.29 KB, 下載次數: 15)

  1. #include <AT89x051.H>                //器件配置文件
  2. #define uchar unsigned char                //變量類型的宏定義
  3. #define uint unsigned int
  4. uchar DATA_7SEG[10]={0xfc,0x60,0xda,0xf2,0x66,
  5.                     0xb6,0xbe,0xe0,0xfe,0xf6};        /*0~9的數碼管段碼*/
  6. uchar x[4];                                        /* 存放走時的數組*/
  7. uchar y[4]={0,0,0,0};                        /* 存放定時1的數組*/
  8. uchar z[4]={0,0,0,0};                        /* 存放定時2的數組*/
  9. uchar act[4]={0xfe,0xfd,0xfb,0xf7};        /*四位數碼管的位選碼*/
  10. void delay(uint k);                                //延時子函數聲明
  11. void conv();                                                //走時轉換子函數聲明
  12. void p_out();                                                //判別定時到否子函數聲明
  13. void p_out1();                                                //判別定時到否子函數1聲明
  14. void t_adj();                                                //走時調整子函數聲明
  15. uchar deda=0;           /*100mS計數單元清零*/
  16. bit d_05s=0;            /*0.5秒標志*/
  17. bit o_f1=0;                 /*定時1啟/停標志*/
  18. bit o_f2=0;                 /*定時2啟/停標志*/
  19. uchar set=0;                /*功能鍵標志*/
  20. uchar h=0;
  21. uchar n=0;
  22. uchar m=0;
  23. uchar flag;
  24. uchar left=0;
  25. uchar sec=0;
  26. uchar min=0;
  27. uchar hour=0;
  28. uchar min1=0;
  29. uchar hour1=0;
  30. uchar min2=0;
  31. uchar hour2=0;
  32. uchar up=0;
  33. bit flag1=0;
  34. bit flag2=0;

  35. /*顯示走時*/
  36. void time()
  37. {
  38. for(h=0;h<4;h++)                       
  39.         {P1=DATA_7SEG[x[h]];        //輸出數碼管的字形碼
  40.                 P3=act[h];p_out();                //輸出數碼管的位碼。判斷輸出
  41. if(P3_2==0){if(d_05s==1)P1_0=1;else P1_0=0;}                /* 百位數碼管點亮時,控制小數點
  42. (秒點)閃爍*/
  43.                 delay(2);}                         //每位數碼管點亮2ms
  44. if(o_f1==1){P1=0x01;P3_3=1;P3_2=1;P3_1=0;P3_0=1;}/* 若定時1啟動,
  45. 點亮十位數碼管小數點*/
  46.         else{P1=0x00;P3_3=1;P3_2=1;P3_1=1;P3_0=1;}p_out();/*否則十位數碼管
  47. 小數點不亮*/
  48. delay(2);
  49. if(o_f2==1){P1=0x01;P3_3=1;P3_2=1;P3_1=1;P3_0=0;} /* 若定時2啟動,
  50. 點亮個位數碼管小數點*/
  51.         else{P1=0x00;P3_3=1;P3_2=1;P3_1=1;P3_0=1;}p_out();/*否則個位數碼管
  52. 小數點不亮*/
  53. delay(2);
  54. }

  55. /*定時器T0初始化*/
  56. void init_timer0()
  57. {
  58. TMOD=0x11;
  59. TH0=-(50235/256);
  60. TL0=-(50235%256);
  61. IE=0x8a;
  62. TR0=1;
  63. }

  64. /*定時器T1初始化*/
  65. void init_timer1()
  66. {
  67. TH1=-(5000/256);
  68. TL1=-(5000%256);
  69. }


  70. /*延時k*1ms子函數*/
  71. void delay(uint k)
  72. {
  73. uint i,j;
  74. for(i=0;i<k;i++){
  75. for(j=0;j<60;j++)
  76. {;}}
  77. }

  78. /*100mS定時中斷服務子函數*/
  79. void zd0(void) interrupt 1
  80. {
  81. TH0=-(50235/256);                //重裝100ms定時初值
  82. TL0=-(50235%256);
  83. deda++;                                        //100ms計時單元遞增
  84. }

  85. /*10mS定時中斷服務子函數*/
  86. void zd1(void) interrupt 3
  87. {uchar i,j;i=P1;j=P3;
  88.         TH1=-(5000/256);
  89.         TL1=-(5000%256);
  90. if(m==1)n++;
  91. if(n>=30){n=0;m=0;}
  92. P3_7=0;
  93. P1=0xff;
  94. if(P1!=0xff)
  95. {
  96. if(n==0)m=1;
  97. {if(n==1)
  98. {
  99. if(P1_0==0){set++;left=0;}
  100. if(set>=4)set=0;
  101. if(set==1)flag=0x55;
  102. if(P1_1==0)left++;
  103. if(left>=4)left=0;
  104. if(P1_2==0){up++;
  105. switch(left)
  106. {
  107. case 0:{if(up>=10)up=0;}break;
  108. case 1:{if(up>=6)up=0;}break;
  109. case 2:{if(up>=10)up=0;}break;
  110. case 3:{if(up>=3)up=0;}break;
  111. default:break;
  112. }
  113. }
  114. if(P1_2==0){
  115. switch(set)
  116. {case 0:break;
  117. case 1:x[left]=up;break;
  118. case 2:{y[left]=up;if(P1_3==0)o_f1=!o_f1;}break;
  119. case 3:{z[left]=up;if(P1_3==0)o_f2=!o_f2;}break;
  120. default:break;}
  121.                         }
  122. else {
  123. switch(set)
  124. {case 0:break;
  125. case 1:up=x[left];break;
  126. case 2:{up=y[left];if(P1_3==0)o_f1=!o_f1;}break;
  127. case 3:{up=z[left];if(P1_3==0)o_f2=!o_f2;}break;
  128. default:break;}
  129.         }}
  130. }}
  131. P1=i;P3=j;
  132. }

  133. /*顯示調整走時*/
  134. void t_adj()
  135. {p_out1();
  136. for(h=0;h<4;h++)        //四位數碼管每位點亮3ms
  137.         {if(h==left)P1=0x00;
  138.         else {P1=DATA_7SEG[x[h]];
  139.         P3=act[h];p_out();
  140.         delay(3);}}
  141.         P1=DATA_7SEG[up];P3=act[left];
  142.         hour=x[3]*10+x[2];min=x[1]*10+x[0];
  143.         p_out();
  144.         delay(12);        //需調整的數碼管點亮12ms
  145. if(o_f1==1){P1=0x01;P3_3=1;P3_2=1;P3_1=0;P3_0=1;} /*若定時1啟動,
  146. 點亮十位數碼管小數點*/
  147.         else{P1=0x00;P3_3=1;P3_2=1;P3_1=1;P3_0=1;}p_out();/*否則十位數碼管
  148. 小數點不亮*/
  149. delay(12);                //需調整的數碼管點亮12ms
  150. if(o_f2==1){P1=0x01;P3_3=1;P3_2=1;P3_1=1;P3_0=0;} /*若定時2啟動,
  151. 點亮個位數碼管小數點*/
  152.         else{P1=0x00;P3_3=1;P3_2=1;P3_1=1;P3_0=1;}p_out();/*否則個位數碼管
  153. 小數點不亮*/
  154. delay(12);                //需調整的數碼管點亮12ms
  155. }

  156. /*顯示調整定時1*/
  157. void t1_adj()
  158. {p_out1();
  159. for(h=0;h<4;h++)                //四位數碼管每位點亮3ms
  160.         {if(h==left)P1=0x00;
  161.         else {P1=DATA_7SEG[y[h]];
  162.         P3=act[h];p_out();
  163.         delay(3);}}
  164.         P1=DATA_7SEG[up];P3=act[left];        //需調整的數碼管點亮18ms
  165.         hour1=y[3]*10+y[2];min1=y[1]*10+y[0];
  166.         p_out();
  167. delay(18);
  168. if(o_f1==1){P1=0x01;P3_3=0;P3_2=1;P3_1=0;P3_0=1;} /*若定時1啟動,
  169. 點亮十位數碼管小數點*/
  170.         else{P1=0x01;P3_3=0;P3_2=1;P3_1=1;P3_0=1;} /*否則十位數碼管
  171. 小數點不亮*/
  172.         p_out();
  173.         delay(18);                                                //需調整的數碼管點亮18ms
  174. }


  175. /*顯示調整定時2*/
  176. void t2_adj()
  177. {p_out1();
  178. for(h=0;h<4;h++)                                //四位數碼管每位點亮3ms
  179.         {if(h==left)P1=0x00;
  180.         else {P1=DATA_7SEG[z[h]];                //需調整的數碼管點亮18ms
  181.         P3=act[h];p_out();
  182.         delay(3);}}
  183.         P1=DATA_7SEG[up];P3=act[left];
  184. hour2=z[3]*10+z[2];min2=z[1]*10+z[0];
  185.         p_out();
  186. delay(18);
  187. if(o_f2==1){P1=0x01;P3_3=1;P3_2=0;P3_1=1;P3_0=0;} /*若定時2啟動,
  188. 點亮個位數碼管小數點*/
  189.         else{P1=0x01;P3_3=1;P3_2=0;P3_1=1;P3_0=1;} /*否則個位數碼管
  190. 小數點不亮*/
  191.         p_out();
  192.         delay(18);                                //需調整的數碼管點亮18ms
  193. }


  194. /*時、分、秒計時單元轉換*/
  195. void conv()
  196. {
  197. if(deda<=5)d_05s=0;                //每500ms,秒點取反
  198.         else d_05s=1;
  199. if(deda>=10){sec++;deda=0;}        //每1000ms,秒單元遞增
  200. if(sec>=60){min++;sec=0;}                //每60s,分單元遞增
  201. if(min>=60){hour++;min=0;}        //每60m,時單元遞增
  202. if(hour>=24){hour=0;}                        //每24h,時單元清零
  203. }

  204. /*判別定時到否子函數*/
  205. void p_out()
  206. {
  207. if(o_f1==1)                        //若定時1啟動
  208. {if(hour==hour1)                //定時1時間到
  209. {if(min==min1)
  210. {flag1=1;if(d_05s==1)P3_4=0;else P3_4=1;}}}        //繼電器輸出標志置1,蜂鳴器間斷鳴響
  211. if(flag1==1) P3_5=0;                        //若輸出標志為1,繼電器吸合

  212. if(o_f2==1)                        //若定時2啟動
  213. {if(hour==hour2)                //定時2時間到
  214. {if(min==min2)
  215. {flag1=0;if(d_05s==1)P3_4=0;else P3_4=1;}}} //繼電器輸出標志置0,蜂鳴器間斷鳴響
  216. if(flag1==0) P3_5=1;                        //若輸出標志為0,繼電器釋放
  217. }

  218. /*判別定時到否子函數1*/
  219. void p_out1()
  220. {
  221. if(o_f1==1)                        //若定時1啟動
  222. {if(hour==hour1)                //定時1時間到
  223. {if(min==min1)
  224. {flag1=1;}}}                        //繼電器輸出標志置1
  225. if(flag1==1) P3_5=0;        //若輸出標志為1,繼電器吸合

  226. if(o_f2==1)                        //若定時2啟動
  227. {if(hour==hour2)                //定時2時間到
  228. {if(min==min2)
  229. {flag1=0;}}}                        //繼電器輸出標志置0
  230. if(flag1==0) P3_5=1;        //若輸出標志為0,繼電器釋放
  231. }


  232. /*主函數*/
  233. void main()
  234. {
  235.         init_timer0();            /*定時器T0初始化*/
  236.         init_timer1();            /*定時器T1初始化*/
  237.        
  238.         while(1)
  239.         {
  240. /*將顯示緩沖數組內容移到時、分計時單元*/
  241. hour=x[3]*10+x[2];min=x[1]*10+x[0];
  242. hour1=y[3]*10+y[2];min1=y[1]*10+y[0];
  243. hour2=z[3]*10+z[2];min2=z[1]*10+z[0];
  244. conv();                                        /*時、分、秒及100mS單元轉換*/
  245. /*將轉換后的時、分計時單元內容移到顯示緩沖數組*/
  246. x[3]=hour/10;x[2]=hour%10;x[1]=min/10;x[0]=min%10;
  247. y[3]=hour1/10;y[2]=hour1%10;y[1]=min1/10;y[0]=min1%10;
  248. z[3]=hour2/10;z[2]=hour2%10;z[1]=min2/10;z[0]=min2%10;
  249. switch(set)
  250. {
  251. case 0:time();break;/*顯示走時*/
  252. case 1:t_adj();break;/*顯示調整走時*/
  253. case 2:t1_adj();break;/*顯示調整定時1*/
  254. case 3:t2_adj();break;/*顯示調整定時2*/
  255. default:break;
  256. }
  257. if(flag!=0x55)                                        /*判斷RAM受干擾標志,若受干擾,
  258. 則顯示器閃爍告警*/
  259.         {uchar i;P3_4=1;P3_5=1;
  260.                 for(i=0;i<100;i++)                /*點亮顯示器200mS*/
  261.                 {
  262.                 P1=DATA_7SEG[x[3]];P3=0xf7;delay(1);
  263.                 P1=DATA_7SEG[x[2]];P3=0xfb;delay(1);
  264.                 P1=DATA_7SEG[x[1]];P3=0xfd;delay(1);
  265.                 P1=DATA_7SEG[x[0]];P3=0xfe;delay(1);
  266.                 }
  267.                
  268.                 P1=0xff;P3=0xff;delay(400);        /*熄滅顯示器200mS*/
  269.                 P3_7=0;
  270. /*如有鍵按下達0.5S則退出閃爍狀態同時掉電標志置55H。*/
  271. if(P1!=0xff){
  272. delay(10);if(P1_0==0)flag=0x55;F0:if(P1!=0xff)goto F0;
  273.                         }P3_7=1;
  274.         }
  275. else TR1=1;/*啟動定時器1*/
  276. }}
復制代碼



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

使用道具 舉報

沙發
ID:109053 發表于 2016-4-7 00:23 | 只看該作者
有沒有電路圖參考一下..
回復

使用道具 舉報

板凳
ID:99341 發表于 2016-5-3 21:48 | 只看該作者
樓主應該把電路圖發一個讓大家看看
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 午夜成人免费视频 | 欧美视频第三页 | 久久久www成人免费无遮挡大片 | 亚洲国产一区在线 | 久久久久久久国产 | 成人伊人网 | 中文日韩字幕 | 秋霞国产 | 国产小视频在线 | 91天堂网| 久久久久久久一区 | 精品国产乱码久久久久久图片 | 久久久精品一区 | 日韩精品一区二区三区视频播放 | 成人三级视频在线观看 | 亚洲国产精品99久久久久久久久 | 国内91在线| 美女网站视频免费黄 | 九九热精品在线 | 91.com视频| 精品一区二区三区91 | 国产日韩欧美在线 | 欧美一区二区免费电影 | 精品一区二区久久久久久久网站 | a在线免费观看 | 亚洲精品一区二区三区 | 国产高清自拍视频在线观看 | 欧美激情国产日韩精品一区18 | 2019精品手机国产品在线 | 国产激情精品视频 | 欧美日韩国产在线观看 | 日韩在线观看一区 | 最近最新中文字幕 | 国产精品国产三级国产aⅴ无密码 | 亚洲一区二区三区在线视频 | 国产精品久久久久不卡 | 成人精品国产一区二区4080 | 一级欧美黄色片 | 日本久久www成人免 成人久久久久 | 亚洲一区久久 | 亚洲精品大全 |