找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1811|回复: 0
收起左侧

单片机模拟风扇控制系统程序

[复制链接]
ID:439984 发表于 2020-6-3 13:42 | 显示全部楼层 |阅读模式
#include<reg52.h>
#include<intrins.h>
#include"define.h"
#include"ds18b20.h"
sbit key4 = P1^4;

sbit key5 = P1^5;
sbit key6 = P1^6;
sbit key7 = P1^7;
sbit PWM = P1^1;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x00,0x39};
uchar tt_table = 0x39;
uchar flag = 0;
uchar flag_11 = 0;
uchar flag_22 = 0;
uchar flag_33 = 0;
int time;
uchar huha = 1;
uchar num = 0;
uchar nihao;
int count=2;
uchar huhu =0;

void timer0_init();

void delayms(uint xms)
{
uint i;
for(i=xms;i>0;i--);
}
void delay_ms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
        for(j= 110;j>0;j--);
}
/////////////////////////////
void display0()
{
        P2=0xff;
        P0=0x40;
  P2=0x7f;
        delayms(60);
        P2=0xff;
}
//////////////////////////////
void display1(uchar th)
{
        P2=0xff;
        P0=table[th];
  P2=0xbf;
        delayms(60);
        P2=0xff;
}
//////////////////////////////
void display2()
{
        P2=0xff;
        P0=0x40;
  P2=0xdf;
        delayms(60);
        P2=0xff;
}
//////////////////////////////
void display4(uchar ch)
{
        P2=0xff;
        P0=table[ch];
  P2=0xf7;
        delayms(60);
        P2=0xff;
}
//////////////////////////////
void display5(uint shi)
{
        P2=0xff;

        P0=table[shi];
        P2=0xfb;
        delayms(60);
        P2=0xff;
        
}
//////////////////////////////
void display6(uint ge)
{P2=0xff;
        P0=table[ge];
        P2=0xfd;
        delayms(60);
        P2=0xff;
}
//////////////////////////////
void display7(uint qi)
{
        P2=0xff;
        P0=table[qi];
  P2=0xfe;
        delayms(60);
        P2=0xff;
}
//////////////////////////////
void KEY_Scan()
{
        if(key4 == 0)
        {
                delay_ms(10);
                if(key4 == 0)
                {
                        
                        if(++flag == 1)
                        {
                                nihao = huha;
                                huha = 4;
                        }
                        if(flag == 2){flag =0;huha = nihao;}
               
                }while(!key4);
        }
        
        if(key5==0)
  {
          delay_ms(2); //????????,??????????
                if(key5==0)
                {
                        if(++flag_11==1) {count = 2;huha = 1;}
                        if(flag_11 == 2){ count = 5;huha = 2;}
                        if(flag_11 == 3){ count = 7;huha = 3; flag_11 =0;}
                }while(!key5);
  }
        
        if(key6 == 0)
        {
                delay_ms(10);
                if(key6 == 0)
                {
                        
                        if(++flag_22 == 1){flag_22 =0;huha = 5;num = num + 60;if(num > 120)num=0;}
               
                }while(!key6);
        }
        
                if(key7 == 0)
        {
                delay_ms(10);
                if(key7 == 0)
                {
                        
                        if(++flag_33 == 1){flag_33 =0;huha = 5;num = 0;}
               
                }while(!key7);
        }
        
}
void main(void)
{
        uchar kkll;
               
  uchar readtemp;
        timer0_init();
        PWM = 1;
        while(1)
        {
                KEY_Scan();
               
                if(huha == 1 ||huha == 2 || huha == 3)
                {
                        kkll =huha;
                }
               
                if(num ==0){  TR0=0;PWM = 0;}
                if(num>0)  TR0=1;
//                if(num >0 && flag == 1) TR0 = 0;
                switch(huha)
                {
                        case 1:
                                        P2=0xff;
                                display0();
                        delayms(5);
                        ///////////////
                        display1(1);
                        delayms(5);
                        ///////////////
                        display2();
                        delayms(5);
                        
                        display4((num/1000)%10);
                        delayms(5);
                        ///////////////
                        display5(num/100%10);
                        delayms(5);
                        ///////////////
                        display6(num/10%10);
                        delayms(5);
                        ///////////////
                        display7(num%10);
                        delayms(5);
                        P2=0xff;
                        break;
                        case 2:
                                        P2=0xff;
                        display0();
                        delayms(5);
                        ///////////////
                        display1(2);
                        delayms(5);
                        ///////////////
                        display2();
                        delayms(5);
                        
                        display4((num/1000)%10);
                        delayms(5);
                        ///////////////
                        ///////////////
                        display5(num/100%10);
                        delayms(5);
                        ///////////////
                        display6(num/10%10);
                        delayms(5);
                        ///////////////
                        display7(num%10);
                        delayms(5);
                        P2=0xff;
                        break;
                        
                        case 3:
                                        P2=0xff;
                        display0();
                        delayms(5);
                        ///////////////
                        display1(3);
                        delayms(5);
                        ///////////////
                        display2();
                        delayms(5);
                        display4((num/1000)%10);
                        delayms(5);
                        ///////////////
                        ///////////////
                        display5(num/100%10);
                        delayms(5);
                        ///////////////
                        display6(num/10%10);
                        delayms(5);
                        ///////////////
                        display7(num%10);
                        delayms(5);
                        P2=0xff;
                        break;
                        
                        case 4:
                                        P2=0xff;
                                P2 = 0xff;
                                readtemp = read_temperature();
                                display0();
                                delayms(20);
                                ///////////////
                                display1(4);
                                delayms(20);
                                ///////////////
                                display2();
                                delayms(20);
                                ///////////////
                                display5(readtemp/10);
                                delayms(20);
                                ///////////////
                                display6(readtemp%10);
                                delayms(20);
                                ///////////////
                                display7(11);
                                delayms(20);
                                P2=0xff;
                        break;
                        case 5:
                                        P2=0xff;
                        display0();
                        delayms(5);
                        ///////////////
                        display1(kkll);
                        delayms(5);
                        ///////////////
                        display2();
                        delayms(5);
                        display4((num/1000)%10);
                        delayms(5);
                        ///////////////
                        ///////////////
                        display5(num/100%10);
                        delayms(5);
                        ///////////////
                        display6(num/10%10);
                        delayms(5);
                        ///////////////
                        display7(num%10);
                        delayms(5);
                        P2=0xff;
                        break;
               
                }
               
        
        }
}
/***********???0???***********/
void timer0_init()
{
  TMOD=0x01; //???0?????1
  TH0=(65536-100)/256;
        TL0=(65536-100)%256;
  TR0=1;
  ET0=1;
  EA=1;
}

/**************??0????******************/
void timer0_int() interrupt 1
{
  TR0=0;    //?????????,?????
  TH0=(65536-100)/256;
        TL0=(65536-100)%256;
  TR0=1;
  time++;
        huhu++;
        if(huhu == 10)huhu = 0;
  if(huhu<count)          //count????
  {
                PWM=1;           //?????
  }
  else
                PWM=0;        
  if(time>=10000)
  {
                time=0;
                if(num>0)num--;
  }
}

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表