找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1470|回復(fù): 7
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)程序有問題,已經(jīng)用adc測(cè)得光敏數(shù)值,然后想用pwm控制led,有占空比的那種

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1068108 發(fā)表于 2023-4-17 10:10 來自手機(jī) | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
已經(jīng)用adc測(cè)得光敏數(shù)值,然后想用pwm控制led,有占空比的那種,但是led不亮,想問問什么原因,下面是程序
#include "STC15F2K60S2.h"
#include "main.h"
#include "LCD1602.h"
#include "ADC.h"
#include "led.h"


unsigned char str[5];
unsigned int backup=0;
unsigned char aa[]={'L','I','G','H','T'  ,':'};
unsigned int result;
unsigned int result1;
sbit light_pwm=P2^1;
unsigned char duty_cycle=0;
bit flag=0;



void delay_nms(unsigned int n)
{
        unsigned int i,j;
        for(i=0;i<n;i++)
        {
                for(j=0;j<125;j++);
        }
}

void main()
{        
//        zd_count=0;
//        update_count=0;
//        pwm_value=0;
//        flag=0;
//
        Timer0Init();


        ET0=1;  //打開定時(shí)器0中斷
  EA=1;        //打開總中斷
        



  light_pwm=1;
        init();
        Init_ADC();
  LCD_Write_String(0,1,aa);               


        while (1)
        {        
                adc_light_display();
                        if(!flag)
                        {
                                duty_cycle++;
                                if(duty_cycle==255)
                                {
                                        flag=1;
                                }
                        }
                        else
                        {
                                duty_cycle--;
                                if(duty_cycle==0)
                                {
                                        flag=0;
                                }
                        }

                        light_pwm= (duty_cycle == 0 || duty_cycle == 255) ? 0 : 1;
                        delay_nms(10);
                                
        }

}

//ADC數(shù)值讀取轉(zhuǎn)化
void adc_light_display()
{
         result1=ADC_Chang(2);
         result=result1*4.75;
        
                         while (result!=backup)
                        {
        
                                str[0]=result/1000%100+'0';        
                                str[1]=result/100%10+'0';
                                str[2]='.';
                                str[3]=result/10%10+'0';
        str[4]=result%10+'0';                                
                                str[5]='\0';
                                                
                                LCD_Write_String(6,1,str);  
                          backup=result;
                                
                        }
}







//定時(shí)器0初始化函數(shù),可由ISP軟件生成
void Timer0Init(void)                //1毫秒@11.0592MHz
{
        AUXR |= 0x80;                //定時(shí)器時(shí)鐘1T模式
        TMOD &= 0xF0;                //設(shè)置定時(shí)器為16位自動(dòng)重裝載模式,較常使用
        TL0 = 0xCD;                //設(shè)置定時(shí)初值
        TH0 = 0xD4;                //設(shè)置定時(shí)初值
        
        TF0 = 0;                //清除TF0標(biāo)志
        TR0 = 1;                //定時(shí)器0開始計(jì)時(shí)
        

}



//定時(shí)器0中斷服務(wù)函數(shù)
void Time0_Int(void) interrupt 1        //定時(shí)器1為3
{
  TL0 = 0xCD;                //設(shè)置定時(shí)初值
        TH0 = 0xD4;                //設(shè)置定時(shí)初值
  light_pwm=duty_cycle;
        }
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:584814 發(fā)表于 2023-4-17 11:08 | 只看該作者
STC的單片機(jī)用PWM控制,可以直接在廠家的例程里CV。
回復(fù)

使用道具 舉報(bào)

板凳
ID:1072104 發(fā)表于 2023-4-17 11:21 | 只看該作者
根據(jù)你提供的代碼,LED不亮的問題可能有以下原因:
1.PWM輸出管腳配置錯(cuò)誤;
2.PWM占空比計(jì)算有誤;
3.LED驅(qū)動(dòng)電路連接錯(cuò)誤;
4.程序邏輯問題。
其中,1和2是比較常見的問題?梢苑謩e檢查這兩個(gè)方面。
PWM輸出管腳配置錯(cuò)誤
根據(jù)你的代碼,PWM的輸出管腳為P2.1,但是沒有看到相關(guān)初始化操作。因此,需要確認(rèn)是否已經(jīng)正確設(shè)置端口的工作模式,以及是否打開了PWM輸出使能。

