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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

如何修改單片機程序 按鍵增加蜂鳴器聲音等

[復制鏈接]
跳轉到指定樓層
樓主
300黑幣
下了個程序和仿真,想改一下里面內容
想修改成:
1因為原的按鍵按它是沒有聲音的   想改成所有的按鍵都有蜂鳴器聲音     按一次響一次  

2按開始定時就開始蜂鳴器就跟著秒滴滴響,數碼管到10秒蜂鳴器節奏就越來越快,到2秒 蜂鳴器就一直響

加個led和蜂鳴器一樣工作


麻煩大哥大姐了  我就想玩一下
代碼:  也有附件
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #include<absacc.h>           //頭文件
  4. #define ui unsigned int
  5. #define uc unsigned char   //宏定義

  6. uc code tab1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};           //碼表0~9
  7. uc code tab2[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};           //碼表帶點0~9
  8. sbit jiabaiwei=P1^0;        //加百位按鍵(分加)
  9. sbit daojishi=P1^1;                //倒計時
  10. sbit zhanting=P1^2;                //暫停
  11. sbit jiashiwei=P1^3;        //加十位(秒十位)
  12. sbit jiagewei=P1^4;                //加個位(秒個位)
  13. sbit baojing=P3^7;                //蜂鳴器
  14. bit flag1;        //標志位

  15. uc n;
  16. char qian,bai,shi,ge,miao,fen;//變量

  17. void delay(ui k)   //延時函數
  18. {
  19.         ui i,j;
  20.         for(i=0;i<k;i++)
  21.                 for(j=0;j<10;j++);
  22. }

  23. void init()           //初始化函數
  24. {
  25.         TMOD=0x01;          //定時器0工作方式1
  26.         EA=1;                  //開總中斷
  27.         ET0=1;                  //定時器0中斷開
  28.         TH0=0x3c;
  29.         TL0=0xb0;          //附初值
  30.         flag1=1;          //變量附1
  31. }

  32. void xianshi()          //顯示子函數
  33. {
  34.         qian=fen/10;  //分十位
  35.         bai=fen%10;          //分個位
  36.         shi=miao/10;  //秒十位
  37.         ge=miao%10;          //秒個位
  38.         P0=0x00;
  39.         P2=0xf7;           //讓數碼管第一個位亮(送位選信號)
  40.         P0=tab1[ge];   //送段
  41.         delay(10);           //延時
  42.         P0=0x00;
  43.         P2=0xfb;           //讓數碼管第二個位亮(送位)
  44.         P0=tab1[shi];  //送位選信號
  45.         delay(10);           //延時
  46.         P0=0x00;
  47.         P2=0xfd;           //讓數碼管第三個位亮(送位選信號)
  48.         P0=tab2[bai];  //送位選信號
  49.         delay(10);           //延時
  50.         P0=0x00;
  51.         P2=0xfe;           //讓數碼管第四個位亮(送位選信號)
  52.         P0=tab1[qian]; //送位選信號
  53.         delay(10);           //延時
  54.         P0=0x00;
  55. }

  56. void anjian()          //按鍵子函數
  57. {
  58.         if(jiabaiwei==0)   //加百位按鍵(分加)
  59.         {
  60.                 delay(30);           //延時去抖
  61.                 if(jiabaiwei==0)   //確定按鍵按下
  62.                 {
  63.                         fen=fen+1;          //分自加
  64.                         if(fen>59)          //如果分大于59
  65.                         fen=0;                  //分歸零
  66.                 }
  67.                 while(!jiabaiwei); //等待按鍵釋放
  68.         }
  69.         else if(daojishi==0)
  70.         {
  71.                 delay(30);           //延時去抖
  72.                 if(daojishi==0)            //確定按鍵按下
  73.                 {
  74.                         if((miao!=0)||(fen!=0))        //如果分和秒不同時等于0
  75.                         TR0=1;                         //定時器0開                 
  76.                         flag1=1;                 //開始倒計時標志位
  77.                 }
  78.                 while(!daojishi); //等待按鍵釋放
  79.         }
  80.         else if(zhanting==0)        //如果暫停按鍵按下
  81.         {
  82.                 delay(30);                 //延時去抖
  83.                 if(zhanting==0)          //確定按鍵按下
  84.                 {
  85.                         TR0=0;                  //關定時器
  86.                 }
  87.                 while(!zhanting); //等待按鍵釋放
  88.         }
  89.         else if(jiashiwei==0)         //如果秒十位加按鍵按下
  90.         {
  91.                 delay(30);          //延時去抖
  92.                 if(jiashiwei==0) //確定按鍵按下
  93.                 {
  94.                         miao=miao+10;  //秒自加10
  95.                         if(miao>59)                //如果秒大于59
  96.                         miao=miao%10;   //秒取余
  97.                 }
  98.                 while(!jiashiwei); //等待按鍵釋放
  99.         }
  100.         else if(jiagewei==0)   //如果加秒個位的按鍵按下
  101.         {
  102.                 delay(30);           //延時去抖
  103.                 if(jiagewei==0)          //確定按鍵按下
  104.                 {
  105.                         miao=miao+1;   //秒+1
  106.                         if(miao>59)                //如果秒大于59
  107.                         {
  108.                         miao=0;                        //秒歸零
  109.                         fen++;                        //分+1
  110.                         }
  111.                 }
  112.                 while(!jiagewei); //等待按鍵釋放
  113.         }
  114.                
  115. }

  116. void main()                         //主函數
  117. {
  118.         init();                        //初始化函數
  119.         while(1)
  120.         {
  121.                 anjian();          //按鍵函數
  122.                 xianshi();          //顯示函數
  123.         }
  124. }

  125. void zhongduan() interrupt 1 //定時器0
  126. {
  127.         TH0=0x3c;
  128.         TL0=0xb0;          //重附初值50ms
  129.         n++;
  130.         if(n>=20)          //如果到1s(n=20就是1s的時間)
  131.         {
  132.                 n=0;                                                 //n 清零
  133.                 if(flag1==1)                                //如果 flag1等于1的時候
  134.                 {
  135.                         miao--;
  136.                         if(miao<0)
  137.                         {
  138.                                 if(fen>0)
  139.                                 {
  140.                                         fen--;
  141.                                         miao=59;
  142.                                 }
  143.                                 else
  144.                                 {
  145.                                         fen=miao=0;
  146.                                 }
  147.                         }
  148.                         
  149.                         if((miao<=10)&&(fen==0)) //如果秒小于10并且分等于0
  150.                         {
  151.                                 baojing=~baojing;        //報警取反
  152.                                 if(miao==0)                        //如果秒等于1
  153.                                 {        
  154.                                         flag1=0;                 
  155.                                     miao=0;                        //秒清零
  156.                                         fen=0;                         //分清零
  157.                                         TR0=0;                        //關定時器
  158.                                         baojing=1;                //報警關
  159.                                 }
  160.                         }
  161.                 }
  162.         }
  163. }
復制代碼



51hei截圖_20230318001335.png (30.31 KB, 下載次數: 91)

51hei截圖_20230318001335.png

屏幕截圖 2023-03-18 002342.jpg (233.69 KB, 下載次數: 87)

屏幕截圖 2023-03-18 002342.jpg

程序 仿真.zip

77.85 KB, 下載次數: 9

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

使用道具 舉報

沙發
ID:332444 發表于 2023-3-18 10:21 | 只看該作者
這不是花20買到正確答案了?又到這里問。類似這種也就是完成學習任務,理解原理,不用精準定時的示例也是可以的,之下不用定時器荔枝可以參考,當然寫按鍵控制分鐘秒鐘不是難事,不過這里沒寫,主要是實現蜂鳴器間隔逐漸變快的原理。http://www.zg4o1577.cn/bbs/dpj-227503-1.html
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品a久久久久 | 亚洲视频在线观看一区二区三区 | 成人精品视频在线观看 | 国产福利91精品一区二区三区 | 欧美极品一区二区 | 亚洲视频区 | 中文字幕11页 | 在线日韩av电影 | 一区二区三区欧美在线 | 9191在线观看 | 日日夜夜视频 | 国产在线激情视频 | www.成人.com | 国产精品a久久久久 | 国产精品视频一二三区 | 亚洲一区二区三区四区五区午夜 | www.青青草| 日韩一三区 | 欧美精品一区二区三区在线播放 | 黑人精品欧美一区二区蜜桃 | 亚洲一区二区三区在线 | 狠狠撸在线视频 | 免费在线观看黄视频 | 中文字幕成人在线 | 99久久亚洲 | 中文字幕亚洲欧美 | 国产精品视频在 | 久久亚洲美女 | 欧美最猛黑人xxxⅹ 粉嫩一区二区三区四区公司1 | 亚洲国产精品久久久 | 中文字幕日本一区二区 | 日韩一区二区三区视频在线播放 | 极品粉嫩国产48尤物在线播放 | h片在线免费看 | 97超碰在线播放 | 日韩欧美综合在线视频 | 91免费观看 | 精品欧美一区二区三区久久久 | 亚洲国产一区在线 | 日韩免费视频一区二区 | 久热精品视频 |