⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pwm1_finish.c

📁 avr16单片机产生pwm波形
💻 C
字号:
/*2号键为PB3口输出波形的占空比增加键;
3号键为PB3口输出波形的占空比减小键。
4号键为PD7口输出波形的占空比增加键;
5号键为PD7口输出波形的占空比减小键;
按动键盘会在示波器上观看到波形占空比的变化。*/
#include <iom16v.h>
#include <macros.h>
unsigned char key1=0;
void key_out(void);
void port_init(void)
{	 
	 DDRB=(1<<3);
	 DDRD=(1<<7);
	 DDRA=0X00;
	 PORTA=0XFF;
	 DDRC=0XFF;
	 PORTC=0X00;
}
void t0_init(void)
{	 
	 TCCR0=0X00;
	 OCR0=0X44;
	 TCCR0=0X6C;
}
void t2_init(void)
{
 	 ASSR=0X00;
	 TCCR2=0X00;
	 OCR2=0X44;
	 TCCR2=0X6E;
}
void delay_1ms(void)
{	 
	 unsigned int i;
	 for(i=1142;i>0;i--)
	 ;
}
void delay_nms(unsigned int n)
{	 
	 unsigned int i;
	 for(i=n;i>0;i--)
	 	delay_1ms();
		
}
unsigned char key_check(void)
{
 	 unsigned char temp ,temp1;
 	 PORTC&=0XFC;
	 asm("nop");
     temp=PINA;
	 if(temp!=0XFF)
	 {
	  	 delay_nms(20);
		 temp1=PINA;    
		 if(temp==temp1)
	 	  	 return 1;
	     else 
	     	 return 0;
	 }
	 else 
	 	  return 0;
}
void key_value(void)
{    
	 unsigned char i,temp;
	 for(i=0;i<2;i++)
	 {	
	 	PORTC=~(1<<i);
		asm("nop");
		temp=PINA;
		asm("nop");
	  	switch(temp)
	 	{	
	     	case 0b11111110:key1=(i<<3)+1;break;
		 	case 0b11111101:key1=(i<<3)+2;break;
		 	case 0b11111011:key1=(i<<3)+3;break;
		 	case 0b11110111:key1=(i<<3)+4;break;
		 	case 0b11101111:key1=(i<<3)+5;break;
		 	case 0b11011111:key1=(i<<3)+6;break;
		 	case 0b10111111:key1=(i<<3)+7;break;
		 	case 0b01111111:key1=(i<<3)+8;break;
		 	default:break;			 
	    }
		key_out();
	}
}
void key_out(void)
{	 
	 unsigned char t;
	 
	 while(1)
	 {	NOP();
	 	t=PINA;
	 	if(t==0XFF)
		{	
			delay_nms(100);
			t=PINA;
			if(t==0XFF)
				break;
		}
	 }
}
void key_process(void)
{	 
	 switch(key1)
	 {	
	 	case 2:OCR0=OCR0+0X11;
			   if(OCR0>0XEE)
			   		OCR0=0X11;break;
		case 3:OCR0=OCR0-0X11;
			   if(OCR0<0X11)
			   		OCR0=0XEE;break;
		case 4:OCR2=OCR2+0X11;
			   if(OCR2>0XEE)
			   		OCR2=0X11;break;
		case 5:OCR2=OCR2-0X11;
			   if(OCR2<0X11)
			   		OCR2=0XEE;break;
		default:break;
	  }
}
void main(void)
{	 
	 CLI();
	 port_init();
	 t0_init();
	 t2_init();
	 while(1)
	 {	
	 	if(key_check())
		{	
			key_value();
			key_out();
			key_process();
		}
	 }
}
		 
  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -