新聞中心

我的MIDI鍵盤程序

作者: 時間: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; //開始的時間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;//臨時kb_cs=0x01; //00000001 00000010while (i!=8){ts=kbtime;v_74hc164WriteData_f(0x00);//關(guān)掉前排段選v_74hc164WriteData_f(kb_cs);//輸出后排段選//高在前,低在后//以下代碼輸出下排力度檢測的信號io_74hc165_SH_HIGH //拉高并行置數(shù)outa=v_74hc165ReadData_f(); //讀入輸出io_74hc165_SH_LOW //拉低并行置數(shù)//結(jié)束,以下代碼輸出前排檢測開關(guān)的信號initial_keyboard();//保險點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)掉//與原來的鍵值進行比較~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; //后排//原理:在琴鍵下面有兩個開關(guān),順序為K1,K2。按照順序接通。只能兩個全導(dǎo)通/兩個全關(guān)斷,或者只有K1導(dǎo)通。在K1導(dǎo)通的時候lkb&csp發(fā)生變化并且在前排鍵上也發(fā)生變化//所以程序會在一個2維數(shù)組中記錄閉合的時間,然后繼續(xù)掃過去。等到第二次掃到這組鍵的話while(j!=8){if ((lkb&csp)!=0) // 前排觸點是否有變化{ if ((outb&csp)!=0){//前排的按鍵按下了count_begin[i][j]=ts;}else{//前排鍵松開了就復(fù)原黑名單temp=0x01;temp=temp<blacklist_time){//超時了temp=0x01;temp=temp<blacklist_time){//超時了temp=0x1;temp=temp<

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

本文引用地址:http://m.butianyuan.cn/article/201611/323461.htm

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

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

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


上一頁 1 2 3 下一頁

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

評論


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

關(guān)閉