完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
编辑推荐
在计算机发展的历史上,没有哪一种程序设计语言像C语言这样应用广泛。《C程序设计语言》(英文版)(第2版)是C语言的设计者之一Dennis M.Ritchie和著名计算机科学家Brian W.Kernighan合著的一本介绍C语言的权威经典著作。我们现在见到的大量论述C语言程序设计的教材和专著均以此书为蓝本。 作者简介 作者:(美)克尼汉 Brian W.Kernighan贝尔实验室计算科学研究中心高级研究人员,著名的计算机科学家。他参加了UNIX系统、C语言、AWK语言和许多其他系统的开发,同时出版了许多在计算机领域具有影响的著作,如《The C Proguamming Language》、《The Elementsof Programming Style》等。
|
|
相关推荐
|
|
谢谢楼主分享谢谢楼主分享谢谢楼主分享谢谢楼主分享
|
|
|
|
|
|
谢楼主。。。。。。。。。。。。。
|
|
|
|
|
|
本帖最后由 zhihuizhou 于 2012-2-29 09:54 编辑 /* 名称:按键控制定时器选播多段音乐 说明:本例内置 3 段音乐,K1 可启动 停止音乐播放,K2 用于选择音乐段。 */ #include #include #define uchar unsigned char #define uint unsigned int ***it K1=P1^0; //播放和停止键 ***it SPK=P3^7; //蜂鸣器 uchar Song_Index=0,Tone_Index=0; //当前音乐段索引,音符索引 //数码管段码表 uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //标准音符频率对应的延时表 uchar code HI_LIST[]={0,226,229,232,233,236,238,240,241,242,244,245,246,247,248}; uchar code LO_LIST[]={0,4,13,10,20,3,8,6,2,23,5,26,1,4,3}; //三段音乐的音符 uchar code Song[][50]= { {1,2,3,1,1,2,3,1,3,4,5,3,4,5,5,6,5,3,5,6,5,3,5,3,2,1,2,1,-1}, {3,3,3,4,5,5,5,5,6,5,3,5,3,2,1,5,6,53,3,2,1,1,-1}, {3,2,1,3,2,1,1,2,3,1,1,2,3,1,3,4,5,3,4,5,5,6,5,3,5,3,2,1,3,2,1,1,-1} }; //三段音乐的节拍 uchar code Len[][50]= { {1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,2,-1}, {1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,2,2,-1}, {1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,2,1,1,2,2,-1} }; //外部中断0 void EX0_INT() interrupt 0 { TR0=0; //播放结束或者播放中途切换歌曲时停止播放 Song_Index=(Song_Index+1)%3; //跳到下一首的开头 Tone_Index=0; P2=DSY_CODE[Song_Index]; //数码管显示当前音乐段号 } //定时器0 中断函数 void T0_INT() interrupt 1 { TL0=LO_LIST[Song[Song_Index][Tone_Index]]; TH0=HI_LIST[Song[Song_Index][Tone_Index]]; SPK=~SPK; } //延时 void DelayMS(uint ms) { uchar t; while(ms--) for(t=0;t<120;t++); } //主程序 void main() { P2=0xc0; SPK=0; TMOD=0x00; //T0 方式 0 IE=0x83; IT0=1; IP=0x02; while(1) { while(K1==1); //未按键等待 while(K1==0); //等待释放 TR0=1; //开始播放 Tone_Index=0; //从第0 个音符开始 //播放过程中按下 K1 可提前停止播放(K1=0)。 //若切换音乐段会触发外部中断,导致 TR0=0,播放也会停止 while(Song[Song_Index][Tone_Index]!=-1&&K1==1&&TR0==1) { DelayMS(300*Len[Song_Index][Tone_Index]); //播放延时(节拍) Tone_Index++; //当前音乐段的下一音符索引 } TR0=0; //停止播放 while(K1==0); //若提前停止播放,按键未释放时等待 } } proteus仿真图: 本帖隐藏的内容 |
|
|
|
|
|
只有小组成员才能发言,加入小组>>
12142 浏览 2 评论
4475 浏览 3 评论
3706 浏览 5 评论
9575 浏览 47 评论
4517 浏览 9 评论
711浏览 0评论
516浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 20:25 , Processed in 0.756314 second(s), Total 77, Slave 66 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号