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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STC15F104W編碼器兩路可調(diào)PWM輸出源程序

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
#
ID:486426 發(fā)表于 2020-9-8 07:58 | 只看該作者 回帖獎勵 |正序?yàn)g覽 |閱讀模式
//沒有用IAPIDLE功能,有沒有高手指點(diǎn)一下利弊
#include <STC15F104E_PLUS.h>
#include <intrins.h>
typedef unsigned char BYTE;
typedef unsigned int WORD;
//#define uint unsigned int
//#define MAIN_Fosc                22118400L        //定義主時鐘
//#define MAIN_Fosc                12000000L        //定義主時鐘
#define MAIN_Fosc                11059200L        //定義主時鐘
//#define MAIN_Fosc                 5529600L        //定義主時鐘
//#define MAIN_Fosc                24000000L        //定義主時鐘
//#define MAIN_Fosc                40000000L        //定義主時鐘
//#define ENABLE_IAP 0x80           //if SYSCLK<30MHz
//#define ENABLE_IAP 0x81           //if SYSCLK<24MHz
//#define ENABLE_IAP  0x82          //if SYSCLK<20MHz
#define ENABLE_IAP 0x83           //if SYSCLK<12MHz
//#define ENABLE_IAP 0x84           //if SYSCLK<6MHz
//#define ENABLE_IAP 0x85           //if SYSCLK<3MHz
//#define ENABLE_IAP 0x86           //if SYSCLK<2MHz
//#define ENABLE_IAP 0x87           //if SYSCLK<1MHz
#define CMD_IDLE    0               //空閑模式
#define CMD_READ    1               //IAP字節(jié)讀命令
#define CMD_PROGRAM 2               //IAP字節(jié)編程命令
#define CMD_ERASE   3               //IAP扇區(qū)擦除命令
//測試地址
#define IAP_ADDRESS1 0X0000         //內(nèi)部EEPROM地址
#define IAP_ADDRESS2 0X0200
/*初始定義*/
bit  write = 0;
sbit VD=P3^3;  //紅色LED 0.50v=10v ;1.00=27v ;3.85=73v;
sbit CD=P3^4;  //綠色LED
sbit ZS=P3^5;  //指示LED轉(zhuǎn)換  0 - 紅色LED調(diào)整;1 - 綠色LED調(diào)整
sbit BA=P3^0;  //編碼器的a腳接P3.0
sbit BB=P3^1;  //編碼器的b腳接P3.1
sbit QH=P3^2;  //編碼器的按鍵接P3.2 電壓調(diào)整或電流調(diào)整299=5.00V
BYTE v_temp,c_temp,XZ = 0,flag,a0,b0,c0;//  128 109  48 29  //48=0.96V;29=0.58V;
void InitTimer0() interrupt 1  // 0.5毫秒@11.0592MHz  頻率 1000HZ
{
    IE2 = 0x00;    //關(guān)閉定時器2中斷
    AUXR = 0XE4;   //關(guān)閉定時器2計(jì)數(shù)
    TL0 = 0xCD;    //設(shè)置定時初值 0.5毫秒@11.0592MHz
    TH0 = 0xD4;    //設(shè)置定時初值 0.5毫秒@11.0592MHz
    VD = 1;
    CD = 1;
    flag = 1;
    AUXR = 0xF4;   //開啟定時器2計(jì)數(shù)
    IE2 = 0x04;    //開啟定時器2中斷允許
}

void InitTimer2() interrupt 12    //2微秒@11.0592MHz 控制燈亮?xí)r間
{
    flag++;
    T2L = 0xD4;    //設(shè)置定時初值 2微秒@11.0592MHz
    T2H = 0xFF;    //設(shè)置定時初值 2微秒@11.0592MHz
    if(v_temp == flag) VD=0;
    if(c_temp == flag) CD=0;
}

