|
|
发表于 2016-9-29 11:43:06
|
显示全部楼层
#include<reg51.h>
sbit LED_R=P3^4;//定义红灯
sbit LED_G=P3^3;//定义绿灯
sbit LED_B=P3^2;//定义蓝灯
sbit Key1=P3^0;//定义按键1
sbit Key2=P3^1;//定义按键2
unsigned char Key1_old; //定义一个数据,记录Key1过去出现低电平
unsigned char Key1_action; //定义一个数据,传递Key1是否动作的消息
unsigned char Key2_old; //定义一个数据,记录Key2过去出现低电平
unsigned char Key2_action; //定义一个数据,传递Key2是否动作的消息
unsigned char mode; //定义一个数据,代表不同模式
unsigned char light; //定义一个数据,代表亮度等级
unsigned int time; //定义一个数据,记录时间
unsigned int delay_time; //定义一个数据,记录时间
unsigned char count; //定义一个数据,PWM循环次数
unsigned char duty_R; //定义一个数据,传递红色亮度占空比
unsigned char duty_G; //定义一个数据,传递绿色亮度占空比
unsigned char duty_B; //定义一个数据,传递蓝色亮度占空比
void Delay1ms() //@12.000MHz
{
unsigned char i, j;
i = 12;
j = 169;
do
{
while (--j);
} while (--i);
}
void delay_n_ms(unsigned int n) //自己定义的延时n毫秒函数
{
while(n)
{
Delay1ms();
n=n-1;//每循环一次n减小1
}
}
main()
{
Key1_old=1; //进入循环前,先初始化标志位。按键还没按下,old是高电平
Key2_old=1;
while(1)
{
delay_n_ms(1); //系统周期,每循环一次1ms
time=time+1; //1ms计数
if(time>9) //time加到10ms,从0开始,每10ms检测一次按键
{
time=0;
if(Key1==1)
{
if(Key1_old==0) //如果本次是高电平,上次是低电平,检测到按键
{
Key1_action=1;
}
}
Key1_old=Key1; //保存高低电平
if(Key2==1)
{
if(Key2_old==0) //如果本次是高电平,上次是低电平,检测到按键
{
Key2_action=1;
}
}
Key2_old=Key2; //保存高低电平
}
//上面是完全模块化的按键检测程序,只传递出两个action消息
////////////////////////////////////////////
if(Key1_action==1) //有按键消息,处理按键功能
{
Key1_action=0; //处理过按键后要清0
mode++;
if(mode>8) //按键1调节七种色彩
{
mode=0;
}
}
if(Key2_action==1) //有按键消息,处理按键功能
{
Key2_action=0; //处理过按键后要清0
light++;
if(light>10) //按键2控制10级亮度
{
light=0;
}
}
//上面是模块化的按键执行程序,只传递出mode模式、light亮度两个消息
////////////////////////////////////////////
if(mode==0) //模式0红色
{
duty_R=light; //红色占空比=亮度
duty_G=0; //绿色、蓝色占空比为0,熄灭,只有红色亮
duty_B=0;
}
if(mode==1) //模式1橙色
{
duty_R=light;
duty_G=light;
duty_B=0;
}
if(mode==2) //模式2绿色
{
duty_R=0;
duty_G=light;
duty_B=0;
}
if(mode==3) //模式3青色
{
duty_R=0;
duty_G=light;
duty_B=light;
}
if(mode==4) //模式4蓝色
{
duty_R=0;
duty_G=0;
duty_B=light;
}
if(mode==5) //模式5紫色
{
duty_R=light;
duty_G=0;
duty_B=light;
}
if(mode==6) //模式6白色
{
duty_R=light;
duty_G=light;
duty_B=light;
}
if(mode==7) //模式7 爆闪
{
delay_time=delay_time+1;
if(delay_time>2000) //爆闪周期1000ms
{
delay_time=0;
}
if(delay_time<1000) //前1秒全亮
{
duty_R=10;
duty_G=10;
duty_B=10;
}
else //后1秒熄灭
{
duty_R=0;
duty_G=0;
duty_B=0;
}
}
count=count+1; //每过1ms计数+1
if(count>9)
{
count=0; //计数大于9后又变成0!,0~9十毫秒PWM周期
}
if(duty_R>count) //在count 0~9变化中,duty大于count的次数就是占空比
{
LED_R=1; //改变duty改变高电平时间,亮度变化
}
else
{
LED_R=0;
}
if(duty_G>count) //绿色LED PWM
{
LED_G=1;
}
else
{
LED_G=0;
}
if(duty_B>count) //蓝色LED PWM
{
LED_B=1;
}
else
{
LED_B=0;
}
编译时提示
Build target '目标 1'
compiling 七彩灯.c...
七彩灯.c(211): error C141: syntax error near ''
目标未创建,麻烦看一下哪点有错? |
| |