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

標題: 單片機呼吸燈效果不明顯是為什么? [打印本頁]

作者: 放眼天下    時間: 2019-2-14 10:16
標題: 單片機呼吸燈效果不明顯是為什么?
我用DA模數轉換的方法PWM調了一個呼吸燈,但是感覺呼吸效果不明顯,就是燒上程序之后,燈是一直亮著的,看不出來呼吸效果,我覺得可能是周期或者頻率設置不太合理,請大佬們幫忙看看。初學51,請多指教!
#include "reg52.h"                         //此文件中定義了單片機的一些特殊功能寄存器

typedef unsigned int u16;          //對數據類型進行聲明定義
typedef unsigned char u8;

//--定義使用的IO口--//
sbit PWM=P2^1;
bit DIR;

//--定義一個全局變量--//
u16 count,value,timer1;

/*******************************************************************************
* 函 數 名         : Timer1Init
* 函數功能                   : 定時器1初始化
* 輸    入         : 無
* 輸    出         : 無
*******************************************************************************/
void Timer1Init()
{
        TMOD|=0X10;//選擇為定時器1模式,工作方式1,僅用TR1打開啟動。

        TH1 = 0xFF;
        TL1 = 0xff;   //1us
               
        ET1=1;//打開定時器1中斷允許
        EA=1;//打開總中斷
        TR1=1;//打開定時器                        
}


/*******************************************************************************
* 函 數 名       : main
* 函數功能                 : 主函數
* 輸    入       : 無
* 輸    出             : 無
*******************************************************************************/
void main()
{        
        Timer1Init();  //定時器1初始化
        while(1)
        {
                if(count>100)                                                        
                {  
                        count=0;
                        if(DIR==1)                                           //DIR控制增加或減小
                        {
                          value++;
                        }                        
                        if(DIR==0)
                        {
                          value--;
                        }
                                
                }

                if(value==1000)
                {
                  DIR=0;
                }
                if(value==0)
                {
                  DIR=1;
                }        
                                
                if(timer1>1000)  //PWM周期為1000*1us
                {
                        timer1=0;
                }
                if(timer1 <value)        
                {
                        PWM=1;
                }
                else
                {
                        PWM=0;
                }               
        }               
}

/*******************************************************************************
* 函 數 名       : Time1
* 函數功能                 : 定時器1的中斷函數
* 輸    入       : 無
* 輸    出       : 無
*******************************************************************************/

void Time1(void) interrupt 3    //3 為定時器1的中斷號  1 定時器0的中斷號 0 外部中斷1 2 外部中斷2  4 串口中斷
{
        TH1 = 0xFF;
        TL1 = 0xff;   //1us
        timer1++;
    count++;
        
}



作者: yzwzfyz    時間: 2019-2-14 11:54
人眼對緩變或微變不敏感,請考慮:
1、一次亮度改變量加大
2、一種亮度保持時間控制在0.5秒左右。
試試以上。
作者: HC6800-ES-V2.0    時間: 2019-2-14 14:43
第一:程序沒問題,我在我的板子上試驗通過了的。
第二:可以改變主函數中第一個if的值,我改變為50時,呼吸變快
我的板子是HC6800-ES-V2.0,單片機是STC90C516RD+,12M晶振
作者: 周超然    時間: 2019-2-14 15:36
你用PWM控制的是亮度,呼吸燈,直接延時01不就行了么?
如果你想控制呼吸燈的亮度,那就住下延時間隔。
作者: laok    時間: 2019-2-14 16:30
是不是硬件問題啊?供電有沒有問題,也要實際測量一下
作者: wulin    時間: 2019-2-14 16:45
定時器設置不當,中斷函數執行4條代碼的時間遠遠超過1us,CPU哪來時間執行主函數?給你改了一下,你試試。

#include "reg52.h"    //此文件中定義了單片機的一些特殊功能寄存器

typedef unsigned int u16; //對數據類型進行聲明定義
typedef unsigned char u8;

//--定義使用的IO口--//
sbit PWM=P2^1;
bit DIR;

//--定義一個全局變量--//
u16 count,value,timer1;

/*******************************************************************************
* 函 數 名         : Timer1Init
* 函數功能                   : 定時器1初始化
* 輸    入         : 無
* 輸    出         : 無
*******************************************************************************/
void Timer1Init()                //100微秒@12.000MHz
{
        TMOD |= 0x20;                //設置定時器自動重載模式
        TL1 = 0x9C;                //設置定時初值
        TH1 = 0x9C;                //設置定時重載值
        ET1=1;//打開定時器1中斷允許
        EA=1;//打開總中斷
        TR1=1;//打開定時器                        
}


