void Square(void)//方波 { for(count=0;count<=255;count++) { P2=0; delay(k); } for(count=0;count<=255;count++) { P2=a*100; delay(k); } } void Triangle(void)//三角波 { for(count=0;count<=255;count++) { P2=count*a/10; delay(k); } for(count=255;count>=0;count--) { P2=count*a/10; delay(k); } } void Sawtooth(void)//锯齿波 { for(count=255;count>=0;count--) { P2=count*a/10; delay(k); } } void Sin(void)//正弦波 { for(count=0;count<=255;count++) { P2=Sine[count]*a/10; delay(k); } } void key_INT0() interrupt 0 { if(key1 == 0) { delay(10); if(key1 == 0) { ws++; if(ws == 4) ws = 0; while(!key1); } } } void key_INT1() interrupt 2 { EX1=0; delay(1); if(key2==0) { if(key2==0) { k=k+1; if(k == 10) k=0; while(!key2); } } EX1=1; } void key_in3() { if(key3==0) { if(key3==0) { a--; if(a==0) a=10; while(!key3); } } } void main() { EA = 1; EX0 = 1; IT0 = 1; EX1 = 1; IT0 = 1; PX0 = 1; PX1 = 0; while(1) { key_in3(); switch(ws) { case 0: { Square(); break; } case 1: { Triangle(); break; } case 2: { Sawtooth(); break; } case 3: { Sin(); break; } } } }详细讲解代码
时间: 2023-12-04 16:04:19 浏览: 185
这是一段8051单片机的代码,主要实现了通过按键切换不同波形类型和调节波形频率的功能。以下是对代码的详细讲解:
1. 方波函数(Square):在这个函数中,首先将P2口输出置为0,然后延时k个单位时间。接着,将P2口输出置为一个固定的值(a*100),再延时k个单位时间。这样循环执行,就可以生成一个周期为255个单位时间的方波。
2. 三角波函数(Triangle):在这个函数中,通过循环将P2口输出从0逐渐增加到a,再从a逐渐减小到0,这样循环执行,就可以生成一个周期为255个单位时间的三角波。
3. 锯齿波函数(Sawtooth):在这个函数中,通过循环将P2口输出从a逐渐减小到0,这样循环执行,就可以生成一个周期为255个单位时间的锯齿波。
4. 正弦波函数(Sin):在这个函数中,通过查表法将预先生成好的正弦波数组Sine中的值输出到P2口,再延时k个单位时间。这样循环执行,就可以生成一个周期为255个单位时间的正弦波。
5. 按键中断函数(key_INT0和key_INT1):这两个函数分别是按键INT0和INT1的中断处理函数。在这里,检测按键是否被按下,并对相应的变量进行修改。
6. 按键扫描函数(key_in3):这个函数用来检测按键3是否被按下,并对相应的变量进行修改。
7. 主函数(main):在这个函数中,首先使能全局中断和外部中断0和1,然后循环执行。在每次循环中,调用key_in3函数检测按键3是否被按下,然后根据变量ws的值选择调用不同的波形函数。这样不断循环执行,就可以生成不同类型和频率的波形。
总的来说,这段代码主要实现了通过按键切换不同波形类型和调节波形频率的功能,是一段比较基础的单片机控制程序。
阅读全文