第二次课第二次课——流水灯的设计和蜂鸣器的发声流水灯的设计和蜂鸣器的发声1;.2第一题:流水灯和蜂鸣器的依次关和闭第一题:流水灯和蜂鸣器的依次关和闭l带参量延时函数 : void delay(char c) l蜂鸣器端口的位定义 : sbit speaker=P3^7;l 两个for循环:分别来控制左移和右移3两个两个for循环循环l左移循环lfor(i=7;i>0;i--)l{lP1=~a;la=a<<1;lspeaker=0;ldelay(3);lP1=0xff;speaker=1;delay(2);l}l右移循环lfor(i=7;i>0;i--)l{lP1=~b;lb=b>>1;speaker=0;ldelay(3);lP1=0xff;speaker=1;delay(2);l}4第二题:蜂鸣器每隔第二题:蜂鸣器每隔0.5s以以500Hz的频率响的频率响5次,最后以次,最后以1kHz的频率响一次的频率响一次l主要思路:l延时函数(0.5s)控制蜂鸣器不响的时间l定时器控制蜂鸣器的频率l用全局变量来控制响的次数和蜂鸣器响的时间5定时器对频率的控制定时器对频率的控制l void InitTimer1(void)l {l TMOD = 0x10;//定时器0工作方式0,定时器1工作方式1 l TH1 = 0x0FC;//给定时器1赋初值l TL1 = 0x67;l EA = 1;//打开全局中断l ET1 = 1;//允许定时器1申请中断l TR1 = 1;//启动定时器1;l }6全局变量全局变量l#include l sbit speaker=P3^7;l unsigned char a=0; //计算0.5Sl unsigned char b=0; //循环5次l unsigned int c=0;7全局变量的控制全局变量的控制lvoid Timer1Interrupt() interrupt 3 //定时器1中断处理程序l {l if(b<5)//循环次数小于5次时继续l{l TH1 = 0x0FC;//重装定时器初值l TL1 = 0x67;//你的中断程序代码;lspeaker=!speaker;la++;//(Tc=a*T0,T0=1/500s)lif(a==125)//控制蜂鸣器响的时间l{lspeaker=1;ldelay();lb++;la=0;l}l}l lif(b==5)//循环5次后,进入最后一次循环l{lTH1=0x0FE;//改变初始值来改变频率lTL1=0x34;lspeaker=!speaker;lc++;lif(c==500)//响1s后终止l{l TR1 = 0;lb=6;l}l }l }8第三题第三题 设计一首生日歌设计一首生日歌l主要思路:l定时器控制蜂鸣器的频率l用两个全局变量分别来控制音符的频率和节拍的长度9全局变量全局变量l#include l sbit speaker=P2^3;l unsigned int a=0; //第一个全局变量用来控制节拍l unsigned char b=0;//第二个全局变量用来控制第几个音符10实现过程实现过程lvoid Timer1Interrupt() interrupt 3 //定时器1中断处理程序l {l if(b<2)//前两个音符l{lTH1=0xFD;lTL1=0x82;lspeaker=!speaker;la++;lif(a==392)//半个节拍需要的时间l{lb++;la=0;l}l }11l if(b==2)//第三个音符l {l TH1=0xFD;//重新付初始值来改变频率lTL1=0xF4;lspeaker=!speaker;la++;lif (a==880)//改变频率后a的值也改变l{lb++;la=0;l }l }12最后的感触最后的感触l遇到困难怎么办?认真思考查找资料寻求帮助坚持谢谢谢谢13;.。