久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2107|回復(fù): 4
收起左側(cè)

單片機(jī)七彩漸變循環(huán)程序問題

[復(fù)制鏈接]
ID:237797 發(fā)表于 2021-10-17 16:09 | 顯示全部樓層 |閱讀模式
我用STC15W201S把網(wǎng)上資料用定時(shí)器1改成定時(shí)器2實(shí)現(xiàn)七彩燈漸變。主程序中的while(1),我注解后工作不正常的變化了,變成綠燈閃爍了。我自己的理解沒有while(1),就不循環(huán)了,漸變一次就會(huì)停止,燈滅。怎么不是我想的那樣?這種現(xiàn)象如何理解?單片機(jī)程序如下:
#include"stc15wxx.h"

#define uchar unsigned char
#define uchar unsigned char//字浮型宏定義
#define uint unsigned int//整型宏定義
#define shudu 30//LED漸變速度調(diào)整
#define dengji 1//LED變化等級調(diào)整
uchar Rout,Bout,Gout;//紅綠蘭3個(gè)變量

sbit R1=P3^1; //   輪流七彩變色呼吸   3.0 紅色
sbit G1=P5^5;//                       3.1 綠色
sbit B1=P3^0; //                      3.2 藍(lán)色

/***************************************************/
/**********************延時(shí)子程序*******************/
/***************************************************/
void delay(uint z)
{
uint x,y;//局部變量定義
for(x=0;x<5;x++)//延時(shí)外循環(huán)
for(y=0;y<z;y++);//延時(shí)內(nèi)循環(huán)
}
/**********************************************/
/**********PWM控制紅綠蘭3種燈亮滅時(shí)間**********/
/**********************************************/
void RGBpwm(uchar Rou,uchar Gou,uchar Bou)//3個(gè)局部變量,些部分為帶參數(shù)函數(shù)
{
     if(Rou!=0)//如果紅燈變量不等于0就亮紅燈
     {
      R1=1;//紅燈亮
      delay(Rou);//紅燈亮起時(shí)間
      R1=0;//紅燈滅
     }
     if(Gou!=0)//如果紅燈變量不等于0就亮綠燈
     {
      G1=1;//綠燈亮
      delay(Gou);//綠燈亮起的時(shí)間 
      G1=0;//綠燈滅
     }
     if(Bou!=0)//如果紅燈變量不等于0就亮藍(lán)燈
     {
      B1=1;//蘭燈亮
      delay(Bou);//蘭燈亮起的時(shí)間
      B1=0;//蘭燈滅
     }
}

