基于Atmega64单片机的波形发生器程序.docx
- 文档编号:5924731
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:13
- 大小:16.16KB
基于Atmega64单片机的波形发生器程序.docx
《基于Atmega64单片机的波形发生器程序.docx》由会员分享,可在线阅读,更多相关《基于Atmega64单片机的波形发生器程序.docx(13页珍藏版)》请在冰豆网上搜索。
基于Atmega64单片机的波形发生器程序
#include
#defineucharunsignedchar
#defineuintunsignedint
//#defineSET_WAVEPORTA|=0xFF
#defineCLR_WAVEPORTA&=0x00
ucharnum,temp,b;
uintj;
uchara;
uinttosin[368]={63,65,67,69,71,73,75,77,79,81,83,85,86,88,90,92,94,95,97,99,100,102,103,105,106,108,109,111,112,113,114,116,117,118,119,120,120,121,
122,123,123,124,125,125,125,126,126,126,126,126,126,125,125,125,124,123,123,122,121,120,120,119,118,117,116,114,113,112,111,109,108,
106,105,103,102,100,99,97,95,94,92,90,88,86,85,83,81,79,77,75,73,71,69,67,65,63,61,59,57,55,53,51,49,47,45,43,41,40,38,
36,34,32,31,29,27,26,24,23,21,20,18,17,15,14,13,12,10,9,8,7,6,6,5,4,3,3,2,1,1,1,1,1,1,2,3,3,4,
5,6,6,7,8,9,10,12,13,14,15,17,18,20,21,23,24,26,27,29,31,32,34,36,38,40,41,43,45,47,49,51,53,55,57,59,61,63,
65,67,69,71,73,75,77,79,81,83,85,86,88,90,92,94,95,97,99,100,102,103,105,106,108,109,111,112,113,114,116,117,118,119,120,120,121,122,
123,123,124,125,125,125,126,126,126,126,126,126,125,125,125,124,123,123,122,121,120,120,119,118,117,116,114,113,112,111,109,108,106,
105,103,102,100,99,97,95,94,92,90,88,86,85,83,81,79,77,75,73,71,69,67,65,63,61,59,57,55,53,51,49,47,45,43,41,40,38,36,
34,32,31,29,27,26,24,23,21,20,18,17,15,14,13,12,10,9,8,7,6,6,5,4,3,3,2,1,1,1,1,1,1,2,3,3,4,5,
6,6,7,8,9,10,12,13,14,15,17,18,20,21,23,24,26,27,29,31,32,34,36,38,40,41,43,45,47,49,51,53,55,57,59,61
};
voidfangbo(void);
voidzhengxianbo(void);
voidjuchibo(void);
voidsanjiaobo(void);
voidRead_Key(void);
voiddelay(uint);
voiddelay1(uint);
voiddelay2(uint);
intmain(void)//GCC中main文件必须为返回整形值的函数,没有参数
{
DDRA=0xFF;
DDRC=0xFF;
DDRG=0xFF;
PORTC=0x00;
PORTG=0x00;
TCNT0=0;
num=0;
DDRF=0x1C;
while
(1)
{
Read_Key();
switch(num)
{
case1:
fangbo();
break;
case2:
zhengxianbo();
break;
case3:
juchibo();
break;
case4:
sanjiaobo();
break;
}
}
}
voidfangbo(void)
{
uinti,j=0;
uintys=30;
DDRA=0xFF;
DDRC=0xFF;
DDRG=0xFF;
PORTC=0x00;
PORTG=0x00;
ucharb=0xFF;
TCNT0=0;
TCCR0=_BV(CS0);
while(num==1)
{
for(i=0;i { loop_until_bit_is_set(TIFR,TOV0); TIFR|=_BV(TOV0); } if(j) PORTA=b,j=0; else CLR_WAVE,j=1; Read_Key(); Read_Key(); switch(num) { case5: {ys=ys-30;num=1;} break; case8: {ys=ys+30;num=1;} break; case6: {b=0xFF;num=1;} break; case9: {b=0x7F;num=1;} break; } Read_Key(); }//方波 } voidzhengxianbo(void) { DDRA=0xFF; TCNT0=0; TCCR0=_BV(CS00); DDRC=0xFF; DDRG=0xFF; PORTC=0x00; PORTG=0x00; uintys=700; if(num==2) { //j=0; //DDRA=0xFF; //PORTA=tosin[j]; //正弦波 for(j=0;j<=367;j++) { PORTA=tosin[j]; loop_until_bit_is_set(TIFR,TOV0); TIFR|=_BV(TOV0); delay2(ys); } Read_Key(); switch(num) { case5: {ys=ys-100;num=2;} break; case8: {ys=ys+100;num=2;} break; //case6: {b=tosin[j];num=2;} //break; //case9: {b=tosin[j]/2;num=2;} //break; } Read_Key(); } } voidjuchibo(void) { uchara=0x00,i=0; ucharb=128; DDRA=0xFF; DDRC=0xFF; DDRG=0xFF; PORTC=0x00; PORTG=0x00; PORTA=0x00; TCNT0=0; TCCR0=_BV(CS01); uintys=10; while(num==3) { DDRA=0xFF; PORTA=a; a++; for(i=0;i { loop_until_bit_is_set(TIFR,TOV0); TIFR|=_BV(TOV0); }//锯齿波 delay1(ys); if(a==(b-1)) a=0; Read_Key(); switch(num) { case5: {ys=ys-2;num=3;} break; case8: {ys=ys+2;num=3;} break; case6: {b=128;num=3;} break; case9: {b=64;num=3;} break; } Read_Key(); } } voidsanjiaobo(void) { DDRA=0xFF; PORTA=a; DDRC=0xFF; DDRG=0xFF; PORTC=0x00; PORTG=0x00; uintys=500; a=0; ucharb=128; while(num==4) { //三角波 if(a>=b) a=0; if(a { PORTA=a; delay1(ys); } else { PORTA=b-1-a; delay1(ys); } a++; Read_Key(); switch(num) { case5: {ys=ys-100;num=4;} break; case8: {ys=ys+100;num=4;} break; case6: {b=128;num=4;} break; case9: {b=64;num=4;} break; } Read_Key(); } } voiddelay(uintz) { uintx; uchary; for(x=z;x>0;x--) for(y=200;y>0;y--); } voiddelay1(uinty) { uinti; for(i=y;i>0;i--); } voiddelay2(uintz) { uintx; uchary; for(x=z;x>0;x--); } voidRead_Key(void) { DDRF=0x1C; PORTF=0xE0; temp=PINF; temp=temp&0xE0; if(temp! =0xE0)//若有键按下,则表达式为1 { delay(200); PORTF=0xE0; temp=PINF; temp=temp&0xE0;//按键消抖 if(temp! =0xE0)//再次判断是否有按键动作 { //DDRF=0x1C; //PORTF=0xfc; PORTF=0xec;delay(10); temp=PINF; temp&=0xe0; if(temp! =0xe0) { switch(temp) { case0x60: num=7;break; case0xa0: num=4;break; case0xc0: num=1;break; //default: num=0;break; } while(temp! =0XE0) { temp=PINF; temp=temp&0xE0; } } else { //DDRF=0x1C; //PORTF=0xfc; PORTF=0xf4;delay(10); temp=PINF; temp&=0xe0; if(temp! =0xe0) { switch(temp) { case0x60: num=8;break; case0xa0: num=5;break; case0xc0: num=2;break; //default: num=0;break; } while(temp! =0XE0) { temp=PINF; temp=temp&0xE0; } } else { //DDRF=0x1C; //PORTF=0xfc; PORTF=0xf8;delay(10); temp=PINF; temp&=0xe0; if(temp! =0xe0) { switch(temp) { case0x60: num=9;break; case0xa0: num=6;break; case0xc0: num=3;break; //default: num=0;break; } while(temp! =0XE0) { temp=PINF; temp=temp&0xE0; } } } } } } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Atmega64 单片机 波形 发生器 程序