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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3022|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

制作定時(shí)插座單片機(jī)源程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:162561 發(fā)表于 2017-12-28 17:55 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
  1. /***
  2. **項(xiàng)目名稱:制作定時(shí)插座
  3. **編寫(xiě)時(shí)間:2017.11.26
  4. **使用芯片:stc12c5608ad
  5. **時(shí)鐘頻率:使用外部時(shí)鐘頻率11.0592MHz
  6. **簡(jiǎn)要說(shuō)明:可以定時(shí)關(guān)閉插座電源
  7. ***/
  8. #include <stc12c5630ad.h>
  9. typedef unsigned char uint8_t;
  10. typedef unsigned int uint16_t;
  11. code uint8_t TABLE_NUM[11] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};
  12. #define DefaultTiming 60
  13. uint8_t  PowerON = 0;       //電源:0-關(guān)、1-開(kāi)
  14. uint8_t  TimingON = 0;       //定時(shí):0-關(guān)、1-開(kāi)
  15. uint8_t  Show_Update_Flag = 0;   //更新數(shù)碼管顯示:0-不更新、1-需更新
  16. uint8_t  KeyScan_Update_Flag = 0; //更新按鍵值:0-沒(méi)更新、1-有更新
  17. uint16_t  Timing = 0;        //定時(shí)時(shí)間
  18. uint8_t  KeyValue = 0;       //按鍵值
  19. uint8_t  ShowWei = 0;       //數(shù)碼管顯示位
  20. void Timer0_Config();
  21. void Timer1_Config();
  22. void TurnOnPower();
  23. void TurnOffPower();
  24. void TurnOnTiming();
  25. void TurnOffTiming();
  26. void BUZZER(uint8_t type);
  27. void Delay50ms();
  28. void Delay500ms();
  29. void main()
  30. {
  31. P1 = 0xff;
  32. P2 = 0xf0;
  33. P3 = 0;

  34. Timer0_Config();
  35. Timer1_Config();
  36. ET0 = 1;
  37. ET1 = 1;
  38. EA = 1;

  39. TurnOnPower();

  40. while(1)
  41. {
  42.   //按鍵處理
  43.   if(KeyScan_Update_Flag)
  44.   {
  45.    KeyScan_Update_Flag = 0;
  46.    
  47.    switch(KeyValue)
  48.    {
  49.     case 1:
  50.      BUZZER(0);     
  51.      if(PowerON) TurnOffPower();
  52.      else TurnOnPower();
  53.      break;
  54.     case 2:
  55.      if(Timing > 10 && TimingON) Timing -= 10;
  56.      break;
  57.     case 3:
  58.      if(TimingON) TurnOffTiming();
  59.      else if(PowerON) TurnOnTiming();
  60.      break;
  61.     case 4:
  62.      if(Timing <= 230 && TimingON) Timing += 10;
  63.      break;
  64.    }
  65.   }
  66.   
  67.   //數(shù)碼管顯示
  68.   if(Show_Update_Flag)
  69.   {
  70.    Show_Update_Flag = 0;
  71.    
  72.    P1 = 0xff;       //斷碼
  73.    P20 = P21 = P22 = 0;  //位碼
  74.    
  75.    switch(ShowWei)
  76.    {
  77.     case 0:
  78.      if(TimingON) P1 = TABLE_NUM[(Timing / 100) % 10];
  79.      else P1 = TABLE_NUM[10];
  80.      P20 = 1;
  81.      break;
  82.     case 1:
  83.      if(TimingON) P1 = TABLE_NUM[(Timing / 10) % 10];
  84.      else P1 = TABLE_NUM[10];
  85.      P21 = 1;     
  86.      break;
  87.     case 2:
  88.      if(TimingON) P1 = TABLE_NUM[Timing % 10];
  89.      else P1 = TABLE_NUM[10];
  90.      P22 = 1;     
  91.      break;
  92.    }
  93.   }
  94. }
  95. }

  96. /***TIM0配置:為數(shù)碼管顯示和鍵盤掃描提供時(shí)間間隔5ms***/
  97. void Timer0_Config()
  98. {
  99. AUXR &= 0x7F;    //定時(shí)器時(shí)鐘12T模式
  100. TMOD &= 0xF0;    //設(shè)置定時(shí)器模式
  101. TMOD |= 0x01;    //設(shè)置定時(shí)器模式
  102. TL0 = 0x00;     //設(shè)置定時(shí)初值
  103. TH0 = 0xEE;     //設(shè)置定時(shí)初值
  104. TF0 = 0;      //清除TF0標(biāo)志
  105. TR0 = 1;      //定時(shí)器0開(kāi)始計(jì)時(shí)
  106. }

  107. /***TIM1配置:提供定時(shí)基準(zhǔn),每次50ms***/
  108. void Timer1_Config()
  109. {
  110. AUXR &= 0xBF;    //定時(shí)器時(shí)鐘12T模式
  111. TMOD &= 0x0F;    //設(shè)置定時(shí)器模式
  112. TMOD |= 0x10;    //設(shè)置定時(shí)器模式
  113. TL1 = 0x00;     //設(shè)置定時(shí)初值
  114. TH1 = 0x4C;     //設(shè)置定時(shí)初值
  115. TF1 = 0;      //清除TF1標(biāo)志
  116. TR1 = 0;      //定時(shí)器1開(kāi)始計(jì)時(shí)
  117. }

  118. /***按鍵和數(shù)碼管的掃描***/
  119. void TIMER0() interrupt 1 using 1
  120. {
  121. static uint8_t _key_down = 0, _key_tempvalue = 0, _times = 0;

  122. TL0 = 0x00;
  123. TH0 = 0xEE;

  124. //按鍵掃描 20ms一次
  125. _times++;
  126. if(_times == 4)
  127. {
  128.   _times = 0;
  129.   if(!P24 || !P25 || !P26 || !P27)
  130.   {
  131.    if(_key_down)
  132.    {
  133.     if(!P24) _key_tempvalue = 1;
  134.     if(!P25) _key_tempvalue = 2;
  135.     if(!P26) _key_tempvalue = 3;
  136.     if(!P27) _key_tempvalue = 4;
  137.    }
  138.    else
  139.    {
  140.     _key_down = 1;
  141.    }
  142.   }
  143.   else
  144.   {
  145.    if(_key_down && _key_tempvalue) KeyValue = _key_tempvalue;
  146.    else KeyValue = 0;
  147.    
  148.    if(_key_down) KeyScan_Update_Flag = 1;
  149.    
  150.    _key_down = _key_tempvalue = 0;
  151.   }
  152. }


  153. //數(shù)碼管掃描
  154. ShowWei = ++ShowWei > 2 ? 0 : ShowWei;
  155. Show_Update_Flag = 1;
  156. }

  157. /***定時(shí)基準(zhǔn)***/
  158. void TIMER1() interrupt 3 using 1
  159. {
  160. static uint8_t _num = 0, _second_num = 0;

  161. TL1 = 0x00;
  162. TH1 = 0x4C;

  163. //1秒鐘
  164. _num++;
  165. if(_num == 20)
  166. {
  167.   _second_num++;
  168.   _num = 0;
  169. }

  170. //1分鐘
  171. if(_second_num == 60)
  172. {
  173.   Timing--;
  174.   _second_num = 0;
  175. }

  176. //定時(shí)時(shí)間到  關(guān)電關(guān)顯示關(guān)定時(shí)
  177. if(Timing == 0)
  178. {
  179.   TurnOffPower();
  180.   BUZZER(1);
  181. }
  182. }

  183. /***開(kāi)電源***/
  184. void TurnOnPower()
  185. {
  186. P23 = 0;
  187. PowerON = 1;
  188. }

  189. /***關(guān)電源***/
  190. void TurnOffPower()
  191. {
  192. P23 = 1;
  193. TurnOffTiming();
  194. PowerON = 0;
  195. }

  196. /***開(kāi)定時(shí)***/
  197. void TurnOnTiming()
  198. {
  199. TR1 = 1;
  200. Timing = DefaultTiming;
  201. TimingON = 1;
  202. }

  203. /***關(guān)定時(shí)***/
  204. void TurnOffTiming()
  205. {
  206. TR1 = 0;
  207. TimingON = 0;
  208. }

  209. void Delay50ms()  [url=]//@11.0592MHz[/url]
  210. {
  211. unsigned char i, j, k;
  212. i = 3;
  213. j = 26;
  214. k = 223;
  215. do
  216. {
  217.   do
  218.   {
  219.    while (--k);
  220.   } while (--j);
  221. } while (--i);
  222. }

  223. void Delay500ms()  [url=]//@11.0592MHz[/url]
  224. {
  225. unsigned char i, j, k;
  226. i = 22;
  227. j = 3;
  228. k = 227;
  229. do
  230. {
  231.   do
  232.   {
  233.    while (--k);
  234.   } while (--j);
  235. } while (--i);
  236. }

  237. /***蜂鳴器***/
  238. void BUZZER(uint8_t type)
  239. {
  240. switch(type)
  241. {
  242.   case 0:
  243.    P34 = 1;
  244.    Delay50ms();
  245.    P34 = 0;
  246.    break;
  247.   case 1:
  248.    P1 = 0xff;
  249.    P34 = 1;
  250.    Delay500ms();
  251.    P34 = 0;
  252.    Delay500ms();
  253.    P34 = 1;
  254.    Delay500ms();
  255.    P34 = 0;
  256.    Delay500ms();
  257.    P34 = 1;
  258.    Delay500ms();
  259.    P34 = 0;
  260.    break;
  261. }
  262. }
