开发工具:
文件大小: 105kb
下载次数: 0
上传时间: 2015-03-21
详细说明: 5 3主程序 #include #include #define uchar unsigned char #define uint unsigned int #define GPIO KEY P0 sbit beep P3^1; sbit gao P3^3; sbit zhong P3^4; sbit di P3^5; void delayms uint xms ; void duliscan void ; uchar keyscan void ; void init void ; void playkey void ; void playmusic void ; void display uchar weitu uchar num ; uchar BTH0 BTL0;uchar a 1; uchar flag 0;uchar time 1; uchar m; uchar music; code unsigned char sszymmh[] {6 2 3 5 2 1 3 2 2 5 2 2 1 3 2 6 2 1 5 2 1 6 2 4 3 2 2 5 2 1 6 2 1 5 2 2 3 2 2 1 2 1 6 1 1 5 2 1 3 2 1 2 2 4 2 2 3 3 2 1 5 2 2 5 2 1 6 2 1 3 2 2 2 2 2 1 2 4 5 2 3 3 2 1 2 2 1 1 2 1 6 1 1 1 2 1 5 1 6 0 0 0 }; uchar code xiaopingguo[] {3 3 2 1 3 2 2 3 2 6 2 2 3 3 2 2 3 2 1 3 2 2 3 2 6 2 4 3 3 2 1 3 2 2 3 2 2 3 2 5 3 1 3 3 1 7 2 2 1 3 2 1 3 1 7 2 1 6 2 2 7 2 1 1 3 1 2 2 2 5 2 2 6 3 2 5 3 2 3 3 2 3 3 2 3 3 2 2 3 2 1 3 2 2 3 1 3 3 1 2 3 1 3 3 1 2 3 1 5 3 1 5 3 8 0 0 0 }; uchar code tableH[] {0xff 0xf8 0xf9 0xfa 0xfa 0xfb 0xfb 0xfc 0xfc 0xfc 0xfd 0xfd 0xfd 0xfd 0xfe 0xfe 0xfe 0xfe 0xfe 0xfe 0xfe 0xff }; uchar code tableL[] {0xff 0x8c 0x5b 0x15 0x67 0x04 0x90 0x0c 0x44 0xac 0x09 0x34 0x82 0xc8 0x06 0x22 0x56 0x85 0x88 0xc1 0xe4 0x02 }; uchar code table[] {0x3f 0x06 0x5b 0x4f 0x66 0x6d 0x7d 0x07 0x08 0x48 0x49}; uchar code wei[] {0x07 0x0b 0x0d 0x0e}; void main 主程序 { init ; while 1 { if flag 0 { duliscan ; playkey ; } else { time 1; playmusic ; } } } void delayms uint xms 毫秒延时 { uint i j; for i xms;i>0;i for j 120;j>0;j ; } void duliscan 独立键盘扫描(高中低音切换) { if gao 0 { delayms 10 ; if gao 0 { a 2; while gao ; } } if zhong 0 { delayms 10 ; if zhong 0 { a 1; while zhong ; } } if di 0 { delayms 10 ; if di 0 { a 0; while di ; } } } 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 playkey { uchar Key Temp1 Key Temp2; uchar Key Value 16; while 1 { TR0 0; T0工作停 暂不发音 Key Temp1 keyscan ; 第一次读入按键 if Key Temp1 16 { 有键按下 Key Temp2 keyscan ; 再读一次 if Key Temp1 Key Temp2 两次相等 { Key Value Key Temp1; 就确认下来 display 2 Key Value+1 ; display 3 a+8 ; BTH0 tableH[Key Value+7 a+1]; BTL0 tableL[Key Value+7 a+1]; TH0 BTH0; TL0 BTL0; 根据键值 取出定时半周期的初始值 TR0 1; 启动定时器T0 发音 while keyscan < 16 ; 等待释放 beep 1; 停止发音 } } } } void playmusic 音乐播放 { uchar n 0; while time { if music+n 0 { n 0; } else { duliscan ; switch a { case 2:music sszymmh; case 1:music xiaopingguo; case 0:music xiaopingguo; } m music+n +7 music+n+1 1 ; BTH0 tableH[m]; BTL0 tableL[m]; time music+n+2 ; n n+3; TH0 BTH0; TL0 BTL0; TR0 1;delayms 187 time ;TR0 0; } } } void init { TMOD 0x01; EA 1; IT0 1; EX0 1; ET0 1; } void time0 interrupt 1 { TH0 BTH0; TL0 BTL0; beep beep; } void int0 interrupt 0 { flag flag; } void display uchar weitu uchar num { P2 wei[weitu]; P0 table[num]; delayms 5 ;">5 3主程序 #include #include #define uchar unsigned char #define uint unsigned int #define GPIO KEY P0 sbit beep P3^1; sbit gao P3^3; sbit zhong P3^4; sbit di P3^5; void delayms uint xms ; void duliscan void ; uchar keyscan void ; void init void ; void playkey voi [更多] ...展开收缩
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.