TA的每日心情 | 开心 7 小时前 |
---|
签到天数: 170 天 [LV.7]常住居民III
高级会员
- 积分
- 941
|
发表于 2024-5-19 09:32:47
|
显示全部楼层
#include <STC8G.H>
#include "Delay.h"
#include "Key.h"
#include "Timer0.h"
sbit LED=P3^3;
unsigned char Counter, Compare;
unsigned char KeyNum, Speed;
void main()
{
LED=0;
P3M0 = 0x08; P3M1 = 0x00;
P5M0 = 0x00; P5M1 = 0x10;
P5PU = 0x10;
P5NCS = 0x00;
Timer0_Init(); // 初始化定时器 0 和其中断
// Compare = 66; // 设置初始占空比
while(1)
{
KeyNum = Key(); // 读取按键值
if(KeyNum == 1) // 假设 Key() 返回 1 表示某个特定按键被按下
{
Speed++;
Speed %= 4; // 限制 Speed 的值在 0 到 3 之间
switch(Speed)
{
case 0: Compare = 0; break;
case 1: Compare = 1; break;
case 2: Compare = 10; break;
case 3: Compare = 100; break;
// case 4: Compare = 30; break;
// case 5: Compare = 40; break;
// case 6: Compare = 80; break;
// case 7: Compare = 100; break;
}
// 去除不必要的 Delay 调用,因为按键检测和处理应该是即时的
}
}
}
void Timer0_Routine() interrupt 1 // 定时器 0 的中断服务程序
{
TL0 = 0xF4; // 设置定时初始值(根据定时器的配置和需要的频率来计算)
TH0 = 0xFF;
Counter++;
Counter = Counter % 100; // 确保 Counter 在 0 到 99 之间循环
if(Counter < Compare)
{
LED = 1; // LED 亮
}
else
{
LED = 0; // LED 灭
}
}
一晚上都没搞懂这个为什么闪,按照老大的说明来的,输出led用的推挽,输入按键p54用的高阻,4k上拉,施密特都打开了。还是闪。
头都晕了 |
|