/*******************************************************************************
* 函 數 名       : main
* 函數功能       : 主函數
* 輸    入       : 無
* 輸    出             : 無
*******************************************************************************/
void main()
{        
        Timer1Init();  //定時器1初始化
        while(1)
        {
                if(count>=200)
                {  
                        count=0;
                        if(DIR==1)//DIR控制增加或減小
                        {
                                value++;
                        }                        
                        if(DIR==0)
                        {
                                value--;
                        }
                }       
                if(value>=100)
                {
                        DIR=0;
                }
                if(value==0)
                {
                        DIR=1;
                }               
                if(timer1>100)
                {
                        timer1=0;
                }
                if(timer1 <value)        
                {
                        PWM=1;
                }
                else
                {
                        PWM=0;
                }               
        }               
}

/*******************************************************************************
* 函 數 名       : Time1
* 函數功能       : 定時器1的中斷函數
* 輸    入       : 無
* 輸    出       : 無
*******************************************************************************/

void Time1(void) interrupt 3    //3 為定時器1的中斷號
{
        timer1++;
        count++;
}

作者: 放眼天下    時間: 2019-2-15 10:21
wulin 發表于 2019-2-14 16:45
定時器設置不當,中斷函數執行4條代碼的時間遠遠超過1us,CPU哪來時間執行主函數?給你改了一下,你試試。
...

好的,謝謝,我試一下
作者: 放眼天下    時間: 2019-2-15 10:25
HC6800-ES-V2.0 發表于 2019-2-14 14:43
第一:程序沒問題,我在我的板子上試驗通過了的。
第二:可以改變主函數中第一個if的值,我改變為50時,呼 ...

好的,我試試
作者: 放眼天下    時間: 2019-2-15 10:48
wulin 發表于 2019-2-14 16:45
定時器設置不當,中斷函數執行4條代碼的時間遠遠超過1us,CPU哪來時間執行主函數?給你改了一下,你試試。
...

中斷函數里面不需要重新把TH1和TL1賦值嗎?而且這個我試了感覺效果也不明顯,看起來還是一直亮
作者: toby2006    時間: 2019-2-15 11:01
可能是硬件的問題
作者: 風逝-    時間: 2019-2-15 11:51
放眼天下 發表于 2019-2-15 10:48
中斷函數里面不需要重新把TH1和TL1賦值嗎?而且這個我試了感覺效果也不明顯,看起來還是一直亮

定時時間設置長些
作者: wulin    時間: 2019-2-15 13:08
放眼天下 發表于 2019-2-15 10:48
中斷函數里面不需要重新把TH1和TL1賦值嗎?而且這個我試了感覺效果也不明顯,看起來還是一直亮

1.因為使用定時器自動重裝,中斷函數里面不需要重新把TH1和TL1賦值。
2.這個程序是經過實物驗證過的,沒有問題。你如果用仿真軟件調試當然看不出效果,只能用仿真軟件的示波器看波形來確認。


作者: joyb    時間: 2023-3-17 17:35
初學需要學習仿真軟件嗎?




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 欧美中文字幕在线观看 | 一区二区三区久久久 | 一区二区在线看 | 在线观看中文字幕 | 日韩中文字幕在线观看 | 欧美一级精品片在线看 | 日韩欧美亚洲 | 九九热在线精品视频 | 天天综合干 | 中文在线播放 | 韩国av电影网 | av天天澡天天爽天天av | 国产乱码一区 | 日韩午夜一区二区三区 | 久久精品国产99国产精品 | 午夜爱爱毛片xxxx视频免费看 | 免费黄色网址视频 | 午夜影院在线免费观看视频 | 日本精品一区二区三区视频 | 久艹av| 男女搞网站 | 范冰冰一级做a爰片久久毛片 | 日本理论片好看理论片 | 麻豆精品国产免费 | av天天爽 | 91精品麻豆日日躁夜夜躁 | 99精品免费在线观看 | 久久成人国产 | 精品一区二区在线观看 | 偷拍亚洲色图 | av播播 | 亚洲精品乱码久久久久久9色 | 三级在线免费 | 天堂网色 | 午夜在线精品 | 精品一区二区三区在线播放 | 黄色一级特级片 | www.狠狠操| 欧美成人专区 | 日韩a视频 | 久久久久久黄 |