亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

標(biāo)題: 單片機(jī)定時(shí)倒計(jì)時(shí)提醒制作 附代碼 [打印本頁]

作者: 一片一城    時(shí)間: 2020-11-7 23:07
標(biāo)題: 單片機(jī)定時(shí)倒計(jì)時(shí)提醒制作 附代碼
學(xué)了一段時(shí)間單片機(jī),這兩天做了個(gè)實(shí)用電路,最長99分鐘定時(shí)倒計(jì)時(shí)提醒器。缺陷是電路開始工作后,一分鐘減一個(gè)數(shù)再無其它動(dòng)作。給啟動(dòng)按鈕加了聲音,否則電路是否已經(jīng)啟動(dòng)都看不出來。時(shí)間到有響聲提醒。


上面兩個(gè)按鈕調(diào)節(jié)十分與分,每次加十分鐘和加一分鐘。
晶振下面是復(fù)位按鈕,右下角是啟動(dòng)按鈕。
下面壓縮包中有Proteus仿真文件與C代碼。

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機(jī)源程序如下:
  1. #include<reg52.h>  //自制最長99分鐘定時(shí)倒計(jì)時(shí)提醒器 2020-11-06
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit gewei0=P2^6;   //允許個(gè)位顯示。
  5. sbit shiwei0=P2^7;  //允許十位顯示。
  6. sbit key1=P2^5;  //鍵1,每按加10分鐘。
  7. sbit key2=P2^4;  //鍵2,每按加1分鐘。
  8. sbit key3=P2^3;  //鍵3,開倒計(jì)時(shí)或暫停。
  9. sbit beep=P2^2;
  10. uchar k;
  11. unsigned int s;
  12. void delayms(uchar);
  13. void delay(uint z);
  14. void keyscan();
  15. void display(uchar);
  16. void init();
  17. void xiang1();
  18. void xiang2();
  19. uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

  20. void main()
  21. { init();     //調(diào)“初始化”。
  22.   while(1)
  23.   { keyscan();  //調(diào)“監(jiān)測按鍵”。
  24.     display(k); //調(diào)“顯示”。
  25. }}

  26. void keyscan() //監(jiān)測按鍵。
  27. { if(key2==0)
  28.   { delayms(26);
  29.     if(key2==0)
  30.     { k++;
  31.       if(k>=99) //k==99與中斷那里一致。
  32.          k=0;
  33.       while(!key2); //抬起按鍵key2時(shí),顯示出k+2的結(jié)果。
  34.     }
  35.   }

  36.   if(key1==0)
  37.   { delayms(26);
  38.     if(key1==0)
  39.     { k=k+10;
  40.       if(k>=99) //k==99與中斷那里一致。
  41.          k=0;
  42.       while(!key1);
  43.     }
  44.   }
  45.   if(key3==0)
  46.   { delayms(26);
  47.     if(key3==0)
  48.     {   xiang1(); //啟動(dòng)“倒計(jì)時(shí)”提示。
  49.       delayms(246);
  50.       TR0=~TR0;
  51.       while(!key3);
  52. }}}

  53. void delayms(uchar z) //延時(shí)。
  54. { uchar i,j;
  55.   for(i=z;i>0;i--)
  56.     for(j=110;j>0;j--); }

  57. void delay(uint z)
  58. {  while(z--); }

  59. void display(uchar k) //顯示。
  60. { uchar shi,ge;
  61.   shi=k/10;
  62.   ge =k%10;

  63.   gewei0=0;
  64.   P0=table[ge];
  65.   delayms(21);
  66.   gewei0=1;

  67.   shiwei0=0;
  68.   P0=table[shi];
  69.   delayms(21);
  70.   shiwei0=1;
  71. }

  72. void init() //初始化。設(shè)置中斷與定時(shí)器的值。
  73. { TMOD=0x01;
  74.   TH0=(65536-50000)/256;  //晶振12MHz,定時(shí)50ms。
  75.   TL0=(65536-50000)%256;
  76.   EA=1;
  77.   ET0=1;
  78. }

  79. void xiang1() //計(jì)時(shí)開始提示音。
  80. {
  81.   uchar q;
  82.   for(q=0;q<100;q++)
  83.   {
  84.     beep=0;
  85.     delayms(6);
  86.     beep=1;
  87.     delayms(4);
  88.   }
  89.     delayms(64);
  90. }

  91. void xiang2() //計(jì)時(shí)結(jié)束提示音--嘟嘟。
  92. {
  93.   unsigned int m;
  94.   uchar n;
  95.   for(n=0;n<2;n++)
  96.   {
  97.     for(n=0;n<111;n++)
  98.     {
  99.       beep=0;
  100.       delay(107);
  101.       beep=1;
  102.       delay(107);
  103.     }

  104.    for(m=0;m<3456;m++);
  105.     for(n=0;n<111;n++)
  106.     {
  107.       beep=0;
  108.       delay(107);
  109.       beep=1;
  110.       delay(107);
  111.     }
  112.    for(m=0;m<33333;m++);
  113.   }
  114. ……………………

  115. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
仿真文件與C代碼.rar (17.21 KB, 下載次數(shù): 50)


作者: jovew    時(shí)間: 2020-11-8 09:19
可以把時(shí)間修改為999分鐘嗎?

作者: 一片一城    時(shí)間: 2020-11-8 11:09
jovew 發(fā)表于 2020-11-8 09:19
可以把時(shí)間修改為999分鐘嗎?

可以改,但首先得改電路部分。
作者: wasen    時(shí)間: 2020-11-8 11:41
程序和電路可以再優(yōu)化一下的。而且如果要做最好做成成品電路吧,這種做好后要拿來用又太亂,不用又浪費(fèi)。。把電路板做小焊接好就可以了。
作者: 一片一城    時(shí)間: 2020-11-8 16:40
提示音代碼有誤,修改如下:

void xiang2() //計(jì)時(shí)結(jié)束提示音--嘟嘟。
{
  unsigned int m;
  uchar n,i;
  for(i=2;i>0;i--)
  {
    for(n=123;n>0;n--)
    {
      beep=0;
      delay(88);
      beep=1;
      delay(88);
    }

   for(m=3456;m>0;m--);
    for(n=123;n>0;n--)
    {
      beep=0;
      delay(88);
      beep=1;
      delay(88);
    }
   for(m=56789;m>0;m--);
  }
}
作者: 一片一城    時(shí)間: 2020-11-8 16:50
wasen 發(fā)表于 2020-11-8 11:41
程序和電路可以再優(yōu)化一下的。而且如果要做最好做成成品電路吧,這種做好后要拿來用又太亂,不用又浪費(fèi)。。 ...

想做出個(gè)恰當(dāng)漂亮的面板太難,并且飛線太多既不好看出問題時(shí)又不方便檢查。
作者: 一片一城    時(shí)間: 2020-11-26 11:13
在中斷中添加了可以實(shí)現(xiàn)秒指示作用的代碼。

void time0()interrupt 1  //0中斷,中斷序號1。
{ uint zxc=65432;
  TH0=0xb1; //晶振12MHz,定時(shí)20ms。
  TL0=0xe0;
  s++;
  if(m==25)  //作秒指示。
  {
    m=0;
    led=~led;}
  m++;  //uchar m; 定義為全局變量。
  if(s==3000) //3000×20ms=60000ms÷1000ms=60s(1分鐘)
  { s=0;   //歸零。等待下個(gè)1分鐘。
    k--; } //倒計(jì)時(shí),減1分鐘。

  if(k<=0) //如果到0,發(fā)聲,關(guān)閉中斷。
  {
    k=0;
    xiang2();
    TR0=0;   //預(yù)定時(shí)間到,關(guān)中斷0,停止。
}}


作者: 6313    時(shí)間: 2021-7-14 10:20
再加個(gè)到時(shí)間輸出一個(gè)端口,吸合繼電器或者釋放繼電器
作者: 6313    時(shí)間: 2021-7-17 16:12
我把繼電器輸出端口p3^4=1寫在TR0=0;后面的下一句,應(yīng)該是應(yīng)該是提示音全部結(jié)束,再關(guān)斷繼電器。可是現(xiàn)在是繼電器關(guān)斷后,后面還響兩聲,應(yīng)該怎么改?
作者: 6313    時(shí)間: 2021-7-17 16:12
要求,倒計(jì)時(shí)聲音全部響完,再關(guān)斷繼電器




歡迎光臨 (http://www.denmoz.com/bbs/) Powered by Discuz! X3.1