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

📄 chxu.c

📁 PWM方式,使用AVR系列tamega2313
💻 C
字号:
#include <iom8v.h>
#include <macros.h>
#define uchar unsigned char
#define uint unsigned int
/********************PWM 口定义********************************************/
#define OC1A PB1
#define OC1B PB2
#define OC2  PB3
/**********************键盘定义********************************************/
#define S1 0X70
#define S2 0XB0
#define S3 0XD0
#define S4 0XE0
#define PINKEY (PIND&0XF0)
/*********************指示灯定义********************************************/
#define LED_B PC3                    //蓝色
#define LED_B_ON PORTC&=~BIT(LED_B)
#define LED_B_OFF PORTC|=BIT(LED_B)
#define LED_R PC4 				   	 //红色
#define LED_R_ON PORTC&=~BIT(LED_R)
#define LED_R_OFF PORTC|=BIT(LED_R)
#define LED_G PC5 				   	 //绿色
#define LED_G_ON PORTC&=~BIT(LED_G)
#define LED_G_OFF PORTC|=BIT(LED_G)
/*********************PWM控制色定义********************************************/
#define READ  OCR2
#define BLUE  OCR1A
#define GREEN OCR1B
uchar keynum,szs=0;
/****************************************************************************
名称:延时函数
****************************************************************************/
 void delay(uint ms)
 {
      uint x,y;
	  for(x=0;x<ms;x++)
	      for(y=0;y<1141;y++);
 }
 void delayus(uint us)
{
      uint x;
	  us=us*5/4;
	  for(x=0;x<us;x++);
}
/****************************************************************************
名称:IO口配置函数
****************************************************************************/
void IO_INIT()
{
    DDRB|=BIT(OC1A);    //配置PWM的OC1A为输出
	DDRB|=BIT(OC1B);    //配置PWM的OC1B为输出
	DDRB|=BIT(OC2);     //配置PWM的OC2 为输出
	
	DDRD&=~BIT(PD4);    //配置开关S1接口为输入
	DDRD&=~BIT(PD5);    //配置开关S2接口为输入
	DDRD&=~BIT(PD6);    //配置开关S3接口为输入
	DDRD&=~BIT(PD7);    //配置开关S4接口为输入
	
	PORTD|=BIT(PD4);    //配置开关S1接口带上啦
	PORTD|=BIT(PD5);    //配置开关S2接口带上啦
	PORTD|=BIT(PD6);    //配置开关S3接口带上啦
	PORTD|=BIT(PD7);    //配置开关S4接口带上啦
	
	DDRC|=BIT(LED_B);    //配置LED1接口为输出
	DDRC|=BIT(LED_R);    //配置LED1接口为输出
	DDRC|=BIT(LED_G);    //配置LED1接口为输出
}
/****************************************************************************
名称:快速PWM模式初始化
****************************************************************************/
void PWM_INIT()
{
    TCCR1A|=0XA1;//匹配清零,TOP置位
	TCCR1B|=0X09;//无欲分屏分频、8位快速PWM模式(OC1A\OC1B口输出PWM)
	TCCR2|=0X69; //无欲分屏分频、8位快速PWM模式(OC2口输出PWM)
	OCR2=0;      //OCR2为 0,红色灭
	OCR1A=0;     //OCR1A为0,蓝色灭
	OCR1B=0;     //OCR1B为0,绿色灭
	LED_B_OFF;   //蓝色指示灯灭
	LED_R_OFF;   //红色指示灯灭
	LED_G_OFF;   //绿色指示灯灭
}
/****************************************************************************
名称:键盘调节各单色亮度程序
****************************************************************************/
void key_scan()
{
        if(PINKEY==S4)
		{
		     delay(5);
			 if(PINKEY==S4)
			 {
			      delay(5);
				  while(PINKEY==S4); 
				  szs++;
			      if(szs==4)szs=0;
			 }
		}
		if(szs==0){LED_R_OFF;LED_B_OFF;LED_G_OFF;}
		if(szs==1)
		{
		     LED_R_OFF;LED_B_ON;LED_G_OFF;
			 while(PINKEY==S3){if(BLUE!=255)BLUE+=5; delay(10);}
			 while(PINKEY==S2){if(BLUE!=0)  BLUE-=5; delay(10);}
		}
		if(szs==2)
		{
		     LED_R_ON;LED_B_OFF;LED_G_OFF;
			 while(PINKEY==S3){if(READ!=255)READ+=5; delay(10);}
			 while(PINKEY==S2){if(READ!=0)  READ-=5; delay(10);}
		}
		if(szs==3)
		{
		     LED_R_OFF;LED_B_OFF;LED_G_ON;
			 while(PINKEY==S3){if(GREEN!=255)GREEN+=5; delay(10);}
			 while(PINKEY==S2){if(GREEN!=0)  GREEN-=5; delay(10);}
		}
}
void main()
{
    IO_INIT();     //调用IO口初始化函数
	PWM_INIT();    //调用PWM初始化函数
	while(1)
	{
	    key_scan(); 
	}
}

⌨️ 快捷键说明

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