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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5215|回復: 16
收起左側

急求幫助 占空比可調pwm波數兩位碼管顯示占空比

[復制鏈接]
ID:393736 發表于 2018-12-25 17:45 | 顯示全部樓層 |閱讀模式
40黑幣
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char                                                         
uchar time;
double count=50;        //定義占空比,并初始占空比為50%
sbit PWM=P3^0;      //P2^0口輸出PWM
sbit zkb_add=P3^6;   //占空比增加的按鍵 的I/O口
sbit zkb_dec=P3^7;   //占空比減小 的按鍵 的I/O口
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};        //共陽極數碼管0~9編碼

/*******數碼管顯示占空比********************/
void display_pwm()//占空比顯示
{
  uchar shi,ge;
  shi=count/10;    //十位
  ge=count%10;   //個位

  dula=0;
  P1=table[shi];
  delayms(5);
  dula=1;

  wela=0;
  P1=table[ge];
  delayms(5);
  wela=1;
}
/****************延時處理**********************/
void delayms(uint z) //延時xms程序
{
    uint x,y;
        for(y=z;x>0;x--)
                for(y=110;y>0;y--);
}


void keyscan()  //按鍵掃描
{
     display_pwm();
       if(zkb_add==0)            
       {
               count=count+10;        //每按一次占空比增加按鍵占空比加10%
               if(count>100)                                 //限定占空比上限
        {
         count=0;
        }
        }
      if(zkb_dec==0)
      {
          count=count-10;                 //每按一次占空比減小按鍵占空比減10%
               if(count<0)    //限定占空比下限
               {
        count=100;
               }
  }
       
}

/***********定時器0初始化***********/
void timer0_init()
{
  TMOD=0x01; //定時器0工作于方式1
  TH0=(65536-10)/256;
  TL0=(65536-10)%256;
  TR0=1;
  ET0=1;
  EA=1;
}

/**************定時0中斷處理******************/
void timer0_init() interrupt 1
{
       
  TR0=0;    //設置定時器初值期間,關閉定時器
  TH0=(65536-10)/256;
  TL0=(65536-10)%256;
  TR0=1;
  time++;

  if(time<count)          //count為占空比
  {
        PWM=1;           //輸出高電平
  }
  else
        PWM=0;       
  if(time>=100)
  {
        time=0;
  }

  display_pwm();

}

/*********主函數********************/
void main()
{         
        timer0_init();
        delayms(5);
        while(1)
        {
        keyscan();
        }
       

}
//急急急,仿真后數碼管和輸出pwm的io口沒有變化,一直處于高電平  求助一下論壇的朋友老師,還請指正,單片機界的小學生在此謝過。
QQ圖片20181225173204.png

最佳答案

查看完整內容

占空比1~99可調, #include typedef unsigned char uchar; typedef unsigned int uint; sbit Key1=P3^0; sbit Key2=P3^1; sbit PWM=P1^0; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; uchar count,time,i; void delayms(uint k) { uint i,j; for(i=k;i>0;i--) for(j=110;j>0;j--); } void Timer0Init() //100微秒@12.000 ...
回復

使用道具 舉報

ID:213173 發表于 2018-12-25 17:45 | 顯示全部樓層
本帖最后由 wulin 于 2018-12-29 16:41 編輯

占空比1~99可調,
無標題.jpg


#include<reg52.h>
typedef unsigned char uchar;
typedef unsigned int uint;

sbit Key1=P3^0;
sbit Key2=P3^1;
sbit PWM=P1^0;
uchar  code table[]={
        0x3f,0x06,0x5b,0x4f,
        0x66,0x6d,0x7d,0x07,
        0x7f,0x6f,0x77,0x7c,
        0x39,0x5e,0x79,0x71};
uchar count,time,i;

void delayms(uint k)
{
        uint i,j;
        for(i=k;i>0;i--)
                for(j=110;j>0;j--);
}
void Timer0Init()                //100微秒@12.000MHz
{
        TMOD |= 0x02;                //設置定時器模式
        TL0 = 0x9C;                //設置定時初值
        TH0 = 0x9C;                //設置定時重載值
        TF0 = 0;                //清除TF0標志
        TR0 = 1;                //定時器0開始計時
        EA=1;
        ET0=1;
}
void display()
{
        static bit num=0;
        P0=0x00;
        if(num)
        {
                P2=~0xfe;
                P0=table[i/10];
                num=~num;
        }
        else
        {
                P2=~0xfd;
                P0=table[i%10];
                num=~num;
        }
}

void main( )
{
        Timer0Init();       
        count=99;
        i=100-count;
        while(1)
        {
                if(!Key1)//
                {
                        delayms(10);
                        if(!Key1)
                        {
                                if(count>1)
                                        count--;               
                                while(!Key1);
                                i=100-count;
                        }
                }
                if(!Key2)
                {
                        delayms(10);
                        if(!Key2)
                        {
                                if(count<99)
                                        count++;               
                                while(!Key2);
                                i=100-count;
                        }
                }
        }
}
void timer0() interrupt        1  
{
        time++;
        if(count>=time)
                PWM=1;
        else   PWM=0;
        if(time>99)
                time=0;
        if(time%10==0)
                display();
}

回復

使用道具 舉報

ID:453955 發表于 2018-12-25 19:33 | 顯示全部樓層
啊。我也是初學者。剛剛看了下,我對PWM目前還不是很了解;等我過兩天學習了再和你交流~
回復

使用道具 舉報

ID:453955 發表于 2018-12-26 11:23 | 顯示全部樓層
你占空比上下限那里有點問題吧。。上下限反了,超過上限應該就是100,不應該是0.。我覺得;還要就是按鍵防抖延時我好像沒看到。?
回復