修改方法:在程序中添加以下代碼,初始化PWM輸出引腳,并打開PWM輸出使能:

sfr PWM4_MAP = 0xFE; // PWM pin map register
sfr PWMCON1  = 0xF7; // PWM 1-4 control register

void InitPWM(void)
{
    PWM4_MAP |= 0x10;  // P2.1 mapped to PWM4
    PWMCON1 |= 0x40;   // PWM4 output enabled
}
在主函數(shù)中調(diào)用InitPWM()函數(shù)進(jìn)行初始化。

PWM占空比計(jì)算有誤
根據(jù)你的代碼,PWM占空比是通過修改light_pwm變量實(shí)現(xiàn)的。但是,light_pwm被定義為一個(gè)sbit類型,只能存儲(chǔ)0或1(即PWM占空比為0或100%),不能存儲(chǔ)其他值。因此,需要使用另外一個(gè)變量存儲(chǔ)PWM占空比,例如duty_cycle變量。

另外,根據(jù)你的程序邏輯,在電平切換之間,通過delay_nms函數(shù)延時(shí)了10ms。這樣可能會(huì)導(dǎo)致PWM頻率比較低,影響LED的亮度。因此,建議調(diào)整延時(shí)時(shí)間,例如設(shè)為1ms。

修改方法:將light_pwm變量改為duty_cycle變量,并定義一個(gè)flag變量來控制PWM占空比的增減。修改代碼如下:

sbit light_pwm = P2^1;
unsigned char duty_cycle = 0;  // PWM占空比
bit flag = 0;  // 標(biāo)志位,用于控制PWM占空比的增減

void main()
{      
    // ...

    InitPWM();

    while (1)
    {      
        adc_light_display();

        if (!flag)
        {
            duty_cycle++;
            if (duty_cycle == 255)
            {
                flag = 1;
            }
        }
        else
        {
            duty_cycle--;
            if (duty_cycle == 0)
            {
                flag = 0;
            }
        }

        light_pwm = (duty_cycle == 0 || duty_cycle == 255) ? 0 : 1;

        delay_nms(1);   
    }
}
修改后,可以嘗試重新編譯、下載并運(yùn)行程序,測(cè)試PWM是否能夠正確控制LED的亮度。如果還有問題,可以依次檢查其他可能的原因。
回復(fù)

使用道具 舉報(bào)

地板
ID:1068108 發(fā)表于 2023-4-17 12:06 來自手機(jī) | 只看該作者
man1234567 發(fā)表于 2023-4-17 11:08
STC的單片機(jī)用PWM控制,可以直接在廠家的例程里CV。

廠家歷程是stc里面的嗎
回復(fù)

使用道具 舉報(bào)

5#
ID:1068108 發(fā)表于 2023-4-17 12:59 來自手機(jī) | 只看該作者
張大炮ie 發(fā)表于 2023-4-17 11:21
根據(jù)你提供的代碼,LED不亮的問題可能有以下原因:
1.PWM輸出管腳配置錯(cuò)誤;
2.PWM占空比計(jì)算有誤;

謝謝幫助
回復(fù)

使用道具 舉報(bào)

6#
ID:94031 發(fā)表于 2023-4-17 14:38 | 只看該作者
STC15系列A版單片機(jī),部分端口復(fù)位后,不是準(zhǔn)雙向口,需要設(shè)置才能正常使用。
回復(fù)

使用道具 舉報(bào)

7#
ID:1068108 發(fā)表于 2023-4-17 16:43 來自手機(jī) | 只看該作者
xuyaqi 發(fā)表于 2023-4-17 14:38
STC15系列A版單片機(jī),部分端口復(fù)位后,不是準(zhǔn)雙向口,需要設(shè)置才能正常使用。

請(qǐng)問怎么設(shè)置
回復(fù)

使用道具 舉報(bào)

8#
ID:1068108 發(fā)表于 2023-4-17 16:45 來自手機(jī) | 只看該作者
張大炮ie 發(fā)表于 2023-4-17 11:21
根據(jù)你提供的代碼,LED不亮的問題可能有以下原因:
1.PWM輸出管腳配置錯(cuò)誤;
2.PWM占空比計(jì)算有誤;

大佬,你好,我現(xiàn)在修改了,但是我的仿真led是一會(huì)亮一會(huì)滅,好像沒有根據(jù)光線的值改變亮暗
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表