/*//關(guān)閉IAP
void IapIdle()
{
    IAP_CONTR = 0;                  //關(guān)閉IAP功能
    IAP_CMD = 0;                    //清除命令寄存器
    IAP_TRIG = 0;                   //清除觸發(fā)寄存器
    IAP_ADDRH = 0x80;               //將地址設(shè)置到非IAP區(qū)域
    IAP_ADDRL = 0;
}
*/
//從ISP/IAP/EEPROM區(qū)域讀取一字節(jié)
BYTE IapReadByte(WORD addr)
{
    BYTE dat;                       //數(shù)據(jù)緩沖區(qū)
    IAP_CONTR = ENABLE_IAP;         //使能IAP
    IAP_CMD = CMD_READ;             //設(shè)置IAP命令
    IAP_ADDRL = addr;               //設(shè)置IAP低地址
    IAP_ADDRH = addr >> 8;          //設(shè)置IAP高地址
    IAP_TRIG = 0x5a;                //寫觸發(fā)命令(0x5a)
    IAP_TRIG = 0xa5;                //寫觸發(fā)命令(0xa5)
    _nop_();                        //等待ISP/IAP/EEPROM操作完成
    dat = IAP_DATA;                 //讀ISP/IAP/EEPROM數(shù)據(jù)
    //IapIdle();                    //關(guān)閉IAP功能
    return dat;                     //返回

}

//寫一字節(jié)數(shù)據(jù)到ISP/IAP/EEPROM區(qū)域
void IapProgramByte(WORD addr, BYTE dat)
{
    IAP_CONTR = ENABLE_IAP;         //使能IAP
    IAP_CMD = CMD_PROGRAM;          //設(shè)置IAP命令
    IAP_ADDRL = addr;               //設(shè)置IAP低地址
    IAP_ADDRH = addr >> 8;          //設(shè)置IAP高地址
    IAP_DATA = dat;                 //寫ISP/IAP/EEPROM數(shù)據(jù)
    IAP_TRIG = 0x5a;                //寫觸發(fā)命令(0x5a)
    IAP_TRIG = 0xa5;                //寫觸發(fā)命令(0xa5)
    _nop_();                        //等待ISP/IAP/EEPROM操作完成
    //IapIdle();

}

//扇區(qū)擦除
void IapEraseSector(WORD addr)
{
    IAP_CONTR = ENABLE_IAP;         //使能IAP
    IAP_CMD = CMD_ERASE;            //設(shè)置IAP命令
    IAP_ADDRL = addr;               //設(shè)置IAP低地址
    IAP_ADDRH = addr >> 8;          //設(shè)置IAP高地址
    IAP_TRIG = 0x5a;                //寫觸發(fā)命令(0x5a)
    IAP_TRIG = 0xa5;                //寫觸發(fā)命令(0xa5)
    _nop_();                        //等待ISP/IAP/EEPROM操作完成
    //IapIdle();

}


/*void Timer0Init(void)                //100微秒@24.000MHz  10KHZPWM
{
        AUXR |= 0x80;        //定時器時鐘1T模式
        TMOD &= 0xF0;   //設(shè)置定時器模式
        TL0 = 0xA0;                //設(shè)置定時初值--100微秒@24.000MHz
        TH0 = 0xF6;                //設(shè)置定時初值--100微秒@24.000MHz
        TF0 = 0;                //清除TF0標(biāo)志
        TR0 = 1;                //定時器0開始計(jì)時
}

void Timer2Init(void)//0.4微秒@24.000MHz
{
        AUXR |= 0x04;  //定時器時鐘1T模式
        T2L = 0xF6;           //設(shè)置定時初值--0.4微秒@24.000MHz
        T2H = 0xFF;           //設(shè)置定時初值--0.4微秒@24.000MHz
        AUXR |= 0x10;  //定時器2開始計(jì)時
}
*/
void bianmaqi(void)//捕捉EC11按下和旋轉(zhuǎn)信息
{
  unsigned char a, b, c;
  a = BA; b = BB; c = QH;
   if (a != a0)     // BA changed
  {
        a0 = a;
    if (b != b0)    // BB changed
     {
      b0 = b;write = 1;
        if ((a == b) && (XZ == 0) && (v_temp < 153)) {v_temp++;}//225 153
    if ((a == b) && (XZ == 1) && (c_temp < 73)) {c_temp++;}//208 65
    if ((a != b) && (XZ == 0) && (v_temp > 23)) {v_temp--;}//85 23   
        if ((a != b) && (XZ == 1) && (c_temp > 5)) {c_temp--;}//29 5
     }
    }
  if (!c && c0)
        {
        if (XZ == 0 )
      {
        XZ = 1;
        ZS = 1;
        }
    else if(XZ == 1)//切換
      {
            XZ = 0;
        ZS = 0;
       }
    }
    c0 = c;
}
void init()
{
    AUXR = 0XE4;   //設(shè)置定時器0和2為1T模式
    TMOD = 0x00;
    TL0 = 0xCD;    //設(shè)置定時初值 0.5毫秒@11.0592MHz 0xA0;--100微秒@24.000MHz
    TH0 = 0xD4;    //設(shè)置定時初值 0.5毫秒@11.0592MHz 0xFF;--0.4微秒@24.000MHz
    T2L = 0xD4;    //設(shè)置定時初值 2微秒@11.0592MHz 0xF6;--0.4微秒@24.000MHz
    T2H = 0xFF;    //設(shè)置定時初值 2微秒@11.0592MHz 0xFF;--0.4微秒@24.000MHz
    EA = 1;
    ET0 = 1;
    TR0 = 1;       //定時器0開始計(jì)時
    P3M1 &= 0xF7;
    P3M0 |= 0x08;  //P3.3(推挽)
    P3M1 &= 0xEF;
    P3M0 |= 0x10;  //P3.4(推挽)
    P3M1 &= 0xDF;
    P3M0 |= 0x20;  //P3.5(推挽)
    VD = 0;
    CD = 0;
    ZS = 0;        // 0 - 電壓調(diào)整狀態(tài);1 - 電流調(diào)整狀態(tài)
    a0 = BA;
    b0 = BB;
    c0 = QH;
          v_temp = IapReadByte(1);
        if (v_temp == 0 ){v_temp = 65;}     //128        65
        if (v_temp > 153){v_temp = 65;}     //245  128   
        c_temp = IapReadByte(10);
    if (c_temp == 0 ){c_temp = 29;}     //109           
    if (c_temp > 29 ){c_temp = 29;}     //208  109  

}
void main()
{
init();
while(1)
   {
   bianmaqi();
   if (write == 1) {
          write = 0;TR0 = 0;
      IapEraseSector(IAP_ADDRESS1);//擦除扇區(qū)
      if (XZ == 0 )  {
      IapProgramByte(1,v_temp);   //寫入數(shù)據(jù)
                   }
        else  if (XZ == 1 )  {
      IapProgramByte(10,c_temp);  //寫入數(shù)據(jù)
                   }
   }
   _nop_();
   TR0 = 1;
   }
}

