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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4462|回復: 7
收起左側

基于STC89C52RC單片機制作的頻率及占空比均可調程序

  [復制鏈接]
ID:280979 發表于 2019-11-5 22:37 | 顯示全部樓層 |閱讀模式
注意  單片機必須是52rc不能用60s2


*/

#include"main.h"
#include"peizhi.h"
#include"smg.h"
#include"eeprom.h"
sfr WDT_CONTR=0XE1;
unsigned char HighRH = 0;  //高電平重載值的高字節
unsigned char HighRL = 0;  //高電平重載值的低字節
unsigned char LowRH  = 0;  //低電平重載值的高字節
unsigned char LowRL  = 0;  //低電平重載值的低字節
/***********************按鍵定義**********************************/
bit d1 = 1;
bit d2 = 1;
bit d3 = 1;

uint8 ci;
uint8 ca = 0;
uint8 ca1 = 0;
uint16 cb = 0;

void key();                 //按鍵函數聲明
void ConfigPWM(unsigned int fr, unsigned char dc);  //頻率和占空比調節函數

void main()
{
   bit q1 = 1;
   bit q2 = 1;
   bit q3 = 1;
   ca = EEPROMReadByte(0);
   cb = EEPROMReadByte(1)*255+EEPROMReadByte(2);

   EA = 1;       //開總中斷
   peizhit1(1);  //配置T0定時2ms

   while(1)
   {       
                  ConfigPWM(cb, ca);    //頻率100Hz,占空比10%

                  if(d1 != q1)
                  {
                          q1 = d1;
                        if(d1 == 0)
                        {

                                ca1++;
                                if(ca1 >= 2)
                                {
                                          ca1 = 0;
                                }

                        }
                  }

           if(ca1 == 1)
           {
                  if(d2 != q2)
                  {
                                  q2 = d2;
                                if(d2 == 0)
                                {
                                  
                                        ca++;
                                        EEPROMSectorErase(0);
                                        EEPROMWriteByte(0,ca);
                                        EEPROMWriteByte(2,cb);
                                        EEPROMWriteByte(1,cb>>8);
                                        if(ca >= 99)
                                        {
                                                ca = 99;
                                       
                                        }
                                       
                                }
                          }
                       
                          if(d3 != q3)
                          {
                                  q3 = d3;
                                if(d3 == 0)
                                {
                                        if(ca>0)
                                        {
                                                ca--;
                                                EEPROMSectorErase(0);
                                            EEPROMWriteByte(0,ca);
                                                EEPROMWriteByte(2,cb);
                                                EEPROMWriteByte(1,cb>>8);
                                         }
                                }
                          }
                  }
                 
                if(ca1 == 0)
                {   
                          if(d2 == 0)
                          {
                                 
                                  cb++;
                                  EEPROMSectorErase(0);
                                   EEPROMWriteByte(0,ca);
                                  EEPROMWriteByte(2,cb);
                                  EEPROMWriteByte(1,cb>>8);
                                  if(cb >= 200)
                                        {
                                                cb = 200;
                                       
                                        }
                               
                          }
                          
                          if(d3 == 0)
                          {
                                 
                                        if(cb>0)
                                        {
                                                cb--;
                                                EEPROMSectorErase(0);
                                                EEPROMWriteByte(0,ca);
                                        EEPROMWriteByte(2,cb);                       
                                                EEPROMWriteByte(1,cb>>8);               
                                         }                       
                          }

          }
                xianshi1(cb);  
                xianshi2(ca);  

   }
}

void key()
{
        static uint8 saomiaozhi[] = {1,1,1,1};
        saomiaozhi[0] = (saomiaozhi[0]<<1) | in1;
        saomiaozhi[1] = (saomiaozhi[1]<<1) | in2;
        saomiaozhi[2] = (saomiaozhi[2]<<1) | in3;
       
       
        if(saomiaozhi[0] == 0x00)
        {
                d1 = 0;
        }
        if(saomiaozhi[0] == 0xff)
        {
                d1 = 1;
        }
        if(saomiaozhi[1] == 0x00)
        {
                d2 = 0;
        }
        if(saomiaozhi[1] == 0xff)
        {
                d2 = 1;
        }
        if(saomiaozhi[2] == 0x00)
        {
                d3 = 0;
        }
        if(saomiaozhi[2] == 0xff)
        {
                d3 = 1;
        }
       
}

