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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2455|回復: 8
打印 上一主題 下一主題
收起左側

單片機DIY,無法實現用開關進行LED燈色溫切換,不知問題出在哪里? 附程序

[復制鏈接]
跳轉到指定樓層
樓主
想利用墻上開關進行開--關切換LED燈的色溫,第一次開白光亮,第二次開黃光亮,第三次開白光黃光同時亮。程序借鑒了論壇大佬上傳的。但好像實現不了,無法切換!

單片機源程序如下:
#include<reg51.h>       //*使用S0P-8 STC15F104W芯片*//
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int

uint key2_time_cnt;//*按鍵去抖計數器*//
uchar key2_lock;//*按鍵有效標志*//
uchar key2_num_s;//*開關開關有多少種功能*//
char key2_touch_s_flag;//*交流電斷電有效標志*//
uint shuzi;//*開關次數
uchar SYS1MS;//*時標開關標志*//
uchar AUXR;
sbit W=P3^4;//*白光*//
sbit C=        P3^5;//*黃光*//

sbit PWM=P3^2;//*交流信號檢測*//
void Timer0Init()//*定時器0初始化*//
{
        AUXR &= 0x7F;                //定時器12T時鐘模式
        TMOD &= 0xF0;                //設置定時器的模式
        TL0 = 0x00;                //*定時器初值
        TH0 = 0xDC;               
        TF0 = 0;         //清除TFO標志        
        TR0 = 1;  //定時器0開始計時                     
                                                        
        EA=1;                   //中斷總開關
        ET0=1;                  //允許中斷
        
                                
                        
              
}

void key_scan2()//*交流電信號的判斷*//
{
if(PWM==1)
{
  key2_lock=0;
  key2_time_cnt=0;
  if(key2_touch_s_flag==1)
  {
     
      key2_touch_s_flag=0;
      key2_num_s++;
      if(key2_num_s>2)key2_num_s=0;
  }

}
else if(key2_lock==0)
{
   key2_time_cnt++;
   if(key2_time_cnt>149)
  {
     key2_touch_s_flag=1;
     key2_time_cnt=0;
     key2_lock=1;
     
  }
}
}

void key_service2()//*開關功能的內容*//
{

switch(key2_num_s)
{
  case 0:
        W=1;
        C=0;
        
  
        //key2_num_s=0;
        break;
   case 1:
       W=0;
        C=1;
               

        //key2_num_s=0;
        break;
   case 2:
        W=1;
        C=1;
                                
       // key2_num_s=0;
        break;
  
  }
  
}

void main()//*主程序*//
{
        Timer0Init();
while(1)
{
if(SYS1MS==1)
{
SYS1MS=0;
key_scan2();
}
key_service2();
}
}

