欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
stc15單片機(jī)空調(diào)系統(tǒng)源程序設(shè)計
[打印本頁]
作者:
wangfushou
時間:
2019-10-12 09:42
標(biāo)題:
stc15單片機(jī)空調(diào)系統(tǒng)源程序設(shè)計
基于15單片機(jī)進(jìn)行空調(diào)系統(tǒng)的設(shè)計
單片機(jī)源程序如下:
/****************************************Copyright (c)****************************************************
**
**
**
**--------------File Info---------------------------------------------------------------------------------
** File name:
** Last modified Date:
** Last Version:
** Descriptions:
**--------------------------------------------------------------------------------------------------------
** Created by: FiYu
** Created date: 2016-7-1
** Version: 1.0
** Descriptions: PWM呼吸燈實驗
**--------------------------------------------------------------------------------------------------------
** Modified by: FiYu
** Modified date: 2016-11-1
** Version: 2.0
** Descriptions:
** Rechecked by:
**********************************************************************************************************/
/****-----請閱讀ReadMe.txt進(jìn)行實驗-----***********/
#define MAIN_Fosc 11059200L //定義主時鐘
#include "15W4KxxS4.H"
#define uint16 unsigned int
#define uint8 unsigned char
sbit KEY1=P2^3;
sbit KEY2=P2^4;
sbit KEY3=P2^5;
sbit KEY4=P2^6; //用戶按鍵S3用IO口P54
sbit ledpwmval=P5^5; //藍(lán)色
/**************************************
功能描述:延時函數(shù)
入口參數(shù):uint16 x ,該值為1時,延時1ms
返回值:無
***************************************/
void delay_ms(uint16 x)
{
uint16 j,i;
for(j=0;j<x;j++)
{
for(i=0;i<1100;i++);
}
}
/**************************************************************************************
功能描述:對PWM3和PWM3進(jìn)行初始化
入口參數(shù):無
返回值:無
**************************************************************************************/
void PWM2PWM3_Configuration(void)
{
PWMCFG &= 0xBF; //將CBTADC位置0,即PWM計數(shù)器歸零時不觸發(fā)ADC轉(zhuǎn)換
PWMIF &= 0xBF; //將CBIF位置0,PWM計數(shù)器歸零中斷標(biāo)志位,需軟件清零
P_SW2 |= 0x80; //將EAXSFR位置1,以訪問PWM在擴(kuò)展RAM區(qū)的特殊功能寄存器
//對PWM2的初始化部分
PWM2CR |= 0x08; //將PWM2_PS位置1,選擇PWM2的輸出引腳是P2.7
PWMCR |= 0x01; //將ENC2O位置1,PWM2的端口為PWM輸出口,受PWM波形發(fā)生器控制
PWMCFG &= 0xFE; //將C2INI位置0,設(shè)置PWM2輸出端口的初始電平為低電平
PWMIF &= 0xFE; //將C2IF位置0,PWM2中斷標(biāo)志位,需軟件清零
PWM2CR |= 0x04; //將EPWM2I位置1,使能PWM2中斷
PWM2CR &= 0xFD; //將EC2T2SI位置0,關(guān)閉T2翻轉(zhuǎn)時中斷
PWM2CR &= 0xFE; //將EC2T1SI位置0,關(guān)閉T1翻轉(zhuǎn)時中斷
//對PWM3的初始化部分
PWM3CR |= 0x08; //將PWM3_PS位置1,選擇PWM3的輸出引腳是P4.5
PWMCR |= 0x02; //將ENC3O位置1,PWM3的端口為PWM輸出口,受PWM波形發(fā)生器控制
PWMCFG &= 0xFD; //將C3INI位置0,設(shè)置PWM3輸出端口的初始電平為低電平
PWMIF &= 0xFD; //將C3IF位置0,PWM3中斷標(biāo)志位,需軟件清零
PWM3CR |= 0x04; //將EPWM3I位置1,使能PWM3中斷
PWM3CR &= 0xFD; //將EC3T2SI位置0,關(guān)閉T2翻轉(zhuǎn)時中斷
PWM3CR &= 0xFE; //將EC3T1SI位置0,關(guān)閉T1翻轉(zhuǎn)時中斷
//對PWM2和PWM3翻轉(zhuǎn)計數(shù)器賦初值
PWM2T1 =1; //賦值PWM2第一次翻轉(zhuǎn)計數(shù)器值
PWM2T2 = 0x00FA; //賦值PWM2第二次翻轉(zhuǎn)計數(shù)器值
PWM3T1 =0x00FA; //賦值PWM3第一次翻轉(zhuǎn)計數(shù)器值
PWM3T2 = 1; //賦值PWM3第二次翻轉(zhuǎn)計數(shù)器值
//對PWM波形發(fā)生器時鐘源進(jìn)行初始化
PWMCKS |= 0x10; //將SELT2位置1,PWM時鐘源為定時器2溢出脈沖
PWMC = 0x00FA; //PWM計數(shù)器賦值(同時對PWMCH和PWMCL進(jìn)行了賦值)
AUXR |= 0x04; //定時器2時鐘為Fosc,即1T
T2L = 0xE0; //設(shè)定定時初值
T2H = 0xFE; //設(shè)定定時初值
AUXR |= 0x10; //啟動定時器2
P_SW2 &= 0x7F; //將EAXSFR位置0,恢復(fù)訪問XRAM
//PWM外部異常控制寄存器的操作
PWMFDCR &= 0xDF; //將ENFD位置0,關(guān)閉PWM外部異常檢測功能
PWMFDCR &= 0xF7; //將ENDI位置0,關(guān)閉PWM異常檢測中斷
PWMFDCR &= 0xFB; //將FDCMP位置0,比較器與PWM無關(guān)
PWMFDCR &= 0xFD; //將FDIO位置0,P2.4的狀態(tài)與PWM無關(guān)
PWMFDCR &= 0xFE; //將FDIF位置0,PWM異常檢測中斷標(biāo)志位,需軟件清零
IP2 |= 0x40; //將PPWM位置1,使能PWM中斷為最高優(yōu)先級中斷
//使能PWM波形發(fā)生器
PWMCR |= 0x80; //將ENPWM位置1,使能PWM波形發(fā)生器,PWM計數(shù)器開始計數(shù)
PWMCR &= 0xBF; //將ECBI位置0,禁止PWM計數(shù)器歸零中斷
}
/***************************************************************************
* 描 述 : PWM中斷服務(wù)函數(shù)
* 入 參 : 無
* 返回值 : 無
**************************************************************************/
void PWM(void) interrupt PWM_VECTOR using 1
{
PWMIF &= 0xBF; //將CBIF位置0,PWM計數(shù)器歸零中斷標(biāo)志位,需軟件清零
PWMIF &= 0xFE; //將C2IF位置0,PWM2中斷標(biāo)志位,需軟件清零
PWMIF &= 0xFD; //將C3IF位置0,PWM3中斷標(biāo)志位,需軟件清零
}
void KEY_Scan(void)
{ if(KEY1 == 0)
{
delay_ms(10);
}
if(KEY2==0)
{delay_ms(10);
}
while(1)
{
KEY_Scan(); //按鍵輸入檢測函數(shù)
}
}
/********************************************************
功能描述:主函數(shù)
入口參數(shù):無
返回值:無
*********************************************************/
int main()
{
uint8 flag=1;
uint16 ledpwmval=0;
uint16 ledpwmvala=1;
/////////////////////////////////////////////////
//注意: STC15W4K32S4系列的芯片,上電后所有與PWM相關(guān)的IO口均為
// 高阻態(tài),需將這些口設(shè)置為準(zhǔn)雙向口或強(qiáng)推挽模式方可正常使用
//相關(guān)IO: P0.6/P0.7/P1.6/P1.7/P2.1/P2.2
// P2.3/P2.7/P3.7/P4.2/P4.4/P4.5
/////////////////////////////////////////////////
P2M1 &= 0x7F; P2M0 &= 0x7F; //設(shè)置P2.7為準(zhǔn)雙向口
P4M1 &= 0xDF; P4M0 &= 0xDF; //設(shè)置P4.5為準(zhǔn)雙向口
P2M1 &= 0x87; P2M0 &= 0x87; //設(shè)置P0.6為準(zhǔn)雙向口
P5M1 &= 0xCF; P5M0 &= 0xCF; //設(shè)置P5.4為準(zhǔn)雙向口
PWM2PWM3_Configuration(); //初始化PWM2和PWM3口
EA = 1; //允許總中斷
while(1)
{delay_ms(100); //延遲每次指示燈亮度的時間,更方便觀察實驗現(xiàn)象
if(KEY1)
//如果標(biāo)識符為1則遞增變量ledpwmval
ledpwmval=ledpwmval+10;
while (KEY1 == 0); //等待按鍵釋放
ledpwmval=ledpwmval;
if(KEY2) //如果標(biāo)識符為0則遞減變量ledpwmval
ledpwmval=ledpwmval-10;
while(KEY2 == 0);
ledpwmval=ledpwmval;
if(ledpwmval>256) //如果變量ledpwmval遞增到一定值則控制標(biāo)識符為0,以實現(xiàn)ledpwmval遞減
KEY1=0;
KEY2=1;
if(ledpwmval==1) //如果變量ledpwmval遞減到一定值則控制標(biāo)識符為1,以實現(xiàn)ledpwmval遞增
KEY1=1;
ledpwmvala=256-ledpwmval;
P_SW2 |= 0x80; //將EAXSFR位置1,以訪問PWM在擴(kuò)展RAM區(qū)的特殊功能寄存器
PWM2T1 =(uint16)ledpwmval; //賦值PWM2第一次翻轉(zhuǎn)計數(shù)器值(不斷變化值)
PWM2T2 = 0x00FA; //賦值PWM2第二次翻轉(zhuǎn)計數(shù)器值(定值)
PWM3T1 =(uint16)ledpwmvala; //賦值PWM3第一次翻轉(zhuǎn)計數(shù)器值(不斷變化值)
PWM3T2 = 0x00FA; //賦值PWM3第二次翻轉(zhuǎn)計數(shù)器值(定值)
P_SW2 &= 0x7F; //將EAXSFR位置0,恢復(fù)訪問XRAM
}
}
復(fù)制代碼
所有資料51hei提供下載:
pwm.rar
(322.51 KB, 下載次數(shù): 17)
2019-10-12 09:42 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
admin
時間:
2019-10-12 23:54
本帖需要重新編輯補(bǔ)全電路原理圖,源碼,詳細(xì)說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1