|
/***************************************
項(xiàng)目名稱:模擬風(fēng)扇控制系統(tǒng)
實(shí)現(xiàn)功能:通過(guò)按鍵控制風(fēng)扇的轉(zhuǎn)動(dòng)速度和定時(shí)時(shí)間,
數(shù)碼管實(shí)時(shí)顯示風(fēng)扇的工作模式,動(dòng)態(tài)倒計(jì)時(shí)顯示剩余的定時(shí)時(shí)間
實(shí)現(xiàn)功能:1.S4定義為工作模式切換按鍵,每次按下S4,設(shè)備循環(huán)切換三種工作模式
2.S5 定義為“定時(shí)按鍵”每次按下 S5,定時(shí)時(shí)間增加 1 分鐘,設(shè)備的剩余
工作時(shí)間重置為當(dāng)前定時(shí)時(shí)間,重新開(kāi)始倒計(jì)時(shí)
3.S6 定義為“停止”按鍵,按下 S6 按鍵,立即清零剩余工作時(shí)間,PWM
信號(hào)停止輸出,直到通過(guò) S5 重新設(shè)置定時(shí)時(shí)間
4.S7 定義為“室溫”按鍵,按下 S7,通過(guò)數(shù)碼管顯示當(dāng)前室溫
5.設(shè)備具有“睡眠風(fēng)”、“自然風(fēng)”和“常風(fēng)”三種工作模式可以通過(guò)按鍵切換,通過(guò)
單片機(jī) P34 引腳輸出脈寬調(diào)制信號(hào)控制電機(jī)運(yùn)行狀態(tài),信號(hào)頻率為 1KHz。
6.“睡眠風(fēng)”模式下,L1 點(diǎn)亮,“自然風(fēng)”模式下 L2 點(diǎn)亮,“常風(fēng)”模式下 L3 點(diǎn)亮;
按下停止按鍵或倒計(jì)時(shí)結(jié)束時(shí),LED 全部熄滅
****************************************/
單片機(jī)源程序如下:
- #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; // 定時(shí)
- 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) //延時(shí)函數(shù)
- {
- 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();
- }
- }
復(fù)制代碼
|
|