void exint0()interrupt 0//*中斷函數*//
{
      if((TR0&ET0)==1)
  {   
        TR0=0;
         ET0=1;
                                                
        TL0 = 0x00;        //*定時器低8位初裝數值*//        
        TH0 = 0xDC;//*        定時器高8位初裝值*//
                                       
            shuzi++;
            if(shuzi==2)
            {
               shuzi=0;
               SYS1MS=1;
            }
           
            
            TR0=1;
  }
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:213173 發表于 2022-10-31 20:37 | 只看該作者
這個應用電路非常簡單。市售的家用燈具大量使用。其基本原理就是利用開關短暫斷電給單片機提供低電平信號,用以切換燈串的不同組合。單片機靠濾波電容維持短暫供電。






回復

使用道具 舉報

板凳
ID:213173 發表于 2022-10-31 20:45 | 只看該作者
按上圖示意,可以用 STC15F104W  P3.2外部中斷做功能切換。
回復

使用道具 舉報

地板
ID:161164 發表于 2022-10-31 21:52 | 只看該作者
你開了定時器的中斷但沒有中斷函數
回復

使用道具 舉報

5#
ID:123289 發表于 2022-11-1 09:18 | 只看該作者
除沙發說的用電容記憶方案外,還有用EEPROM記憶的方案:

1、用內部EEPROM做個計數器WY。WY=00,01,10,11。對應不亮,白、黃、白黃燈亮。初始WY=00。
2、每次上電后,將WY+1,如果=00,就改成01,不是00不改以防出現開關開啟后燈不亮。并據之輸出燈控制信號,讓對應的燈亮。N秒后再將WY-1,恢復原態,這里假設N取1秒。
這樣就成功了。
原理:
1、開關上電后,由于WY+1,所以會改變亮燈的狀態,做到依次:白、黃、白黃。
2、N秒后將WY-1,退回原態,這樣只要每次通電多于N分鐘,則下次通電時,燈的狀態組合就不變了。
3、如果通電時間<N秒,則WY來不及-1,恢復原狀態,下次開燈必然變態了。
要點:WY用非易失性存儲器。這樣掉電后WY不變。

比較:
電容記憶方案:需要檢測交流電是否掉電,電容儲能必須保證掉電后,系統能繼續工作N秒以上,節省了EEPROM。
EEPROM方案:要EEPROM就行了。

回復

使用道具 舉報

6#
ID:706724 發表于 2022-11-4 11:35 | 只看該作者
wulin 發表于 2022-10-31 20:45
按上圖示意,可以用 STC15F104W  P3.2外部中斷做功能切換。

這個 單片機好像是上升沿或下降沿中斷觸發的。低電平不觸發的,還沒想到該怎么寫中斷?本人小白也
回復

使用道具 舉報

7#
ID:706724 發表于 2022-11-4 11:39 | 只看該作者
lkc8210 發表于 2022-10-31 21:52
你開了定時器的中斷但沒有中斷函數

你好,本人小白請指教一下,我后面改了:
void Timer0()interrupt 1 using 0//*¶¨ê±Æ÷ÖD¶Ïoˉêy*//
{
      if((TR0&TF0)==1)
  {   
                                TR0=0;
        TF0=0;
                                               
                                TL0 = 0x00;        //*¶¨ê±Æ÷μí8λ3õ×°êyÖμ*//       
                                TH0 = 0xDC;//*        ¶¨ê±Æ÷¸ß8λ3õ×°Öμ*//
                                       
            shuzi++;
            if(shuzi==2)
            {
               shuzi=0;
               SYS1MS=1;
            }
           
            
            TR0=1;
  }
}
回復

使用道具 舉報

8#
ID:706724 發表于 2022-11-4 11:41 | 只看該作者
yzwzfyz 發表于 2022-11-1 09:18
除沙發說的用電容記憶方案外,還有用EEPROM記憶的方案:

1、用內部EEPROM做個計數器WY。WY=00,01,10, ...

感謝提供了這么好的思路,先按照電容供電這個弄,弄好了再學習EEPROM這個,實力不濟啊!
回復

使用道具 舉報

9#
ID:213173 發表于 2022-11-4 12:00 | 只看該作者
木示 發表于 2022-11-4 11:35
這個 單片機好像是上升沿或下降沿中斷觸發的。低電平不觸發的,還沒想到該怎么寫中斷?本人小白也

你真是小白,潔白無瑕,從高電平轉換到低電平不就是下降沿?
回復

使用道具 舉報

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

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99热这里| 国产小视频在线观看 | 日韩色视频 | 亚洲黄色片免费观看 | 日韩一区精品 | 91电影在线播放 | 国产精品片aa在线观看 | 在线亚洲电影 | 亚洲免费人成在线视频观看 | 热re99久久精品国产99热 | 成人免费网站在线 | 在线看av网址 | 国产在线观看一区二区三区 | 久久综合成人精品亚洲另类欧美 | 久久精品影视 | 国产二区视频 | 韩日一区二区 | 亚洲欧美综合精品久久成人 | 中文字幕在线观看成人 | 99re热精品视频 | 国产精品久久久久久久久久久新郎 | 激情综合五月天 | 在线综合视频 | 欧美成人精品一区 | 国产精品视频不卡 | 国产精品久久久久无码av | 日日综合 | 污片在线免费观看 | 久久久久久国产免费视网址 | 精品久久久久久久久久 | 欧美一区二区三区免费在线观看 | 美女人人操 | 日韩成人免费视频 | 国产1页 | 欧美xxxx色视频在线观看免费 | 色婷综合网| 亚洲成人综合社区 | 伊人久久综合 | 国产精品久久久久久 | 成年人网站在线观看视频 | 自拍偷拍第一页 |