<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          我的MIDI鍵盤程序

          作者: 時(shí)間:2016-11-29 來源:網(wǎng)絡(luò) 收藏
          void initial_keyboard() //初始化鍵盤{v_74hc164WriteData_f(0x00);//關(guān)掉后排段選v_74hc164WriteData_f(0x00);//關(guān)掉前排段選}//keynumber[0]定義為第一排//keynumber[1]定義為第二排void scan_key(){uchar ts=0; //開始的時(shí)間uchar kb_cs; // 段選uchar i=0;uchar j=0; //循環(huán)變量uchar outa=0;uchar outb=0;uchar csp;uchar lkb,hkb;uchar atime;uchar temp;//臨時(shí)kb_cs=0x01; //00000001 00000010while (i!=8){ts=kbtime;v_74hc164WriteData_f(0x00);//關(guān)掉前排段選v_74hc164WriteData_f(kb_cs);//輸出后排段選//高在前,低在后//以下代碼輸出下排力度檢測(cè)的信號(hào)io_74hc165_SH_HIGH //拉高并行置數(shù)outa=v_74hc165ReadData_f(); //讀入輸出io_74hc165_SH_LOW //拉低并行置數(shù)//結(jié)束,以下代碼輸出前排檢測(cè)開關(guān)的信號(hào)initial_keyboard();//保險(xiǎn)點(diǎn)v_74hc164WriteData_f(kb_cs); //輸出前排段選v_74hc164WriteData_f(0x00); //關(guān)掉后排段選csp=0x01;//初始化指針io_74hc165_SH_HIGH //拉高并行置數(shù)outb=v_74hc165ReadData_f(); //讀入輸出io_74hc165_SH_LOW //拉低并行置數(shù)initial_keyboard();//全部關(guān)掉//與原來的鍵值進(jìn)行比較~lkb=outb^keynumber[0][i]; //前排與原來的鍵值比較hkb=outa^keynumber[1][i]; //后排與原來的鍵值比較// 1&1=1 1&0=0 0&1=0 0&0=0// 1^1=0 1^0=0 0^1=0 0^0=0所以用來做比較。有變化的就輸出1keynumber[0][i]=outb; //前排,記錄下新的鍵值keynumber[1][i]=outa; //后排//原理:在琴鍵下面有兩個(gè)開關(guān),順序?yàn)镵1,K2。按照順序接通。只能兩個(gè)全導(dǎo)通/兩個(gè)全關(guān)斷,或者只有K1導(dǎo)通。在K1導(dǎo)通的時(shí)候lkb&csp發(fā)生變化并且在前排鍵上也發(fā)生變化//所以程序會(huì)在一個(gè)2維數(shù)組中記錄閉合的時(shí)間,然后繼續(xù)掃過去。等到第二次掃到這組鍵的話while(j!=8){if ((lkb&csp)!=0) // 前排觸點(diǎn)是否有變化{ if ((outb&csp)!=0){//前排的按鍵按下了count_begin[i][j]=ts;}else{//前排鍵松開了就復(fù)原黑名單temp=0x01;temp=temp<blacklist_time){//超時(shí)了temp=0x01;temp=temp<blacklist_time){//超時(shí)了temp=0x1;temp=temp<

          全部源碼下載地址:http://www.51hei.com/f/mdid.rar
          編譯后約占用1K ROM。效率夠高~
          不過這個(gè)最后還要和主控ATmega8通信。
          還是半成品。

          本文引用地址:http://www.ex-cimer.com/article/201611/323461.htm

          做鍵盤也是要技術(shù)的。做電子琴更要技術(shù)。哇哈哈哈! 本程序的正式版本請(qǐng)看:http://www.51hei.com/mcu/1636.html

          89S52單片機(jī)的Flash ROM為8KByte.內(nèi)存為256Byte.

          PS:程序本來是分塊設(shè)計(jì)的。為了發(fā)上網(wǎng)就用cpp處理了下。include 全部被替換掉了。


          上一頁 1 2 3 下一頁

          關(guān)鍵詞: MIDI鍵盤程

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();