模拟电子琴C语言.docx

上传人:啊飒飒 文档编号:10216682 上传时间:2021-04-30 格式:DOCX 页数:6 大小:13.37KB
返回 下载 相关 举报
模拟电子琴C语言.docx_第1页
第1页 / 共6页
模拟电子琴C语言.docx_第2页
第2页 / 共6页
模拟电子琴C语言.docx_第3页
第3页 / 共6页
模拟电子琴C语言.docx_第4页
第4页 / 共6页
模拟电子琴C语言.docx_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《模拟电子琴C语言.docx》由会员分享,可在线阅读,更多相关《模拟电子琴C语言.docx(6页珍藏版)》请在三一文库上搜索。

1、#include MusInstru.h/* 键消抖延时函数 */void delay(void)uchar i;for (i=300;i0;i-);/* 键扫描函数 */uchar getkey(void)uchar scancode,tmpcode;if (P1&0xf0)=0xf0)return(0);scancode = 0xfe;while(scancode&0x10)!=0)/ 逐行扫描P1 = scancode;/ 输出行扫描码if (P1&0xf0)!=0xf0)/ 本行有键按下tmpcode = (P1&0xf0)|0x0f;/* 返回特征字节码,为1的位即对应于行和列 */

2、return(scancode)+(tmpcode);else scancode = (scancode1)|0x01;/ 行扫描码左移一位/* 定时器0中断服务子程序 */void time0_int(void) interrupt 1 using 0/* 设置计数初值 */ TH0 = STH0; TL0 = STL0; P36=P36; / 反相,产生输出脉冲/* 主程序 */void main()uchar key,k;TMOD = 0x01;/ T0,工作方式1ET0 = 1;EA = 1; while(1) P1 = 0xf0; / 发全0行扫描码if (P1&0xf0)!=0xf

3、0)/ 若有键按下delay();/ 延时去抖动if (P1&0xf0)!=0xf0)/ 延时后再判断一次,去除抖动影响key = getkey();/ 调用键盘扫描函数/ 根据获取的按键位置得到k值switch(key) case 0x11:/ 1行1列k = 0;break;case 0x21:/ 1行2列k = 1;break;case 0x41:/ 1行3列k = 2;break; case 0x81:/ 1行4列k = 3;break;case 0x12:/ 2行1列k = 4;break;case 0x22:/ 2行2列k = 5;break;case 0x42:/ 2行3列k =

4、 6;break;case 0x82:/ 2行4列k = 7;break;case 0x14:/ 3行1列k = 8;break;case 0x24:/ 3行2列k = 9;break;case 0x44:/ 3行3列k = 10;break;case 0x84:/ 3行4列k = 11;break;case 0x18:/ 3行4列k = 12;break;case 0x28:/ 3行4列k = 13;break;case 0x48:/ 3行4列k = 14;break;case 0x88:/ 3行4列k = 15;break;default:break;P36 = P36; / 反相/* 根据所得的k值设定计数器1的计数初值 */ STH0 = tabk/256; STL0 = tabk%256; TR0 = 1;/ 开始计数 P1 = 0xf0; / 发全0行扫描码while (P1&0xf0)!=0xf0)/ 若没有松开按键P1 = 0xf0;TR1 = 0;/ 若按键松开,则停止计数,不产生脉冲输出

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1