/* 配置并啟動PWM,fr-頻率,dc-占空比 */
void ConfigPWM(unsigned int fr, unsigned char dc)
{
    unsigned int  high, low;
    unsigned long tmp;

    tmp  = (11059200/12) / fr;  //計算一個周期所需的計數值
    high = (tmp*dc) / 100;      //計算高電平所需的計數值
    low  = tmp - high;          //計算低電平所需的計數值
    high = 65536 - high + 12;   //計算高電平的重載值并補償中斷延時
    low  = 65536 - low  + 12;   //計算低電平的重載值并補償中斷延時
    HighRH = (unsigned char)(high>>8); //高電平重載值拆分為高低字節
    HighRL = (unsigned char)high;
    LowRH  = (unsigned char)(low>>8);  //低電平重載值拆分為高低字節
    LowRL  = (unsigned char)low;
    TMOD &= 0xF0;   //清零T0的控制位
    TMOD |= 0x01;   //配置T0為模式1
    TH0 = HighRH;   //加載T0重載值
    TL0 = HighRL;
    ET0 = 1;        //使能T0中斷
    TR0 = 1;        //啟動T0
    PWMOUT = 1;     //輸出高電平
}

/* T0中斷服務函數,產生PWM輸出 */                  
void InterruptTimer0() interrupt 1
{
    if (PWMOUT == 1)  //當前輸出為高電平時,裝載低電平值并輸出低電平
    {
        TH0 = LowRH;
        TL0 = LowRL;
        PWMOUT = 0;
    }
    else              //當前輸出為低電平時,裝載高電平值并輸出高電平
    {
        TH0 = HighRH;
        TL0 = HighRL;
        PWMOUT = 1;
    }
}

/* T0中斷服務函數,完成數碼管、按鍵掃描與秒表計數 */
void t1() interrupt 3
{
       
    TH1 = T1RH;  //重新加載重載值
    TL1 = T1RL;
        ci++;
        ssmg();                 //數碼管掃描

                 
        if(ci>=2)
    {
                ci = 0;
                key();
    }
}

應用舉例2.JPG
操作說明.JPG
接線說明.JPG

頻率及占空比均可調帶數碼管模塊完整程序.rar

198.16 KB, 下載次數: 108, 下載積分: 黑幣 -5

頻率及占空比均可調帶數碼管模塊DXP資料.rar

931.35 KB, 下載次數: 79, 下載積分: 黑幣 -5

回復

使用道具 舉報

ID:385637 發表于 2019-11-6 11:45 | 顯示全部樓層
這個占空比與頻率都可調,真是好資料,謝謝分享,
回復

使用道具 舉報

ID:225481 發表于 2019-11-6 13:12 | 顯示全部樓層
可以用來做LED燈光調節,不錯的資料。
回復

使用道具 舉報

ID:403593 發表于 2019-11-6 16:01 | 顯示全部樓層
非常好的資料,感謝樓主分享!
回復

使用道具 舉報

ID:73030 發表于 2022-2-8 20:17 | 顯示全部樓層
這個程序值得學習,謝謝作者分享。
回復

使用道具 舉報

ID:970519 發表于 2022-2-9 10:18 | 顯示全部樓層
程序值得學習,謝謝作者分享
回復

使用道具 舉報

ID:138707 發表于 2022-2-28 16:41 | 顯示全部樓層
這個占空比與頻率都可調,真是好資料,謝謝分享,
回復

使用道具 舉報

ID:345506 發表于 2023-7-15 09:59 | 顯示全部樓層
不錯,不錯, 很好學習,參考的資料
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 免费黄色a级毛片 | 色视频在线免费观看 | 在线观看亚洲专区 | 日本不卡免费新一二三区 | 伊人免费在线观看 | 国产精品一区二区三区四区 | 日本福利片 | 亚洲毛片 | 人人射人人插 | 国产91久久久久蜜臀青青天草二 | 精品亚洲视频在线 | av网站免费 | 国产一区二区久久久 | 久久久123 | 亚洲一区二区久久 | 国产午夜久久久 | 国产一级黄色网 | 四虎成人免费视频 | 日韩精品在线观看网站 | 国产成人精品一区二区三区在线 | 狠狠爱视频| 欧美一区二区三区四区视频 | 久久se精品一区精品二区 | 精品videossex高潮汇编 | 99久久精品国产一区二区三区 | 日本精品视频一区二区三区四区 | 天天天操操操 | 国产欧美一区二区三区在线看 | 91国产在线播放 | 超碰人人在线 | www.中文字幕.com | 韩国av网站在线观看 | 欧美亚洲另类丝袜综合网动图 | 精品视频一区二区三区 | 久久精品欧美一区二区三区不卡 | 久久久爽爽爽美女图片 | 日韩欧美大片 | 亚洲天堂精品久久 | 午夜国产一区 | 久久美女网 | 天堂亚洲 |