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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機程序有問題,已經用adc測得光敏數值,然后想用pwm控制led,有占空比的那種

[復制鏈接]
跳轉到指定樓層
樓主
ID:1068108 發表于 2023-4-17 10:10 來自手機 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
已經用adc測得光敏數值,然后想用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;  //打開定時器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數值讀取轉化
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;
                                
                        }
}







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

}



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

使用道具 舉報

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

使用道具 舉報

板凳
ID:1072104 發表于 2023-4-17 11:21 | 只看該作者
根據你提供的代碼,LED不亮的問題可能有以下原因:
1.PWM輸出管腳配置錯誤;
2.PWM占空比計算有誤;
3.LED驅動電路連接錯誤;
4.程序邏輯問題。
其中,1和2是比較常見的問題。可以分別檢查這兩個方面。
PWM輸出管腳配置錯誤
根據你的代碼,PWM的輸出管腳為P2.1,但是沒有看到相關初始化操作。因此,需要確認是否已經正確設置端口的工作模式,以及是否打開了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
}
在主函數中調用InitPWM()函數進行初始化。

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

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

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

sbit light_pwm = P2^1;
unsigned char duty_cycle = 0;  // PWM占空比
bit flag = 0;  // 標志位,用于控制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);   
    }
}
修改后,可以嘗試重新編譯、下載并運行程序,測試PWM是否能夠正確控制LED的亮度。如果還有問題,可以依次檢查其他可能的原因。
回復

使用道具 舉報

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

廠家歷程是stc里面的嗎
回復

使用道具 舉報

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

謝謝幫助
回復

使用道具 舉報

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

使用道具 舉報

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

請問怎么設置
回復

使用道具 舉報

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

大佬,你好,我現在修改了,但是我的仿真led是一會亮一會滅,好像沒有根據光線的值改變亮暗
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美在线a | 欧美在线成人影院 | 亚洲乱码一区二区三区在线观看 | 久久成人精品视频 | 一区二区三区四区电影视频在线观看 | 久久国产婷婷国产香蕉 | 久久精品视频免费观看 | 日韩国产一区二区三区 | 免费午夜电影 | 成人精品啪啪欧美成 | 国产精品毛片无码 | 久久久影院 | 欧美一区二区在线 | 欧美亚洲视频在线观看 | 亚洲在线 | 久久成人精品视频 | 天天拍天天操 | 免费久草 | 日本一区视频在线观看 | 午夜激情影院 | 国产欧美日韩一区二区三区在线 | 国产一级免费在线观看 | 精品欧美久久 | 日韩欧美国产一区二区三区 | 国产91久久久久久 | 精品国偷自产在线 | 国产亚洲精品久久午夜玫瑰园 | 伊人一二三 | h视频免费观看 | 国产精品欧美一区二区三区不卡 | 欧美综合色 | 久久久人成影片一区二区三区 | www.嫩草| 成人毛片在线视频 | 少妇一级淫片免费放播放 | 国产精品久久毛片av大全日韩 | 一区二区视频免费观看 | 一区二区三区四区在线视频 | 成人免费精品 | 成人在线精品视频 | 欧美精品欧美精品系列 |