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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3544|回復: 9
收起左側

求助,基友51單片機定時器程序,我自己做了一個protues仿真圖,但是不會寫程序

[復制鏈接]
回帖獎勵 50 黑幣 回復本帖可獲得 10 黑幣獎勵! 每人限 1 次
ID:350393 發(fā)表于 2018-6-19 20:56 | 顯示全部樓層 |閱讀模式
9NML3DR(SI2GJZ3D(R1MF(E.png
做完有額外酬謝,這周星期5要交作業(yè)了,最近幾天睡覺都不睡不好,看了幾天C語音還是一臉懵逼,希望能幫幫忙

dadad.rar

28.57 KB, 下載次數(shù): 6

評分

參與人數(shù) 1黑幣 +5 收起 理由
345681892 + 5 很給力!

查看全部評分

回復

使用道具 舉報

ID:350393 發(fā)表于 2018-6-19 23:38 | 顯示全部樓層
或者有人知道怎么改這個程序讓它響30S嗎?比如說在6點30分響后讓它響30S
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. #define KEY_IO P3
  5. #define LCD_IO P0
  6. //以下是C調(diào)低音的音頻宏定義
  7. #define L1  262    //將"L1"宏定義為低音"1"的頻率262Hz                        時間是1/262=3826/2 us          取半周期
  8. #define L2  286    //將"L2"宏定義為低音"2"的頻率286Hz
  9. #define L3  311    //將"L3"宏定義為低音"3"的頻率311Hz
  10. #define L4  349    //將"L4"宏定義為低音"4"的頻率349Hz
  11. #define L5  392    //將"L5"宏定義為低音"5"的頻率392Hz
  12. #define L6  440    //將"l_a"宏定義為低音"6"的頻率440Hz
  13. #define L7  494    //將"L7"宏定義為低音"7"的頻率494Hz
  14. //以下是C調(diào)中音的音頻宏定義
  15. #define Z1    523     //將"Z1"宏定義為中音"1"的頻率523Hz
  16. #define Z2    587     //將"Z2"宏定義為中音"2"的頻率587Hz
  17. #define Z3           659     //將"Z3"宏定義為中音"3"的頻率659Hz
  18. #define Z4    698     //將"Z4"宏定義為中音"4"的頻率698Hz
  19. #define Z5    784     //將"Z5"宏定義為中音"5"的頻率784Hz
  20. #define Z6    880     //將"Z6"宏定義為中音"6"的頻率880Hz
  21. #define Z7    987     //將"Z7"宏定義為中音"7"的頻率523H      
  22. //以下是C調(diào)高音的音頻宏定義
  23. #define H1  1046    //將"H1"宏定義為高音"1"的頻率1046Hz
  24. #define H2  1174    //將"H2"宏定義為高音"2"的頻率1174Hz
  25. #define H3  1318    //將"H3"宏定義為高音"3"的頻率1318Hz
  26. #define H4  1396    //將"H4"宏定義為高音"4"的頻率1396Hz
  27. #define H5  1567    //將"H5"宏定義為高音"5"的頻率1567Hz
  28. #define H6  1760    //將"H6"宏定義為高音"6"的頻率1760Hz
  29. #define H7  1975    //將"H7"宏定義為高音"7"的頻率1975Hz


  30. sbit k4=P3^3;
  31. sbit sound=P1^6;    //蜂鳴器
  32. unsigned int C;     //儲存定時器的定時常數(shù)



  33. sbit LCD_RS = P2^0;
  34. sbit LCD_RW = P2^1;
  35. sbit LCD_EN = P2^2;
  36. sbit LED = P2^4;


  37. void music(void);



  38. unsigned char u,t;
  39. bit new_s, modify = 0;
  40. char t0, sec = 40, min = 29, hour = 6;
  41. char code LCD_line1[] = "HAPPY   EVEDAY";
  42. char code LCD_line2[] = "Timer: 00:00:00 ";
  43. char Timer_buf[] = "23:59:50";
  44. //---------------------------------------------------
  45. void delay(uint z)
  46. {
  47.     uint  x, y;
  48.     for(x = z; x > 0; x--)  for(y = 100; y > 0; y--);
  49. }
  50. void delay1()               
  51.    {
  52.      unsigned char i,j;
  53.           for(i=0;i<100;i++)
  54.             for(j=0;j<250;j++)
  55.                              ;
  56.    }
  57. //---------------------------------------------------
  58. void W_LCD_Com(uchar com)      //寫指令
  59. {
  60.     LCD_RS = 0;  LCD_IO = com; // LCD_RS和R/W都為低電平時,寫入指令
  61.     LCD_EN = 1;  delay(5); LCD_EN = 0; //用EN輸入一個高脈沖
  62. }
  63. //---------------------------------------------------
  64. void W_LCD_Dat(uchar dat)      //寫數(shù)據(jù)
  65. {
  66.     LCD_RS = 1;  LCD_IO = dat; // LCD_RS為高、R/W為低時,寫入數(shù)據(jù)
  67.     LCD_EN = 1;  delay(5); LCD_EN = 0; //用EN輸入一個高脈沖
  68. }
  69. //---------------------------------------------------
  70. void W_LCD_STR(uchar *s)       //寫字符串
  71. {
  72.     while(*s)  W_LCD_Dat(*s++);
  73. }
  74. //---------------------------------------------------
  75. void W_BUFF(void)              //填寫顯示緩沖區(qū)
  76. {
  77.     Timer_buf[7] = sec % 10 + 48;/*秒除以10,并取余數(shù)*/ Timer_buf[6] = sec / 10 + 48; /*秒除以10,并取整數(shù)*/      
  78.     Timer_buf[4] = min % 10 + 48;                       Timer_buf[3] = min / 10 + 48;
  79.     Timer_buf[1] = hour % 10 + 48;                      Timer_buf[0] = hour / 10 + 48;
  80.     W_LCD_Com(0xc0 + 7); W_LCD_STR(Timer_buf);
  81. }
  82. //---------------------------------------------------
  83. uchar read_key(void)                                          //按鍵 判斷
  84. {
  85.     uchar  x1, x2;
  86.     KEY_IO = 255;
  87.     x1 = KEY_IO;                                                                         //          if (new_s) {
  88.     if (x1 != 255) {                                                                //          new_s = 0;    sec++;  sec %= 60;
  89.       delay(100);                                                                   //          if(!sec)  {   min++;  min %= 60;
  90.       x2 = KEY_IO;                                                                  //       if(!min)  { hour++; hour %= 24;}        
  91.       if (x1 != x2)  return 255;                                 //                  }
  92.       while(x2 != 255) x2 = KEY_IO;                            //                  W_BUFF();
  93.       if      (x1 == 0x7f)  return 0;
  94.       else if (x1 == 0xbf)  return 1;
  95.       else if (x1 == 0xdf)  return 2;                        
  96.       else if (x1 == 0xef)  return 3;
  97.      
  98.     }
  99.     return 255;
  100. }
  101. //---------------------------------------------------
  102. void Init()
  103. {
  104.     LCD_RW = 0;
  105.     W_LCD_Com(0x38); delay(50);
  106.     W_LCD_Com(0x0c);
  107.     W_LCD_Com(0x06);
  108.     W_LCD_Com(0x01);
  109.     W_LCD_Com(0x80); W_LCD_STR(LCD_line1);
  110.     W_LCD_Com(0xC0); W_LCD_STR(LCD_line2);
  111.     TMOD = 0x01;   //T0定時方式1   16位
  112.     TH0 = 0x4c;
  113.     TR0 = 1;       //啟動T0
  114.         
  115.     ET0 = 1;
  116.         ET1=1;
  117.     EA = 1;
  118. }

  119. //-----------------------------------------------------------
  120. void music(void)
  121.   {
  122.                                                                     
  123. //以下是《天空之城》簡譜         //每行對應一小節(jié)音符
  124.    unsigned  int code f[]={         Z6,Z7,/**/H1,Z7,H1,H3,/**/Z7,Z3,Z3,   /**/Z6,Z5,Z6,H1,/**/Z5,Z3,Z3,   /**/Z4,Z3,Z4,H1,
  125.                                        Z3,H1,H1,H1,/**/Z7,Z4,Z4,Z7,/**/Z7,Z6,Z7,   /**/H1,Z7,H1,H3,/**/Z7,Z3,Z3,   /**/Z6,Z5,Z6,H1,
  126.                                 Z5,      Z3,/**/Z4,H1,Z7,H1,/**/H2,H2,H2,H1,/**/H1,Z6,Z7,Z5,/**/Z6,H1,H2,   /**/H3,H2,H3,H5,
  127.                                                      H2,Z5,Z5,   /**/H1,Z7,H1,H3,/**/H3,         /**/Z6,H1,Z7,H2,/**/H1,Z5,Z5,   /**/H4,H3,H2,H1,
  128.                                                     H3,         /**/Z3,H3,      /**/H6,H5,H5,   /**/H3,H2,H1,H1,/**/H2,H1,H2,H5,/**/H3,H3,
  129.                                                     H6,H5,      /**/H3,H2,H1,H1,/**/H2,H1,H2,Z7,/**/Z6,Z6,Z7,   /**/Z6,      
  130.                                                                         0xff        }; //以0xff作為音符的結束標志                                       
  131. //以下是簡譜中每個音符的節(jié)拍
  132. //"4"對應4個延時單位,"2"對應2個延時單位,"1"對應1個延時單位
  133. unsigned char code JP[ ]={     4,4,  /**/12,4,8,8,   /**/20,4,4,     /**/12,4,8,8,   /**/20,4,4,     /**/12,4,4,12,
  134.                                                                   20,4,4,4,   /**/12,4,8,8,   /**/20,4,4,     /**/12,4,8,8,   /**/20,4,4,     /**/12,4,8,8,
  135.                                                                 32,      4, /**/8,4,6,8,    /**/4,4,4,16,   /**/8,4,6,8,    /**/24,4,4,     /**/12,4,8,8,
  136.                                                                 24,4,4,     /**/4,4,8,8,    /**/32,                        /**/4,8,8,6,    /**/12,4,16,    /**/8,8,8,8,
  137.                                                                 30,         /**/20,8,       /**/16,8,8,     /**/4,4,16,8,   /**/8,4,4,8,    /**/20,8,
  138.                                                                 16,16,      /**/4,20,8,     /**/8,4,4,8,    /**/20,4,4,     /**/32,
  139.                                                         };
  140.            EA=1;         //開總中斷
  141.            ET1=1;        //定時器T1中斷允許
  142.            TMOD &= 0x0f;
  143.        TMOD |= 0x00;    // 使用定時器T1的模式1(13位計數(shù)器)
  144.            TR1=1;
  145.            while(1)       //無限循環(huán)
  146.                  {
  147.                          u=0;   //從第1個音符f[0]開始播放
  148.               while(f[u]!=0xff)            //只要沒有讀到結束標志就繼續(xù)播放
  149.                            {
  150.               C=460830/f[u];           //
  151.               TH1=(8192-C)/32;   //可證明這是13位計數(shù)器TH0高8位的賦初值方法           5
  152.               TL1=(8192-C)%32;   //可證明這是13位計數(shù)器TL0低5位的賦初值方法
  153.               TR1=1;             //啟動定時器T0
  154.                                  for(t=0;t<JP[u];t++)  //控制節(jié)拍數(shù)
  155.                   delay1();          //延時1個節(jié)拍單位
  156.                                   TR1=0;                       //關閉定時器T1
  157.                               u++;                                                  //播放下一個音符
  158.                                  if(k4==0)                 //暫停按鍵
  159.                                  { delay(2);
  160.                                    if(k4==0)  
  161.                                         {                        
  162.                                          ET1=0;                        //  關      允許T1,相當于關音樂
  163.                                         }                        
  164.                                          break;
  165.                                          }
  166.                                                   ET1=1;           //為了不影響第二次播放音樂,再  開 允許T1
  167.                                   }   
  168.                                 sound=0;                                                               
  169.                         
  170.                            break;
  171.                 }                        
  172. }





  173. //---------------------------------------------------
  174. void main()
  175. {

  176.     uchar Key;
  177.     Init();
  178.     while(1)  
  179.         {
  180. //-------------------------------
  181.       
  182. //-------------------------------
  183.         if (!sec && min==30  && hour==6)
  184.                 { //整點報時                         //  可以自己定鬧鐘
  185.            music();
  186.                 }
  187.       
  188. //-------------------------------
  189.       Key = read_key();  //讀出按鍵
  190.       switch(Key)
  191.           {      //分別處理四個按鍵
  192.       case  0: modify = 1; break;
  193.       case  1: if(modify) {min++;  min %= 60;  W_BUFF(); break;}
  194.       case  2: if(modify) {hour++; hour %= 24; W_BUFF(); break;}
  195.       case  3: modify = 0; break;
  196.     }
  197. }
  198. }
  199. //---------------------------------------------------





  200. void timer0(void) interrupt 1  //T0中斷函數(shù), 50ms執(zhí)行一次           T0中斷等級是1  注意
  201. {

  202.     TH0 = 0x4c;
  203.     t0++; t0 %= 20;   //20, 一秒鐘
  204.     if(t0 == 0)  {new_s = 1; LED = ~LED;}


  205.         if (new_s)
  206.           { //如果出現(xiàn)了新的一秒, 修改時間
  207.         new_s = 0;    sec++;  sec %= 60;
  208.         if(!sec)                                                     // 如果SEC為零,說明滿了60秒,  進入下一步
  209.                 {   min++;  min %= 60;                  
  210.           if(!min)                                           // 如果MIN為零,說明滿了60分鐘,進入下一步
  211.                   { hour++; hour %= 24;
  212.                   }                  
  213.         }
  214.         W_BUFF();  //寫顯示
  215.     if(modify)  LED = 0;
  216. }
  217. }





  218. void Time1(void ) interrupt 3   //T1定時器的中斷等級要注意  是3
  219.   {
  220.     sound=!sound;      //將P3.7引腳輸出電平取反,形成方波  
  221.     TH1=(8192-C)/32;   //可證明這是13位計數(shù)器TH0高8位的賦初值方法
  222.     TL1=(8192-C)%32;   //可證明這是13位計數(shù)器TL0低5位的賦初值方法
  223.   }
復制代碼

回復

使用道具 舉報

ID:320306 發(fā)表于 2018-6-20 08:45 | 顯示全部樓層
30S,如果你對時間比較嚴格就用定時器,至標志位,不是很嚴格延時函數(shù)就可以了啊,而且也沒有要求滴滴滴滴的,你可以一直響啊 ,哈哈!!!
回復

使用道具 舉報

ID:350393 發(fā)表于 2018-6-20 10:45 | 顯示全部樓層
zsyzdx 發(fā)表于 2018-6-20 08:45
30S,如果你對時間比較嚴格就用定時器,至標志位,不是很嚴格延時函數(shù)就可以了啊,而且也沒有要求滴滴滴滴 ...

這個不是定時器了嗎?
回復

使用道具 舉報

ID:350393 發(fā)表于 2018-6-20 10:50 | 顯示全部樓層
zsyzdx 發(fā)表于 2018-6-20 08:45
30S,如果你對時間比較嚴格就用定時器,至標志位,不是很嚴格延時函數(shù)就可以了啊,而且也沒有要求滴滴滴滴 ...

大佬~就是上邊的程序改成鬧鈴響后30S后停止
回復

使用道具 舉報

ID:352193 發(fā)表于 2018-6-27 11:46 | 顯示全部樓層
大佬,搞定了嗎?
回復

使用道具 舉報

ID:240022 發(fā)表于 2018-6-27 14:28 | 顯示全部樓層
樓主解決了嗎?
回復

使用道具 舉報

ID:360302 發(fā)表于 2018-6-27 15:23 | 顯示全部樓層
程序不是一兩天就會寫的,我也正在學習
回復

使用道具 舉報

ID:360373 發(fā)表于 2018-6-27 16:21 | 顯示全部樓層
和我們的要求好像
回復

使用道具 舉報

ID:360356 發(fā)表于 2018-6-27 16:42 | 顯示全部樓層
到這里就對了
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久精品 | 91免费在线看 | 亚洲一区二区 | 亚洲啪啪一区 | 中文字幕在线视频观看 | 国产亚洲欧美另类一区二区三区 | 超碰国产在线 | 色综合视频 | 在线成人免费视频 | 欧美日韩一区二区在线 | 精品亚洲二区 | 久久久www成人免费精品 | 欧美在线视频一区二区 | 91九色porny首页最多播放 | 9久久精品| 精品久久久久久久久久久 | 成人一区二区视频 | 激情网站在线观看 | 中文字幕 亚洲一区 | 精精国产xxxx视频在线播放 | 综合国产在线 | 亚洲三区在线观看 | 久久国产精品72免费观看 | 国产在线视频网 | 国产亚洲欧美在线 | 久久精品在线播放 | 国产伦精品一区二区三区高清 | 91九色婷婷 | 日批的视频| 国产精品久久99 | 久久免费视频观看 | 伊人久久大香线 | 国产精品一区二区在线播放 | 成人免费视频观看 | 久久精品国内 | 国产精品美女久久久久久免费 | 日韩一区二区免费视频 | 日韩aⅴ在线观看 | 人人做人人澡人人爽欧美 | 成人精品在线观看 | 日韩欧美中文字幕在线观看 |