/***********************************************/
/********************主程序*********************/
/***********************************************/
void main()
{
//     TMOD=0x01;//選擇定時(shí)器在方式1下工作
//     EA=1;//打開總中斷
//     ET0=1;//打開定時(shí)器中斷
//     TR0=1;//打開定時(shí)器
//     R1=0;//開機(jī)將紅燈關(guān)閉
//     G1=0;//開機(jī)將綠燈關(guān)閉
//     B1=0;//開機(jī)將蘭燈關(guān)閉
//     TH0=(65536-256)/256;//給定時(shí)器高8位賦值
//     TL0=(65536-256)%256;//給定時(shí)器低8位賦值

        AUXR &= 0xFB;                //定時(shí)器時(shí)鐘12T模式
        T2L = 0xB4;                //設(shè)置定時(shí)初始值 FEB4 30us
        T2H = 0xFE;                //設(shè)置定時(shí)初始值
        AUXR |= 0x10;                //定時(shí)器2開始計(jì)時(shí)
    EA = 1;
    IE2 |= 0X04;
    R1=0;//開機(jī)將紅燈關(guān)閉
    G1=0;//開機(jī)將綠燈關(guān)閉
    B1=0;//開機(jī)將蘭燈關(guān)閉

while(1)//程序主循環(huán):次句注解后現(xiàn)象變成綠燈閃爍,沒有注解漸變正常!
{
  RGBpwm(Rout,Gout,Bout);//調(diào)用RGBpwm子程序
}
}
/*************************************************/
/*中斷服務(wù)子程序(控制LED紅綠蘭亮滅時(shí)間占空比例)*/
/*************************************************/
//void zhong() interrupt 1//中斷向量位為1
void zhong() interrupt 12//中斷向量位為12
{
uint num;//定時(shí)器計(jì)數(shù)變量
uint ji;//亮度等級控制變量
// TH0=(65536-256)/256;//給定時(shí)器高8位賦值
// TL0=(65536-256)%256;//給定時(shí)器低8位賦值

        T2L = 0xB4;                //設(shè)置定時(shí)初始值 FEB4 30us
        T2H = 0xFE;                //設(shè)置定時(shí)初始值

num++;//將定時(shí)計(jì)數(shù)變自動(dòng)增加1
if(num==shudu)//如果速度變量等于定時(shí)計(jì)數(shù)器變量就執(zhí)行下面大括號語句
{
  num=0;//將計(jì)數(shù)器清0
  ji++;//將亮度等級控制變量加1
  if((ji>0)&&(ji<100))//如果亮度等級控制變量ji小于100,紅燈亮起時(shí)間變量為240
  {
   Rout=240;//紅燈亮起變量為240
   Gout=0;//綠燈亮起變量為0
   Bout=0;//蘭燈亮起變量為0
  }
  if((ji>100)&&(ji<340))/*如果亮度等級控制變量ji大于100小于340(剛好240個(gè)等級),
  紅燈亮起時(shí)間變量由原來的240,慢慢減小到0,同時(shí)綠燈由原來的0慢慢增到240,形成
  紅燈到綠燈的漸變過程*/
  {
   Rout-=dengji;//將紅燈變量減1。因?yàn)閐engji為亮度變化等級(本程序變化等級為1),
   Gout+=dengji;//將綠燈變量加1
   Bout=0;//蘭燈不變
  }
  if((ji>340)&&(ji<440))/*亮度等級控制變量ji大于340小于440時(shí),讓綠燈變量停一段時(shí)間
  這樣就形成了當(dāng)紅燈過度到綠燈時(shí),綠燈會(huì)停一會(huì)兒的效果。*/
  {
   Rout=0;//紅燈滅
   Gout=240;//綠燈亮
   Bout=0;//蘭燈滅
  }
  if((ji>440)&&(ji<680))//同理:亮度等級控制變量ji大于440小于680時(shí),由綠燈到蘭燈過度
  {
   Rout=0;//紅燈變量不變
   Gout-=dengji;//將綠燈變量減1
   Bout+=dengji;//將蘭燈變量加1
  }
  if((ji>680)&&(ji<780))//亮度等級控制變量ji大于680小于780時(shí),讓蘭燈變量停一段時(shí)間
  {
   Rout=0;//紅燈滅
   Gout=0;//綠燈滅
   Bout=240;//蘭燈亮一會(huì)兒
  }
  if((ji>780)&&(ji<1020))//亮度等級控制變量ji大于780小于1020時(shí),由蘭燈到白燈過度
  {
   Rout+=dengji;//將紅燈變量加1
   Gout+=dengji;//綠燈變量加1
   Bout=240;//蘭燈不變
  }
  if((ji>1020)&&(ji<1025))//亮度等級控制變量ji大于1020小于1025時(shí),由蘭燈到白燈過度
  {
   Rout=240;//將紅燈變量加1
   Gout=240;//綠燈變量加1
   Bout=240;//蘭燈不變
  }
  if((ji>1025)&&(ji<1265))//亮度等級控制變量ji大于1025小于1265時(shí),由白光到紅光過度
  {
   Rout=240;//紅燈變量不變
   Gout-=dengji;//綠燈變量自動(dòng)減1
   Bout-=dengji;//蘭燈變量自動(dòng)減1
  }
  if(ji>1265)//當(dāng)亮度等級控制變量ji大于1210時(shí),就將它清0
  ji=0;//將亮度控制等級清0
}
}


