<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 呼吸燈的c51程序

呼吸燈的c51程序

作者: 時(shí)間:2012-08-24 來(lái)源:網(wǎng)絡(luò ) 收藏
在今年春節的時(shí)候,在大街上看到很多的流行燈,非常的漂亮。

而今天在看單片機的書(shū)時(shí),看到制作的例子,思索一下,發(fā)現者流星燈就是有很多的制作而成的??戳艘幌聲?shū)上的源碼,感覺(jué)很有意思。

#include REG51.h> //51頭文件/******************************************************************//《C_無(wú)級亮度閃爍》#define DY_PORT     P1 //設置LED連接的I/O組#define DY_SPEED    1 //設置每一個(gè)明亮級的停留時(shí)間(值域:0~65535)#define DY_PWM      50 //設置明亮的總級數(級數過(guò)大會(huì )出現閃爍)(值域:0~65535)#define DY_MAX      50 //設置最大明亮(值域:小于明亮總級數)/**********************************************************************///《B_無(wú)級亮度變化》#define DY_PORT     P1 //設置LED連接的I/O組#define DY_SPEED    1 //設置每一個(gè)明亮級的停留時(shí)間(值域:0~65535)#define DY_PWM      500 //設置明亮的總級數(級數過(guò)大會(huì )出現閃爍)(值域:0~65535)#define DY_MAX      500 //設置最大明亮(值域:小于明亮總級數)/*********************************************************************//《A_8級亮度變化》#define DY_PORT     P1 //設置LED連接的I/O組#define DY_SPEED    100 //設置每一個(gè)明亮級的停留時(shí)間(值域:0~65535)#define DY_PWM      500 //設置明亮的總級數(級數過(guò)大會(huì )出現閃爍)(值域:0~65535)#define DY_MAX      8 //設置最大明亮(值域:小于明亮總級數)/**********************************************************************bit [自定義名] ; //定義一個(gè)位(位的值只能是0或1)例:bit LED#define [代替名]   [原名] 
 //用代替名代替原名(可以方便修改常改或調試的值)例:#define LED P1sbit  [自定義名] = [系統位名] ; //自定義系統位名。例:sbit Add_Key = P3 ^ 1;unsigned char [自定義名] ; //定義一個(gè)0~255的.例:unsigned char a;unsigned int [自定義名] ; //定義一個(gè)0~65535的/*********************************************************/void delay (unsigned int a){ // 0.1ms延時(shí)程序(12MHz 10倍于51單片機速度時(shí))unsigned char i;while( --a != 0){for(i = 0; i  12; i++);}                     }/**********************************************************************/void display (unsigned int a){ //顯示程序(50ms的PWM寬度)DY_PORT = 0x00; //LED小燈亮delay (a);      //延時(shí)a的長(cháng)度DY_PORT = 0xff; //LED小燈滅delay (DY_PWM-a);//延時(shí)總PWM長(cháng)度減a}/***********************************************************************/void main (void){ //主程序unsigned int t=1;unsigned int i;bit LOOP=0; //LOOP是循環(huán)切換標志while (1){if(LOOP == 0){ //變亮循環(huán)for(i = 0; i  DY_SPEED; i++){display(t);}t++;if(t>(DY_MAX-2)){LOOP = 1;}}if(LOOP == 1){ //變暗循環(huán)for(i = 0; i  DY_SPEED; i++){display(t);}t--;if(t2){LOOP = 0;}}}}/*************************************************************/

從這里看起來(lái)就很有意思了。想漸明漸暗,用到的是PWM(脈沖寬度調制)。簡(jiǎn)單的講,對于這個(gè)燈,就是調節暗和明的比例。

比如10為一個(gè)時(shí)間段的話(huà),那么1/10為明,9/10為暗,這樣亮度就算是1了。因為機器的時(shí)間段非常的短到人們看到的一直是連續的。

另外想到一點(diǎn),當時(shí)序短到一定的程度的時(shí)候,那么本來(lái)連續的程序,變成為了并行(這話(huà)說(shuō)得不是很?chē)烂?,要看什么樣的程序)。所以,我們能一邊上qq,一邊看網(wǎng)頁(yè)。

另外,面向過(guò)程符合機器的思維,面向對象符合人的思維。

學(xué)嵌入式很有意思的一點(diǎn)就是,你可以理解到程序運行的本質(zhì)。有一種掌控感,而擁有掌控這項技能的,似乎只有神。。。

我一直想,學(xué)計算機應該從底層學(xué)起,雖然讓讓人很提不起興趣。

言歸正傳,說(shuō)道這個(gè)程序,有個(gè)缺點(diǎn),就是無(wú)法獨立控制很多的LED燈。我查了很多的資料。卻沒(méi)有得到很明確的結果。倒是發(fā)現了一點(diǎn)國內教材的通病---- 天下文章一大抄。我買(mǎi)的基本教材,竟然大部分一樣。更可恨的是,連圖也一樣。這讓我情何以堪。后來(lái)我發(fā)現圖的出處----單片機的使用說(shuō)明書(shū)。感情這說(shuō)明書(shū)就是最好的教材。其實(shí)不光我們技術(shù)比國外落后,教材也落后。就像大學(xué)里那些只會(huì )照著(zhù)ppt讀的老師一樣惡心。

看了看單片機的說(shuō)明書(shū),發(fā)現上面有現成的PCA模塊??上业倪@個(gè)型號只能同時(shí)控制兩路。在網(wǎng)上找到有控制16路的,目前還看不懂。

看來(lái)流星燈的制作,還是有點(diǎn)小困難的。還得繼續研究。

下面是兩路的程序

#include reg52.h>//設置sfrsfr CCON = 0xD8;sfr CMOD = 0xD9;sfr CL = 0xE9;sfr CH = 0xF9;sfr CCAP0L = 0xEA;sfr CCAP0H = 0xFA;sfr CCAP1L = 0xFB;sfr CCAP1H = 0xFB;sfr CCAPM0 = 0xDA;sfr CCAPM1 = 0xDB;sbit CR = 0xDE;void PWM_init(void){CMOD = 0x02;//設置PCA定時(shí)器CL = 0x00;CH = 0x00;//PWM0的設置CCAPM0 = 0x42;CCAP0L = 0x00;CCAP0H = 0x00;//PWM1的設置CCAPM1 = 0x42;CCAP0L = 0x00;CCAP0H = 0x00;CR = 1;//啟動(dòng)PCA定時(shí)器}//設置PWM0的參數void PWM0_set(unsigned char a){CCAP0L = a;CCAP0H = a;}//設置PWM1的參數void PWM1_set(unsigned char a){CCAP1L = a;CCAP1H = a;}void delay (unsigned int a){ // 0.1ms延時(shí)程序(12MHz 10倍于51單片機速度時(shí))unsigned char i;while( --a != 0){for(i = 0; i  12; i++);}                     }void main(void){unsigned int i;PWM_init();//PWM初始化PWM0_set(0x00);//設置PWM0占空比PWM1_set(0x00);//設置PWM1占空比while(1){for(i = 0;i  256;i++){PWM0_set(i);PWM1_set(256 - i);delay(100);}for(i = 256;i > 0;i--){PWM0_set(i);PWM1_set(256 - i);delay(100);}}}


關(guān)鍵詞: 呼吸燈 c51程序 整數變量

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>