欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
模擬風扇控制系統源碼-藍橋杯例程
[打印本頁]
作者:
劉雪梅
時間:
2018-3-16 12:28
標題:
模擬風扇控制系統源碼-藍橋杯例程
/***************************************
項目名稱:模擬風扇控制系統
實現功能:通過按鍵控制風扇的轉動速度和定時時間,
數碼管實時顯示風扇的工作模式,動態倒計時顯示剩余的定時時間
實現功能:1.S4定義為工作模式切換按鍵,每次按下S4,設備循環切換三種工作模式
2.S5 定義為“定時按鍵”每次按下 S5,定時時間增加 1 分鐘,設備的剩余
工作時間重置為當前定時時間,重新開始倒計時
3.S6 定義為“停止”按鍵,按下 S6 按鍵,立即清零剩余工作時間,PWM
信號停止輸出,直到通過 S5 重新設置定時時間
4.S7 定義為“室溫”按鍵,按下 S7,通過數碼管顯示當前室溫
5.設備具有“睡眠風”、“自然風”和“常風”三種工作模式可以通過按鍵切換,通過
單片機 P34 引腳輸出脈寬調制信號控制電機運行狀態,信號頻率為 1KHz。
6.“睡眠風”模式下,L1 點亮,“自然風”模式下 L2 點亮,“常風”模式下 L3 點亮;
按下停止按鍵或倒計時結束時,LED 全部熄滅
****************************************/
單片機源程序如下:
#include<reg51.h>
#include<absacc.h>
#include<intrins.h>
#include "ds18b20.h"
#define uchar unsigned char
#define uint unsigned int
sbit pwm=P3^4; // pwm
sbit S4=P3^3; // 模式
sbit S5=P3^2; // 定時
sbit S6=P3^1; // 停止
sbit S7=P3^0; // 室溫
#define led_addr XBYTE[0x9fff]
#define ziwei_addr XBYTE[0xdfff]
#define zixing_addr XBYTE[0xffff]
#define dalindun_addr XBYTE[0xbfff]
uchar wd=0,ms=1,dsw,ds,kk=20;
uchar pwmh,pwml;
uchar code zixing[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,
0x7D,0x07,0x7F,0x6F,0x77,0x7C,
0x39,0x5E,0x79,0x71,0x76,0x00,0x40};
uchar code ziwei[]={0x01,0x02,0x04,0x08,
0x10,0x20,0x40,0x80};
void delay(uint i) //延時函數
{
unsigned int j,k;
for(j=0;j<i;j++)
for(k=0;k<1200;k++);
}
void tc0int(void)
{
TMOD=0x01;
TH0=0x3C;
TL0=0x0B0;
EA=1;
ET0=1;
TR0=1;
}
void tc0(void) interrupt 1 using 0
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
kk--;
if(kk==0)
{
kk=20;
if(ds==0)
ds=0;
else
ds--;
}
}
void tc1int(void)
{
TMOD=0x10;
TH1=pwml/256;
TL1=pwml%256;
EA=1;
ET1=1;
TR1=1;
}
void tc1(void) interrupt 3 using 1
{
uchar flag;
flag=~flag;
if(flag)
{
TH1=pwmh/256;
TL1=pwmh%256;
}
else
{
TH1=pwml/256;
TL1=pwml%256;
}
pwm=!pwm;
}
void disp(void)
{
uchar disbuf[8];
uchar m,temperature;
temperature=rd_temperature();
if(ds==0)
TR1=0;
else
TR1=1;
if(wd==0)
{
disbuf[0]=18;
disbuf[1]=ms;
disbuf[2]=18;
disbuf[3]=17;
disbuf[4]=0;
disbuf[5]=ds/100;
disbuf[6]=(ds/10)%10;
disbuf[7]=ds%10;
for(m=0;m<8;m++)
{
zixing_addr=~zixing[disbuf[m]];
ziwei_addr=ziwei[m];
delay(1);
zixing_addr=0xff;
}
}
if(wd==1)
{
disbuf[0]=18;
disbuf[1]=4;
disbuf[2]=18;
disbuf[3]=17;
disbuf[4]=17;
disbuf[5]=temperature/10;
disbuf[6]=temperature%10;
disbuf[7]=12;
for(m=0;m<8;m++)
{
zixing_addr=~zixing[disbuf[m]];
ziwei_addr=ziwei[m];
delay(1);
zixing_addr=0xff;
}
}
if(ms==1)
led_addr=0xFE;
if(ms==2)
led_addr=0xFD;
if(ms==3)
led_addr=0xFB;
if(ds==0)
led_addr=0xFF;
}
void key_read(void)
{
if(S4==0)
{
delay(1);
if(S4==0)
{
while(S4==0)
disp();
ms++;
if(ms==4)
ms=1;
}
}
if(S5==0)
{
delay(1);
if(S5==0)
{
while(S5==0)
disp();
dsw++;
if(dsw==3)
dsw=0;
ds=dsw*60;
}
}
if(S6==0)
{
delay(1);
if(S6==0)
{
while(S6==0)
disp();
ds=0;
}
}
if(S7==0)
{
delay(1);
if(S7==0)
{
while(S7==0)
disp();
wd=!wd;
}
}
}
void pwmsc(void)
{
if(ms==1)
pwmh=65536-200;
pwml=65536-800;
if(ms==2)
pwmh=65536-300;
pwml=65536-700;
if(ms==3)
pwmh=65536-700;
pwml=65536-300;
}
void main(void)
{
tc0int();
tc1int();
while(1)
{
disp();
key_read();
pwmsc();
}
}
復制代碼
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1