回复本帖可获得 3 黑币奖励! 每人限 1 次
不要急于写程序。先规划一下方案。
再出个程序流程图,先走通流程图而后再写程序。
如沙发提出的问题,你如果规划过方案,就不犯。
例如:列出风扇的功能,一个给出实现的方式。切换的方法,条件,检测的方式,显示的方式……。
这此都在事先做规划。至少罗列于EXCEL表中吧。
再出个程序流程图,先走通流程图而后再写程序。
如沙发提出的问题,你如果规划过方案,就不犯。
例如:列出风扇的功能,一个给出实现的方式。切换的方法,条件,检测的方式,显示的方式……。
这此都在事先做规划。至少罗列于EXCEL表中吧。
评分
先给你来一段
#include "STC8G.h"
// 定义红外解码键值
#define KEY_POWER 0xFD81
#define KEY_MODE 0xFD82
#define KEY_WIND 0xFD84
#define KEY_TIMER 0xFD88
#define KEY_SWING 0xFD90
#define KEY_LIGHT 0xFDC3
// 定义数码管段码
unsigned char code SEGMENT[] = {
0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07,
0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71,
0x08, 0x48, 0x49, 0x76
};
// 全局变量
bit fanOn = 0; // 风扇开关状态
unsigned char fanSpeed = 0; // 风扇速度
bit fanSwing = 0; // 风扇摇头状态
bit fanLight = 0; // 风扇彩灯状态
unsigned int fanTimer = 0; // 风扇定时器
// 延时函数
void delayms(unsigned int ms) {
unsigned int i, j;
for (i = 0; i< ms; i++) {
for (j = 0; j< 1000; j++);
}
}
// 数码管显示函数
void display(unsigned char digit) {
unsigned char segment = SEGMENT[digit];
P1 = segment;
}
// 控制风扇函数
void controlFan() {
// 根据风扇状态进行相应操作
if (fanOn) {
// 控制风扇开关
P3& = 0xF8;
P3 |= fanSpeed;
// 控制风扇摇头
P1& = 0xDF;
P1 |= (fanSwing<< 5);
// 控制风扇彩灯
P5& = 0xDF;
P5 |= (fanLight<< 5);
} else {
// 关闭风扇
P3& = 0xF8;
}
}
// 外部中断1中断服务函数
void int1() interrupt 2 {
// 延时一段时间,避免按键抖动
delayms(10);
if (P3_2 == 0) { // 检测外部中断1触发
// 解码键值
unsigned int keyValue = (P1<< 8) | P0;
// 根据键值执行相应操作
switch (keyValue) {
case KEY_POWER:
fanOn = !fanOn; // 切换风扇开关状态
break;
case KEY_MODE:
fanSpeed++; // 切换风扇速度
if (fanSpeed > 3) {
fanSpeed = 0;
}
break;
case KEY_WIND:
fan
#include "STC8G.h"
// 定义红外解码键值
#define KEY_POWER 0xFD81
#define KEY_MODE 0xFD82
#define KEY_WIND 0xFD84
#define KEY_TIMER 0xFD88
#define KEY_SWING 0xFD90
#define KEY_LIGHT 0xFDC3
// 定义数码管段码
unsigned char code SEGMENT[] = {
0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07,
0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71,
0x08, 0x48, 0x49, 0x76
};
// 全局变量
bit fanOn = 0; // 风扇开关状态
unsigned char fanSpeed = 0; // 风扇速度
bit fanSwing = 0; // 风扇摇头状态
bit fanLight = 0; // 风扇彩灯状态
unsigned int fanTimer = 0; // 风扇定时器
// 延时函数
void delayms(unsigned int ms) {
unsigned int i, j;
for (i = 0; i< ms; i++) {
for (j = 0; j< 1000; j++);
}
}
// 数码管显示函数
void display(unsigned char digit) {
unsigned char segment = SEGMENT[digit];
P1 = segment;
}
// 控制风扇函数
void controlFan() {
// 根据风扇状态进行相应操作
if (fanOn) {
// 控制风扇开关
P3& = 0xF8;
P3 |= fanSpeed;
// 控制风扇摇头
P1& = 0xDF;
P1 |= (fanSwing<< 5);
// 控制风扇彩灯
P5& = 0xDF;
P5 |= (fanLight<< 5);
} else {
// 关闭风扇
P3& = 0xF8;
}
}
// 外部中断1中断服务函数
void int1() interrupt 2 {
// 延时一段时间,避免按键抖动
delayms(10);
if (P3_2 == 0) { // 检测外部中断1触发
// 解码键值
unsigned int keyValue = (P1<< 8) | P0;
// 根据键值执行相应操作
switch (keyValue) {
case KEY_POWER:
fanOn = !fanOn; // 切换风扇开关状态
break;
case KEY_MODE:
fanSpeed++; // 切换风扇速度
if (fanSpeed > 3) {
fanSpeed = 0;
}
break;
case KEY_WIND:
fan