STC15F104W編碼器兩路可調(diào)PWM輸出.rar

29.74 KB, 下載次數(shù): 117, 下載積分: 黑幣 -5

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏7 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

地板
ID:693367 發(fā)表于 2021-5-17 08:16 來自手機(jī) | 只看該作者
哪位大佬幫我寫一個stc15F104w單片機(jī)爆閃燈,p3.2和p3.3接爆閃燈,每個燈閃3次循環(huán)爆閃用按鍵可以調(diào)節(jié)爆閃頻率
回復(fù)

使用道具 舉報

板凳
ID:796531 發(fā)表于 2021-4-5 14:58 | 只看該作者
學(xué)習(xí),正在學(xué)習(xí)PWM,謝謝
回復(fù)

使用道具 舉報

沙發(fā)
ID:230374 發(fā)表于 2021-3-29 10:43 | 只看該作者
很好的,學(xué)習(xí)備用,謝謝
回復(fù)

使用道具 舉報

樓主
ID:245466 發(fā)表于 2020-12-8 21:33 | 只看該作者
這個太好了,正好做參考!
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 伊人影院99 | 日韩中文字幕 | 亚洲欧美激情四射 | 国产精品jizz在线观看老狼 | 免费九九视频 | 一区二区在线免费观看 | 中文字幕啪啪 | 日本在线播放 | 午夜成人在线视频 | 国产一二三区精品视频 | 国产福利在线播放 | 国产一区久久久 | 国产黄a一级| 伊人中文字幕 | 亚洲高清成人 | 久久九九99 | 成人做爰www免费看视频网站 | 一区二区视屏 | 国产午夜精品一区二区三区四区 | 亚洲日本免费 | 精品一区二区三区免费视频 | 在线亚洲一区 | 成人a免费 | 黄色毛片在线观看 | 91精品国产色综合久久不卡蜜臀 | 精品国产乱码 | 日韩欧美在线免费观看 | 久久tv在线观看 | 日韩av电影在线观看 | 狠狠狠色丁香婷婷综合久久五月 | 欧美国产日韩在线 | 日本精品一区二区三区在线观看视频 | 国产精品国产精品国产专区不蜜 | 亚洲欧美中文字幕在线观看 | 国产精品爱久久久久久久 | 国产精品一区二区久久精品爱微奶 | 日韩图区 | 国产精品一区二区不卡 | 日韩视频在线观看中文字幕 | 久久久久久久久久久久一区二区 | 一区视频在线 |