使用道具 舉報

ID:455286 發表于 2018-12-26 12:26 | 顯示全部樓層
我有PWM輸出占空比可調周期可調的程序,通過按鍵調解,并在1602顯示當前PWM的信息,需要嗎
回復

使用道具 舉報

ID:393736 發表于 2018-12-26 14:20 來自手機 | 顯示全部樓層
MR_CHEN12 發表于 2018-12-26 12:26
我有PWM輸出占空比可調周期可調的程序,通過按鍵調解,并在1602顯示當前PWM的信息,需要嗎

首先感謝這位朋友的回答 。占空比可調的程序我已經有了,F在的問題就是兩位共陽極數碼管顯示的問題。不知道這位朋友能不能幫我看一下程序哪里出問題了 或者電路圖。謝謝
回復

使用道具 舉報

ID:393736 發表于 2018-12-26 14:23 來自手機 | 顯示全部樓層
我要上哈工大 發表于 2018-12-26 11:23
你占空比上下限那里有點問題吧。。上下限反了,超過上限應該就是100,不應該是0.。我覺得;還要就是按鍵防 ...

嗯 按鍵防抖的確沒有考慮到 還請這位朋友點撥一下。還有就是現在波形輸出無誤且可調了。但是數碼管不能正常顯示 只能亮88 00,不知道怎么回事
回復

使用道具 舉報

ID:453955 發表于 2018-12-27 18:39 | 顯示全部樓層
void Motor_speed_high(void)
{
        if(Key1==0)
        {
                  Delay(10);
                  if(Key1==0)
                  {
                    count0 += 25;
  
                    if(count0 >= 100)
                    {
                            count0 = 100;
                    }
                  }
                  while(!Key1);
        }
}

這是我用PWM調電機轉速時的程序,就比你多了延時防抖
回復

使用道具 舉報

ID:453955 發表于 2018-12-27 18:47 | 顯示全部樓層
還有,朋友你的占空比上下限的設定真的弄反了哈哈哈
回復

使用道具 舉報

ID:449525 發表于 2018-12-28 10:24 | 顯示全部樓層
先各個部分確認,你的顯示有沒有問題?數字都正常顯示么?
還有就是pwm用個定時器控制頻率,01多少控制占空比,自己去研究下,不難
回復

使用道具 舉報

ID:456666 發表于 2018-12-28 15:12 | 顯示全部樓層
嗯 按鍵防抖的確沒有考慮到 還請這位朋友點撥一下。還有就是現在波形輸出無誤且可調了。但是數碼管不能正常顯示 只能亮88 00
回復

使用道具 舉報

ID:393736 發表于 2018-12-28 23:00 | 顯示全部樓層
huiyu 發表于 2018-12-28 15:12
嗯 按鍵防抖的確沒有考慮到 還請這位朋友點撥一下。還有就是現在波形輸出無誤且可調了。但是數碼管不能正常 ...

數碼管顯示問題需要改中斷時間和數碼管延時時間  我的分別是 20ms 和 2ms   
按鍵消抖目前沒整明白
回復

使用道具 舉報

ID:393736 發表于 2018-12-29 10:44 | 顯示全部樓層
周超然 發表于 2018-12-28 10:24
先各個部分確認,你的顯示有沒有問題?數字都正常顯示么?
還有就是pwm用個定時器控制頻率,01多少控制占 ...

pwm周期20ms pwm端波形沒有問題 按鍵也能控制占空比增減
回復

使用道具 舉報

ID:393736 發表于 2018-12-29 21:11 | 顯示全部樓層
wulin 發表于 2018-12-29 15:58
占空比1~99可調,

謝謝你占空比程序  現在有另外的問題就是  輸出電壓和占空比不線性  
回復

使用道具 舉報

ID:438568 發表于 2018-12-30 19:37 | 顯示全部樓層
第一:檢查一下數碼管是共陰還是共陽,代碼里面是共陽
回復

使用道具 舉報

ID:393736 發表于 2018-12-30 22:25 | 顯示全部樓層
大懶貓的可樂 發表于 2018-12-30 19:37
第一:檢查一下數碼管是共陰還是共陽,代碼里面是共陽

是共陽
回復

使用道具 舉報

ID:465221 發表于 2019-1-9 16:49 | 顯示全部樓層
請問這個有pcb圖嗎
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 免费人成激情视频在线观看冫 | 国产91九色 | 老牛嫩草一区二区三区av | 国产精品网址 | 99爱免费| 人人干在线视频 | 亚洲视频在线看 | 欧美精品一区二区三区在线播放 | 欧美日本在线 | 国产精品视频在线观看 | 日韩在线观看精品 | 日本三级电影免费观看 | 国产精品成人国产乱一区 | 日韩在线观看中文字幕 | 久久小视频 | 韩国毛片视频 | 亚洲国产专区 | 青青草精品视频 | 99久久免费精品国产男女高不卡 | 国产97色 | 91av免费观看| 成人片免费看 | 亚洲成人久久久 | 色视频在线播放 | www国产成人免费观看视频 | 国产精品黄视频 | 国产精品毛片一区二区三区 | 色吧综合网 | 夜操 | 狠狠干狠狠操 | 久久精品国产一区 | 精品96久久久久久中文字幕无 | 国产精品久久午夜夜伦鲁鲁 | 国产成人jvid在线播放 | 蜜桃毛片 | 欧美亚洲一区二区三区 | av看片网站 | 国产精品亚洲一区二区三区在线 | 色悠悠久 | 国产成人精品一区二区三区在线 | 欧美一区二区三 |