1樓:蠍
用幾個變數表示按鍵的按下/鬆開狀態,然後用定時器中斷設定pwm的頻率,例如要50hz的頻率,那麼定時器中斷週期(pwm週期的一半)可以設定為10ms,在中斷服務程式內根據按鍵的狀態確定是否需要對pwm輸出管腳進行翻轉。改方法可以輸出佔空比為50%的pwm訊號。
led是英文 light emitting diode (發光二極體)的縮寫,它的基本結構是一塊電致發光的半導體材料晶片,用銀膠或白膠固化到支架上,然後用銀線或金線連線晶片和電路板,然後四周用環氧樹脂密封,起到保護內部芯線的作用,最後安裝外殼,所以 led 燈的抗震效能好。運用領域涉及到手機、檯燈、家電等日常家電和機械生產方面。
2樓:匿名使用者
^#include
#define uchar unsigned char#define uint unsigned intsbit lamp=p2^0;//輸出
sbit k1=p3^3;//加鍵
sbit k2=p3^2;//減鍵
sbit k3=p3^4;//停止
uchar a=10;
void delay(uint x)//延時函式void init()
void key()
}// while(!k1);
if(!k2)
}// while(!k2);
if(!k3)
}while(!k3);
}void main() }
void timer0() interrupt 1 using 3
跪求一個 89c52微控制器通過按鍵產生pwm訊號來控制led燈的不同亮度的程式,
3樓:匿名使用者
#include
#define uchar unsigned char#define uint unsigned intsbit lamp=p2^0;//輸出
sbit k1=p3^3;//加鍵
sbit k2=p3^2;//減鍵
sbit k3=p3^4;//停止
uchar a=10;
void delay(uint x)//延時函式void init()
void key()
}// while(!k1);
if(!k2)
}// while(!k2);
if(!k3)
}while(!k3);
}void main() }
void timer0() interrupt 1 using 3
如何使mcs-51微控制器通過按鍵產生pwm訊號來控制led燈的不同亮度?
4樓:傾聽全職服務
可以設兩個按鍵,一個調亮一個調暗
用定時器就可以產生不同佔空比的pwm訊號,佔空比越高led越亮,佔空比越低就越暗
檢測兩個按鍵動作,然後調整pwm訊號的佔空比就行了
5樓:匿名使用者
比較簡單。就是使用加減按鍵,去控制你的p口得輸出頻率就好了啊。
6樓:匿名使用者
方法太多,最簡單的方法一個定時器就可以了,我記得我以前發表過。不用定時器也可以。
7樓:匿名使用者
用兩個定時器就可以,要的話hi我
8樓:匿名使用者
通過改變定時中斷時間改變pwm佔空比,來改變led亮度
51微控制器如何用一個按鍵和一個定時器來模擬pwm控制一個led燈的亮度??
9樓:糊塗伊人笑
使用定時器t0產生pwm方波,
用按鍵調整佔空比,20級可調
控制led燈的亮度等級.
#include "my51.h"
#include "timer0.h"
#define grading 20 //亮度20級變化
sbit keys3=p3^5; //按鍵調整佔空比,pwm_keychange++
sbit keys4=p3^6; // pwm_keychange--
u8 pwm_keychange=10; //初值,按鍵調整在1~20之間變化
//佔空比 pwm_keychange/grading
void t0_work() //本函式由t0定時器中斷函式呼叫
if(timemultiple2flag)
} void main() //測試
initt0(1,pwm_keychange,grading);
}} else if(0==keys4)
initt0(1,pwm_keychange,grading); //佔空比減小
} }
else
}} c**
#ifndef _my51_h
#define _my51_h
#include
//#include
#include
#include
#include "mytype.h"
#ifndef _51led_
#define _51led_
#define led p1 //p1匯流排連8個led燈,燈連573鎖存器,p1置低電平點亮
#define led led
#define on(x) p1&(~(1<<(x))) //開啟某個燈,開多個燈用 on(m) & on(n)
#define off(x) p1|(1<<(x)) //關閉某個燈,關多個燈用 off(m)| off(n)
#define on(x) on(x) //包含大小寫
#define off(x) off(x)
#define ledon 0 //某個燈,開啟
#define ledoff 1 //某個燈,關閉
sbit led0=p1^0;
sbit led1=p1^1;
sbit led2=p1^2;
sbit led3=p1^3;
sbit led4=p1^4;
sbit led5=p1^5;
sbit led6=p1^6;
sbit led7=p1^7;
sbit ledlock=p2^5; //鎖定當前8個led的狀態,0鎖定 ,1不鎖定
#endif
/*************二進位制輸入巨集****************************/
#ifndef _longtobin_
#define longtobin(n) \
( \
((n >> 21) & 0x80) | \
((n >> 18) & 0x40) | \
((n >> 15) & 0x20) | \
((n >> 12) & 0x10) | \
((n >> 9) & 0x08) | \
((n >> 6) & 0x04) | \
((n >> 3) & 0x02) | \
((n ) & 0x01) \
) #define bin(n) longtobin(0x##n##l)
#define bin(n) bin(n)
#define b(n) bin(n)
#define b(n) bin(n)
#endif
/*************單個資料位的置位巨集*********************/
#ifndef _bit_
#define bit(n) (1< #define bit(n) bit(n) #endif #define high 1 //高電平 #define low 0 //低電平 sbit beep=p2^3; //蜂鳴器 extern void delayms(u16 ms); extern void delayxus(u8 us); //函式執行(8+6x)個機器週期, 即t=(8+6x)*1.085 #endif c**#ifndef _timer0_h #define _timer0_h #include "my51.h" extern u8 timemultiple1flag; //中斷時間複用置位標誌,須手動清零 extern u8 timemultiple2flag; //中斷時間複用置位標誌,須手動清零 extern void t0_work(); //該函式未實現,需外部實現 extern void initt0(u8 ms,u16 t_multiple1,u16 t_multiple2) ; //定時器初始化 #endif c**#include "timer0.h" u8 th0cout=0 ; //初值 u8 tl0cout=0 ; u16 t0intcouts1=0; //中斷計數 u16 t0intcouts2=0; //中斷計數 u16 timemultiple1=0; //中斷複用時間的倍數 u16 timemultiple2=0; //中斷複用時間的倍數 u8 timemultiple1flag=0; //中斷時間複用置位標誌,須手動清零 u8 timemultiple2flag=0; //中斷時間複用置位標誌,須手動清零 //開啟定時器,定時完成後需要手動關閉tr0,否則將迴圈定時 //引數一是定時的毫秒數,引數二和三是定時基時的倍率數(定時複用) void initt0(u8 ms,u16 t_multiple1,u16 t_multiple2) //定時器初始化設定,ms取值不超過65 if(0==t_multiple2) //0倍的基準時間是不合理的,至少1倍 timemultiple1=t_multiple1; //倍時 timemultiple2=t_multiple2; //倍時 tmod &= 0xf0; //清定時器0配置 tmod |= 0x01; //配置定時器0的工作方式為1 ea =open; //開啟總中斷 et0=open; //開啟定時器中斷 th0=th0cout; //定時器裝入初值 tl0=tl0cout; tr0=start; //啟動定時器 } void t0_times() interrupt 1 //t0定時器中斷函式 if(++t0intcouts2==timemultiple2) //判斷是否複用定時器 t0_work(); //呼叫工作函式} 8個數碼管如果顯示不同內容,那麼一般需要動態掃描顯示,才能消耗最小的硬體資源。如果顯示同一個內容,那麼就直接送段碼,位控全開就可以了。89c52微控制器怎麼點亮8個數碼管?下面 為什麼就亮了3個 遇到相同的問題,我是這樣解決的 1 新增延時 2 在位選和段選開啟之前先賦值 以下是我的程式,僅供參考 ... include define uchar unsigned charuchar led1,led2,led3,led4 void delay uchar a for num 0 num 5 num 32燈流水 火柴天堂作品 20130520 52微控制器,12mhz晶振,p0 p3 接32顆led,... 相同,只不過at上多了一些第二功能 理論上是可以的,它包含了8051了。都是51系列的 我現在還用8031的原理相簿呢 肯定是可以的,沒有問題 at89c51微控制器和8051微控制器一樣嗎 mcs 51微控制器是指bai美國intel公司生產的一系列du微控制器的總稱。zhi這一系列包dao含80...89C52微控制器怎麼點亮數碼管,89C52微控制器怎麼點亮8個數碼管
用89c52微控制器控制led流水燈的c語言程式
AT89C51微控制器和8051微控制器引腳是否相同?還有哪些相同點