欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 單片機程序中如何加一個喇叭,按一個按鍵就響一下那種,求思路 [打印本頁]

作者: kanadexiw    時間: 2021-1-2 22:07
標題: 單片機程序中如何加一個喇叭,按一個按鍵就響一下那種,求思路
單片機程序中如何加一個喇叭,按一個按鍵就響一下那種,最好再加一個能撤銷輸入錯誤的功能


單片機源程序如下:
  1. #include<Reg52.h>
  2. int SELECT[8]={0X7F,0XBF,0XDF,0XEF,0XF7,0XFB,0XFD,0XFE};         //位選數組
  3. int LED[17]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0X77,0X7C,0X39,0X5E,0X79,0X71,0X40};
  4. //LED數碼管字形碼集合數組
  5. int SELECT1[2][4]={0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80};//篩選異或結果集合數組
  6. int DISPLAY[8]={0X40,0X40,0X40,0X40,0X40,0X40,0X40,0X40};//初始化顯示數組
  7. int flag;

  8. void delay(int ms)
  9. {
  10.         int i,j;
  11.         for(i=ms;i>0;i--)
  12.                 for(j=110;j>0;j--);        
  13. }
  14. //延時函數 (1ms)

  15. void display(int wei,int L[])//wei為位選數目
  16. {         
  17.         int k;
  18.         for(k=0;k<wei;k++){
  19.                 P0=SELECT[wei-1-k];
  20.                 P2=L[k];
  21.                 delay(1);
  22.                 P2=0X00;//消隱
  23.         }
  24. }//顯示函數——P0位選,P2段選

  25. int button(int pp,int new)//p1為0X0F(篩選行)或0XF0(篩選列)
  26. {        int a,p,q,m;//new為當前P1端口按鍵狀態,a為異或結果,p、q為循環計數變量,m為所在行、列
  27.         if(new==pp)
  28.                 {flag=0;return flag;}        //未有按鍵按下標志
  29.         else{
  30.                 delay(1);
  31.                 if(new!=pp)
  32.                 {        
  33.                         a=new^pp;
  34.                         for(p=0;p<2;p++)
  35.                                 for(q=0;q<4;q++)
  36.                                         if(SELECT1[p][q]==a) m=q+1;        //遍歷異或結果集合數組后找到所在行、列
  37.                         }
  38.                 return m;
  39.                 }//篩選出行或列
  40. }//判斷按鍵所在行列位置,P1為按鍵接口端

  41. void main()
  42. {        int x,y,sum,n,temp;//x為行,y為列,sum為鍵值
  43.         while(1){
  44.         P1=0X0F;temp=P1;
  45.         x=button(0X0F,temp);
  46.         P1=0XF0;temp=P1;//用于判斷是否是新的按鍵值
  47.         y=button(0XF0,temp);
  48.         if(y==0)
  49.                 display(8,DISPLAY);
  50.         else{
  51.                 flag++;
  52.                 sum=4*(x-1)+(y-1);
  53.                 if(flag==1)
  54.                         for(n=0;n<7;n++)
  55.                                 DISPLAY[n]=DISPLAY[n+1];
  56.                         DISPLAY[7]=LED[sum];//更改顯示數組
  57.                 display(8,DISPLAY) ;
  58.         }
  59.         }
  60. }
復制代碼



作者: asdaasq    時間: 2021-1-2 22:57
單看原理圖來說,單片機IO的驅動能力有限,最好加個三極管來驅動一下;驅動程序上面,直接高電平低電平控制就行了,至于按一個按鍵響一下,你就做個判斷,按下了就拉高喇叭的引腳電平不就行了,有疑問的話再問
作者: 盧盧    時間: 2021-1-3 01:08
接喇叭沒試過,蜂鳴器就試過,但是單片機io口供電不足以驅動,得外接電源,同時得接3極管以達到驅動效果,至于怎么驅動網上有很多
作者: suncat0504    時間: 2021-1-3 12:31
如果選擇無源的喇叭,需要自己組織輸出給喇叭的方波,用來實現發聲,比如“嘟”這樣的聲音,注意:需要加設驅動電路,比如三極管。
如果是有源的喇叭,那么只需要控制加載/關閉喇叭的電源即可。

作者: kanadexiw    時間: 2021-1-3 12:38
能否告知為什么這個電路沒有排阻,沒有驅動,他為什么還可以運行
作者: glinfei    時間: 2021-1-3 13:50
kanadexiw 發表于 2021-1-3 12:38
能否告知為什么這個電路沒有排阻,沒有驅動,他為什么還可以運行

不就是沒有上拉電阻嘛,沒關系這是在模擬的,主要看人品。
作者: kanadexiw    時間: 2021-1-3 15:38
可是沒有驅動就很神奇
作者: wwh2382    時間: 2021-1-3 21:45
本帖最后由 wwh2382 于 2021-1-4 08:22 編輯
kanadexiw 發表于 2021-1-3 15:38
可是沒有驅動就很神奇

proteus替你想到了。這是不是很適合新手?另外可以在有限的頁面中塞進更多的東西,畢竟只是驗證一下思路,不是玩真的。
作者: wulin    時間: 2021-1-4 13:41
樓主找的這個矩陣按鍵程序寫的貌似高大上,其實對于初學者既不易讀懂,也不易修改添加功能。給你一個示例,有按鍵提示音和撤銷輸入錯誤的功能。希望對你有所幫助。


矩陣鍵盤數碼管顯示 仿真.zip (155.8 KB, 下載次數: 5)






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