soma
发表于 2024-6-10 11:39:29
第二版增加闪灯板,可能不是很完善希望大家指正。#include <STC8H.H>
#define MAIN_Fosc 24000000UL
#define uint unsigned int
#define uchar unsigned char
uchar status = 0; //初始化状态字
sbit key = P3^5;//按键可自行更改
uchar tr0cnt = 0; //TR0计数
uchar flash = 0xaa; //1,3,5,7交替闪灯
void delayms(uint ms)
{
uint i;
do {
i = MAIN_Fosc / 6000;
while(--i);
} while(--ms);
}
void Timer0_Isr(void) interrupt 1
{
tr0cnt++;
P2 = flash;
if(tr0cnt==50) //1秒闪一次
{
flash = ~flash;
tr0cnt =0;
}
}
void Timer0_Init(void) //20毫秒@24.000MHz
{
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0xC0; //设置定时初始值
TH0 = 0x63; //设置定时初始值
TF0 = 0; //清除TF0标志
//TR0 = 1; //定时器0开始计时
ET0 = 1; //使能定时器0中断
EA =1;
}
void main(void)
{
P2M0=0x00;
P2M1=0x00;
P3M0=0x00;
P3M1=0x00;
Timer0_Init();
while(1)
{
if(!key)
{
delayms(10);
if(!key)
{
status++;
if(status==1)
{
P2=0xfe; //P2.0亮灯
}
else if(status==2)
{
P2=0xf8; //P2.0-P2.2亮灯
}
else if(status==3)
{
P2=0xc0; //P2.0-P2.7亮灯
}
else if(status==4)
{
TR0=1; //开启定时器
}
else if(status==5)
{
TR0 = 0;//关闭定时器
tr0cnt = 0;
status=0;
P2=0xff; //灭灯
}
while(!key); //等待按键释放
}
}
}
}
ffzdh
发表于 2024-6-10 12:58:29
soma 发表于 2024-6-10 08:14
stc8h.h这个头文件已经对寄存器进行配置了,所以不用再次配置sfr。P2口是共阳LED,低电平开灯,所以0xff ...
P2=0xf8这个呢 没看懂什么意思楼主能给解惑下么
soma
发表于 2024-6-10 13:13:58
本帖最后由 soma 于 2024-6-10 13:15 编辑
ffzdh 发表于 2024-6-10 12:58
P2=0xf8这个呢 没看懂什么意思楼主能给解惑下么
开天斧P2灯使用共阳只有低电平时才会亮灯,0xf8=11111000b,所以这时候P2.0,P2.1,P2.2亮灯,其余灯灭。
ffzdh
发表于 2024-6-10 13:34:21
soma 发表于 2024-6-10 13:13
开天斧P2灯使用共阳只有低电平时才会亮灯,0xf8=11111000b,所以这时候P2.0,P2.1,P2.2亮灯,其余灯灭。 ...
多谢楼主 貌似懂了 P2是整组开始的地址给个16进制相当于全部设置了一遍从高往低一位就是一个io
嵌入式之路
发表于 2024-6-10 16:18:27
我觉得再加一个延时消抖可能更好
soma
发表于 2024-6-10 17:04:37
嵌入式之路 发表于 2024-6-10 16:18
我觉得再加一个延时消抖可能更好
已经加了一个10ms的消抖了。
vb2002
发表于 2024-7-18 12:45:02
加个pwm,加个save.之前我有发一个,
挺好的.
飞哥帮忙写的
我加入了省电模式
可以自动保存当前亮度,下次开机就是那个亮度
vb2002
发表于 2024-7-18 12:45:27
#include "config.h"
sbit key = P3^2; //按键
void main ()
{
sys_init();
pwm_init();
while(1)
{
if(!key)
{
u8 status ;
delayms(10); //软件防抖
if(!key)
{
status++;
if(status==1)
{
CCAP1H=5;//亮一灯
}
else if(status==2)
{
CCAP1H=50;//亮3灯
}
else if(status==3)
{
CCAP1H=150;//亮6灯
}
else if(status==4)
{
status=0;//关灯
CCAP1H=0;
}
while(!key); //等待按键释放
}
}
}
}
soma
发表于 2024-7-18 12:48:55
vb2002 发表于 2024-7-18 12:45
加个pwm,加个save.之前我有发一个,
挺好的.
飞哥帮忙写的
PWM有计划加入现在还没开始写
vb2002
发表于 2024-7-18 12:54:27
soma 发表于 2024-7-18 12:48
PWM有计划加入现在还没开始写
我发出来这个代码就是我加入pwm的.
按一下亮度改变,按一下改变.占空比自己设置