标题: 单片机按键调光程序,调光正常,但就是不能关灯 [打印本页]
作者: 247015164 时间: 2019-10-17 19:36
标题: 单片机按键调光程序,调光正常,但就是不能关灯
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
sbit k1=P1^0;
sbit k2=P1^1;
sbit led=P0^0;
sbit k3=P1^2;
u16 count,value,timer1;
void delayms(u16 ms)
{
int i,j;
for(i=ms;i>0;i--)
for(j=110;j>0;j--);
}
void Timer1Init()
{
TMOD|=0X10;//选择为定时器1模式,工作方式1,仅用TR1打开启动。
TH1 = 0xFF;
TL1 = 0xff; //1us
ET1=1;//打开定时器1中断允许
EA=1;//打开总中断
TR1=1;//打开定时器
}
void tiaoguang()
{
if(count>100)
{
count=0;
if(k1==0) //DIR控制增加
{
value++;
}
if(k2==0)
{
value--;
}
}
if(value>=990)
{
value=990;
}
if(value<=10)
{
value=10;
}
if(timer1>1000) //PWM周期为1000*1us
{
timer1=0;
}
if(timer1 <value)
{
led=1;
}
else
{
led=0;
}
}
void main()
{
u8 a;
Timer1Init(); //定时器1初始化
while(1)
{
if(k3==0)
{
delayms(10);
if(k3==1)
a++;
if(a>1)
a=0;
}
switch(a)
{
case(0): tiaoguang() ;break;//恢复亮度
case(1): led=0 ;break;//熄灭LED
}
}
}
void Time1(void) interrupt 3 //3 为定时器1的中断号 1 定时器0的中断号 0 外部中断1 2 外部中断2 4 串口中断
{
TH1 = 0xFF;
TL1 = 0xff; //1us
timer1++;
count++;
}
程序运行的时候不能关灯,用实验板进行实验的,调光正常,但就是不能关灯,不明白哪里错了,像大神们请教下
作者: wulin 时间: 2019-10-18 06:56
错误1.k3是控制亮灭,你不可能在10ms内做到if(k3==0)--delayms(10)--if(k3==1),所以不可能有a++;
错误2.定时器1中断设置1us,但是完成中断内指令需要16us,CPU没有时间正常执行主循环任务
作者: whx.000 时间: 2019-10-18 08:09
PWM好像就是无法关灯,以前我也关不了。你可以调节PWM的频率使其关灯啊,调到最小不是和关灯一个现象吗
作者: bai_yun_123 时间: 2019-10-18 09:00
变量的定义最好赋初值,然后你的k3==1的时候的按键抖动延时没有设,看你k1,k2的抖动延时也没有设,除了这些暂时还没看出有什么不妥当的地方,主要我对中断这个定义不熟,没办法通篇理解程序
作者: jijkf 时间: 2019-10-18 10:07
按键要延时抖动
作者: jijkf 时间: 2019-10-18 10:08
按键要延时抖动
作者: 247015164 时间: 2019-10-27 09:31
更正,经过调试,如果想要按k3关闭led的灯光可以将主程序判断k3==1处改为k3==0 如下:
void main()
{
u8 a;
Timer1Init(); //定时器1初始化
while(1)
{
if(k3==0)
{
delayms(10);
if(k3==0)
a++;
if(a>1)
a=0;
}
switch(a)
{
case(0): tiaoguang() ;break;//恢复亮度
case(1): led=0 ;break;//熄灭LED
}
}
}
现在还有一个问题是,在调暗led灯是在20%的亮度左右会闪烁。我看了下有人说做进中断里就可以解决。但不太了解运行的方式(程序)
望各位可以指导一下。谢谢
作者: 247015164 时间: 2019-10-27 09:31
在硬件上,开关是做了处理的了,程序里就不在写延时了
作者: lids 时间: 2019-11-4 15:29
看看我这个程序,你就知道怎么关灯了
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |