基于 51 单片机的电子琴完整版#include#include #define uint unsigned int#define uchar unsigned charsbit feng = P0^7; // 蜂鸣器uint FTemp;uint code tab[] = { //定时半周期的初始值 64021,64103,64260,64400, //低音 3 4 5 6 64524,64580,64684,64777, //低音 7,中音 1 2 3 64820,64898,64968,65030, //中音 4 5 6 7 65058,65110,65157,65178}; //高音 1 2 3 4//用扫描法读 P1 外接 4×4 键盘uchar Keyscan(void){ uchar i, j, temp, Buffer[4] = {0xfe, 0xfd, 0xfb, 0xf7}; for(j = 0; j < 4; j++) //循环四次,扫描四行 { P1 = Buffer[j]; //在低四位分别输出一个低电平 _nop_(); temp = 0x80; //计划先读出 P1
7 位 for(i = 0; i < 4; i++) //循环四次,检查四列 { if(
(P1& temp)) //从高四位,截取 1 位 { return (i + j * 4); //返回取得的按键值 } temp >>= 1; //换右边一位 } } return 16; //没有键按下就返回 16}void Main(void){ uchar Key_Value = 16, Key_Temp1, Key_Temp2;//读出的键值 TMOD = 0x01; //T0 定时方式 1 ET0 = 1; //允许 T0 中断 EX0 = 1; //允许 INT0 中断 EA =