亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

  [復制鏈接]
跳轉到指定樓層
樓主
注意  單片機必須是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 (125.21 KB, 下載次數: 102)

應用舉例2.JPG

操作說明.JPG (102.23 KB, 下載次數: 84)

操作說明.JPG

接線說明.JPG (107.82 KB, 下載次數: 87)

接線說明.JPG

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

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

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

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

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏16 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
ID:385637 發表于 2019-11-6 11:45 | 只看該作者
這個占空比與頻率都可調,真是好資料,謝謝分享,
回復

使用道具 舉報

板凳
ID:225481 發表于 2019-11-6 13:12 | 只看該作者
可以用來做LED燈光調節,不錯的資料。
回復

使用道具 舉報

地板
ID:403593 發表于 2019-11-6 16:01 | 只看該作者
非常好的資料,感謝樓主分享!
回復

使用道具 舉報

5#
ID:73030 發表于 2022-2-8 20:17 | 只看該作者
這個程序值得學習,謝謝作者分享。
回復

使用道具 舉報

6#
ID:970519 發表于 2022-2-9 10:18 | 只看該作者
程序值得學習,謝謝作者分享
回復

使用道具 舉報

7#
ID:138707 發表于 2022-2-28 16:41 | 只看該作者
這個占空比與頻率都可調,真是好資料,謝謝分享,
回復

使用道具 舉報

8#
ID:345506 發表于 2023-7-15 09:59 | 只看該作者
不錯,不錯, 很好學習,參考的資料
回復

使用道具 舉報

9#
ID:298215 發表于 2025-6-4 22:23 | 只看該作者
謝謝分享,太好了
回復

使用道具 舉報

10#
ID:145862 發表于 2025-6-6 09:27 | 只看該作者
vss是多少
回復

使用道具 舉報

11#
ID:1107340 發表于 2025-9-26 10:35 | 只看該作者
請問大佬,pcbdoc文件如何打開?謝謝
回復

使用道具 舉報

12#
ID:584814 發表于 2025-9-26 22:04 | 只看該作者
好資料,感謝樓主分享!
回復

使用道具 舉報

13#
ID:1107340 發表于 2026-3-9 09:25 | 只看該作者
很好的學習,參考的資料,謝謝
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表