復(fù)制代碼


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

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产日本精品视频 | 欧美在线视频一区二区 | 国产激情91久久精品导航 | 日韩一区二区三区av | 日韩综合网| 99re| 亚洲成人网在线 | 久久精品中文字幕 | 91极品视频 | 91色在线| 97精品国产97久久久久久免费 | 午夜精品在线观看 | 日韩精品999 | 久久精品免费观看 | 亚洲第一中文字幕 | 久久久久久国产精品 | 国产精品国产三级国产aⅴ无密码 | 国产成人综合一区二区三区 | 网站国产 | 福利一区在线观看 | 久久久视频在线 | 久久草视频 | 在线免费看毛片 | 欧美日韩视频在线 | 精品欧美一区二区中文字幕视频 | 日日夜夜精品视频 | 亚洲欧美综合精品久久成人 | 国产97视频在线观看 | 久久aⅴ乱码一区二区三区 亚洲国产成人精品久久久国产成人一区 | 亚洲免费一区二区 | 欧美一级二级三级视频 | 九色在线观看 | 欧美日韩专区 | 久久久性 | 911精品美国片911久久久 | 久久av一区二区三区 | 成人一级黄色毛片 | 日韩在线精品视频 | 一区二区电影 | 亚洲日本激情 | 日操夜操 |