📄 chxu.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 + -