回復(fù)

使用道具 舉報(bào)

ID:624769 發(fā)表于 2021-10-17 20:39 | 顯示全部樓層
一般,主程序不能沒有while(1), 不然程序不會(huì)停,反而會(huì)亂跑,如果你學(xué)過匯編會(huì)知道,程序結(jié)束必須要有一個(gè)SJMP $ 讓程序停下來。你如果要確保運(yùn)行一次就停,就在主程序的末尾,加一個(gè) while(1);  讓程序停在那里;蛘咧鞒绦蜃詈笥茫 PCON = 0x02; 來關(guān)機(jī)。
回復(fù)

使用道具 舉報(bào)

ID:237797 發(fā)表于 2021-10-18 08:15 | 顯示全部樓層
188610329 發(fā)表于 2021-10-17 20:39
一般,主程序不能沒有while(1), 不然程序不會(huì)停,反而會(huì)亂跑,如果你學(xué)過匯編會(huì)知道,程序結(jié)束必須要有一個(gè) ...

我在程序末尾加個(gè)while(1);程序下載到單片機(jī)里,直接就沒有反應(yīng)了,不亮燈了。
回復(fù)

使用道具 舉報(bào)

ID:161164 發(fā)表于 2021-10-18 17:40 | 顯示全部樓層
lclbf 發(fā)表于 2021-10-18 08:15
我在程序末尾加個(gè)while(1);程序下載到單片機(jī)里,直接就沒有反應(yīng)了,不亮燈了。

因?yàn)闈u變是一個(gè)從零到255的過程
你只運(yùn)行一次當(dāng)然不會(huì)亮
如想只漸變一次就停止,
可用188610329總的代碼PCON = 0x02;
放到完成一次漸變的地方

提示:ji>XXXX
回復(fù)

使用道具 舉報(bào)

ID:237797 發(fā)表于 2021-10-19 09:01 | 顯示全部樓層
lkc8210 發(fā)表于 2021-10-18 17:40
因?yàn)闈u變是一個(gè)從零到255的過程
你只運(yùn)行一次當(dāng)然不會(huì)亮
如想只漸變一次就停止,

謝謝你的回復(fù),根據(jù)你的提示我改成:
if(ji<1265)
RGBpwm(Rout,Gout,Bout);

能注意看出漸變的效果。
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产欧美一区二区在线观看 | 日韩在线中文字幕 | 国产福利久久 | 亚洲国产精品一区二区三区 | 日韩精品免费在线观看 | 在线观看www视频 | 粉嫩高清一区二区三区 | 欧美精品久久久久 | 色橹橹欧美在线观看视频高清 | 欧美区在线 | 91中文字幕在线观看 | 一区二区免费在线视频 | 国产精品久久久久无码av | 亚洲午夜精品一区二区三区他趣 | 五月综合激情婷婷 | 久久新| 欧美理论在线观看 | 男女下面一进一出网站 | 亚洲高清视频一区二区 | 人人爱干 | 亚洲午夜在线 | 日韩免费网站 | 噜久寡妇噜噜久久寡妇 | 亚洲精品久久久久久久久久久 | 自拍偷拍亚洲一区 | 亚洲成人综合社区 | 男人的天堂中文字幕 | 69性欧美高清影院 | 国产免费福利在线 | 日韩一区二区在线视频 | 99爱在线 | 一区二区三区中文字幕 | 日韩视频一区二区 | 亚洲一区二区三区四区视频 | 久久这里只有精品首页 | 91免费在线视频 | 欧美黑人一区二区三区 | 国产精品亚洲第一区在线暖暖韩国 | 2019天天操| a级毛片免费高清视频 | 亚洲一区av |