標題: 單片機按鍵調光程序,調光正常,但就是不能關燈 [打印本頁]
作者: 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.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |