找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2958|回复: 5
收起左侧

急!求助智能窗帘的程序 不知道错在哪里

[复制链接]
ID:154739 发表于 2017-4-9 15:34 | 显示全部楼层 |阅读模式
  • 我的这个程序是一个智能窗帘的程序,功能是定时开关窗帘和根据光照强度来开关窗帘,找了好久不知道错在哪里求给位帮忙看看
  • #include<reg52.h>
  • #include<intrins.h>
  • #define uchar unsigned char
  • #define uint unsigned int
  • sbit wela=P2^7;
  • sbit lcdrs=P2^0;
  • sbit lcdwr=P2^1;
  • sbit lcden=P2^2;
  • sbit k1=P3^4;
  • sbit k2=P3^5;
  • sbit k3=P3^6;
  • sbit k4=P3^7;
  • sbit ajjd=P3^3;
  • sbit clk=P1^1;
  • sbit io=P1^0;
  • sbit rst=P1^2;
  • sbit CLK0832= P1^1;
  • sbit CS0832= P1^3;
  • sbit Di0832= P1^4;
  • sbit Do0832= P1^5;
  • void naozhongscan();
  • uchar num0,num1,num2,num3,num4;
  • void init();
  • void delay(uchar);
  • void keyscan();
  • uchar lcd_date_add[7]={0x40+9,0x40+6,0x40+3,0xa,7,0xd,4};
  • uchar date_write_add[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};//miao fen shi ri yue zhou nian
  • uchar date_read_add[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};
  • uchar date[7]={30,32,16,27,2,7,11};
  • uchar date1[7];
  • uchar naozhong[7]={35,32,16,27,2,7,11};
  • uchar flag,flag1,flag2;
  • uchar code table0[]="      -  -      ";
  • uchar code table1[]="     :  :  ";
  • uint light;
  • uchar state=0;
  • uchar read0832();
  • void lcd_com(uchar);
  • void lcd_date(uchar);
  • void lcd_time(uchar,uchar);
  • void write_ds1302(uchar add,uchar date);
  • uchar read_ds1302(uchar add);
  • void read_rtc();
  • void set_ds1302(uchar add,uchar time);
  • void display();
  • void init_ds1302();
  • void movestep();
  • void reserve();
  • void move();
  • void main()
  • {
  • wela=1;
  • P1=0xff;
  • wela=0;
  • init();
  • init_ds1302();
  • while(1)
  • {
  •   if(flag1==1)
  •         {
  •   naozhongscan();
  •         light=read0832();
  •         if(light>=0&&light<40)movestep(0);
  •         if(light>=40&&light<125)movestep(1);
  •         if(light>=125&&light<210)movestep(2);
  •         if(light>=210&&light<255)movestep(3);
  •         }
  •   read_rtc();
  •   if(flag==0)
  •         {
  •   display();
  •   keyscan();
  •         light=read0832();
  •         if(light>=0&&light<40)movestep(0);
  •         if(light>=40&&light<125)movestep(1);
  •         if(light>=125&&light<210)movestep(2);
  •         if(light>=210&&light<255)movestep(3);
  •         }
  • }
  • }
  • void init()
  • {
  • flag=0;
  • flag1=0;
  • flag2=0;
  • lcden=0;
  • lcdwr=0;
  • num2=0;
  • num3=0;
  • num4=0;
  • lcd_com(0x38);//??????,16*2??,5*7??,8?????
  • lcd_com(0x01);//??,???????
  • lcd_com(0x0c);//?????????,???,????,????
  • lcd_com(0x06);//???????????
  • lcd_com(0x80);//????????????
  • for(num0=0;num0<16;num0++)
  • lcd_date(table0[num0]);
  • lcd_com(0x80+0x40);
  • for(num0=0;num0<11;num0++)
  • lcd_date(table1[num0]);
  • }
  • void lcd_com(uchar com)
  • {
  • lcdrs=0;
  • P0=com;
  • delay(5);
  • lcden=1;
  • delay(5);
  • lcden=0;
  • }
  • void lcd_date(uchar date)
  • {
  • lcdrs=1;
  • P0=date;
  • delay(5);
  • lcden=1;
  • delay(5);
  • lcden=0;
  • }
  • void lcd_time(uchar add,uchar Date)
  • {
  •   uchar shi,ge;
  •   shi=Date/10;
  •   ge=Date%10;
  •   lcd_com(0x80+add);
  •   lcd_date(0x30+shi);
  •   lcd_date(0x30+ge);
  • }
  • void keyscan()
  • {
  •   ajjd=0;
  •   if(num3!=2)
  •   {
  •    if(k1==0)
  •    {
  •     delay(5);
  •     if(k1==0)
  •     {
  •      while(!k1);
  •      num2++;
  •      if(num2==1)
  •      {
  •       flag=1;
  •       lcd_com(0x80+lcd_date_add[0]);
  •                         lcd_com(0x0f);//?????????,???,????,????
  •      }
  •      if(num2==2)
  •      {
  •      lcd_com(0x80+lcd_date_add[1]);
  •     }
  •     if(num2==3)
  •     {
  •      lcd_com(0x80+lcd_date_add[2]);
  •     }
  •     if(num2==4)
  •     {
  •      lcd_com(0x80+lcd_date_add[3]);
  •     }
  •     if(num2==5)
  •     {
  •      lcd_com(0x80+lcd_date_add[4]);
  •     }
  •     if(num2==6)
  •     {
  •      lcd_com(0x80+lcd_date_add[5]);
  •     }
  •     if(num2==7)
  •     {
  •      lcd_com(0x80+lcd_date_add[6]);
  •     }
  •     if(num2==8)
  •     {
  •         lcd_com(0x0c);//???
  •      num2=0;
  •      flag=0;
  •     }
  •     }
  •   }
  • if(num2!=0)
  • {
  •   if(k2==0)
  •   {
  •    delay(5);
  •    if(k2==0)
  •    {
  •                 while(!k2);
  •                 if(num2==1)
  •     {
  •      date[0]++;
  •      if(date[0]==60)
  •       date[0]=0;
  •      _nop_();
  •                     lcd_time(lcd_date_add[0],date[0]);
  •      lcd_com(0x80+lcd_date_add[0]);
  •                     set_ds1302(date_write_add[0],date[0]);
  •     }
  •        if(num2==2)
  •     {
  •      date[1]++;
  •      if(date[1]==60)
  •       date[1]=0;
  •      _nop_();
  •                     lcd_time(lcd_date_add[1],date[1]);
  •      lcd_com(0x80+lcd_date_add[1]);
  •                     set_ds1302(date_write_add[1],date[1]);
  •     }
  •        if(num2==3)
  •     {
  •      date[2]++;
  •      if(date[2]==24)
  •       date[2]=0;
  •      _nop_();
  •                     lcd_time(lcd_date_add[2],date[2]);
  •      lcd_com(0x80+lcd_date_add[2]);
  •                     set_ds1302(date_write_add[2],date[2]);
  •     }
  •        if(num2==4)
  •     {
  •      date[3]++;
  •      if(date[3]==32)
  •       date[3]=1;
  •      _nop_();
  •                     lcd_time(lcd_date_add[3],date[3]);
  •      lcd_com(0x80+lcd_date_add[3]);
  •                     set_ds1302(date_write_add[3],date[3]);
  •     }
  •        if(num2==5)
  •     {
  •      date[4]++;
  •      if(date[4]==13)
  •       date[4]=1;
  •      _nop_();
  •                     lcd_time(lcd_date_add[4],date[4]);
  •      lcd_com(0x80+lcd_date_add[4]);
  •                     set_ds1302(date_write_add[4],date[4]);
  •     }
  •        if(num2==6)
  •     {
  •      date[5]++;
  •      if(date[5]==8)
  •       date[5]=1;
  •      _nop_();
  •                     lcd_time(lcd_date_add[5],date[5]);
  •      lcd_com(0x80+lcd_date_add[5]);
  •                     set_ds1302(date_write_add[5],date[5]);
  •     }
  •        if(num2==7)
  •     {
  •      date[6]++;
  •      if(date[6]==99)
  •       date[6]=1;
  •      _nop_();
  •                     lcd_time(lcd_date_add[6],date[6]);
  •      lcd_com(0x80+lcd_date_add[6]);
  •                     set_ds1302(date_write_add[6],date[6]);
  •     }
  •    }
  •   }
  •   if(k3==0)
  •   {
  •    delay(5);
  •    if(k3==0)
  •    {
  •       while(!k3);
  •        if(num2==1)
  •     {
  •      date[0]--;
  •      if(date[0]==-1)
  •       date[0]=59;
  •      _nop_();
  •                     lcd_time(lcd_date_add[2],date[0]);
  •      lcd_com(0x80+lcd_date_add[0]);
  •                     set_ds1302(date_write_add[0],date[0]);
  •     }
  •        if(num2==2)
  •     {
  •      date[1]--;
  •      if(date[1]==-1)
  •       date[1]=59;
  •      _nop_();
  •                     lcd_time(lcd_date_add[1],date[1]);
  •      lcd_com(0x80+lcd_date_add[1]);
  •                     set_ds1302(date_write_add[1],date[1]);
  •     }
  •        if(num2==3)
  •     {
  •      date[2]--;
  •      if(date[2]==-1)
  •       date[2]=23;
  •      _nop_();
  •                     lcd_time(lcd_date_add[2],date[2]);
  •      lcd_com(0x80+lcd_date_add[2]);
  •                     set_ds1302(date_write_add[2],date[2]);
  •     }
  •        if(num2==4)
  •     {
  •      date[3]--;
  •      if(date[3]==0)
  •       date[3]=31;
  •      _nop_();
  •                     lcd_time(lcd_date_add[3],date[3]);
  •      lcd_com(0x80+lcd_date_add[3]);
  •                     set_ds1302(date_write_add[3],date[3]);
  •     }
  •        if(num2==5)
  •     {
  •      date[4]--;
  •      if(date[4]==0)
  •       date[4]=12;
  •      _nop_();
  •                     lcd_time(lcd_date_add[4],date[4]);
  •      lcd_com(0x80+lcd_date_add[4]);
  •                     set_ds1302(date_write_add[4],date[4]);
  •     }
  •        if(num2==6)
  •     {
  •      date[5]--;
  •      if(date[5]==0)
  •       date[5]=7;
  •      _nop_();
  •                     lcd_time(lcd_date_add[5],date[5]);
  •      lcd_com(0x80+lcd_date_add[5]);
  •                     set_ds1302(date_write_add[5],date[5]);
  •     }
  •        if(num2==7)
  •     {
  •      date[6]--;
  •      if(date[6]==0)
  •       date[6]=99;
  •      _nop_();
  •                     lcd_time(lcd_date_add[6],date[6]);
  •      lcd_com(0x80+lcd_date_add[6]);
  •                     set_ds1302(date_write_add[6],date[6]);
  •     }
  •    }
  •   }
  • }
  • }
  •    if(k4==0)
  •    {
  •     delay(5);
  •     if(k4==0)
  •     {
  •      while(!k4);
  •      num3++;
  •     }
  •    }
  •      if(num3==1)
  •      {
  •       flag1=1;
  •                         lcd_com(0x80+1);
  •       lcd_date(0x41);
  •      }
  •      if(num3==2)
  •       {
  •              ajjd=0;
  •              flag1=0;
  •              if(num4==0)
  •              {
  •              for(num0=0;num0<7;num0++)
  •                                                     lcd_time(lcd_date_add[num0],naozhong[num0]);
  •                                lcd_com(0x80+1);
  •              lcd_com(0x0c);//???
  •              lcd_date(0x42);
  •              }
  •              //lcd_com(0x0f);
  •              flag=1;
  •              if(k1==0)
  •              {
  •               delay(5);
  •               if(k1==0)
  •               {
  •                while(!k1);
  •                num4++;
  •                if(num4==1)
  •                {
  •                 lcd_com(0x80+lcd_date_add[0]);
  •                    lcd_com(0x0f);//?????????,???,????,????
  •                }
  •                if(num4==2)
  •                {
  •                 lcd_com(0x80+lcd_date_add[1]);
  •                }
  •                if(num4==3)
  •                {
  •                 lcd_com(0x80+lcd_date_add[2]);
  •                }
  •                if(num4==4)
  •                {
  •                 lcd_com(0x80+lcd_date_add[3]);
  •                }
  •                if(num4==5)
  •                {
  •                 lcd_com(0x80+lcd_date_add[4]);
  •                }
  •                if(num4==6)
  •                {
  •                 lcd_com(0x80+lcd_date_add[5]);
  •                }
  •                if(num4==7)
  •                {
  •                 lcd_com(0x80+lcd_date_add[6]);
  •                }
  •                if(num4==8)
  •                {
  •                    lcd_com(0x0c);//???
  •                 num4=0;
  •                 flag=1;
  •                }
  •               }
  •              }
  •             if(num4!=0)
  •            {
  •              if(k2==0)
  •              {
  •               delay(5);
  •               if(k2==0)
  •               {
  •                  while(!k2);
  •                   if(num4==1)
  •                {
  •                 naozhong[0]++;
  •                 if(naozhong[0]==60)
  •                  naozhong[0]=0;
  •                 _nop_();
  •                                lcd_time(lcd_date_add[0],naozhong[0]);
  •                 lcd_com(0x80+lcd_date_add[0]);
  •                }
  •                   if(num4==2)
  •                {
  •                 naozhong[1]++;
  •                 if(naozhong[1]==60)
  •                  naozhong[1]=0;
  •                 _nop_();
  •                                lcd_time(lcd_date_add[1],naozhong[1]);
  •                 lcd_com(0x80+lcd_date_add[1]);
  •                }
  •                   if(num4==3)
  •                {
  •                 naozhong[2]++;
  •                 if(naozhong[2]==24)
  •                  naozhong[2]=0;
  •                 _nop_();
  •                                lcd_time(lcd_date_add[2],naozhong[2]);
  •                 lcd_com(0x80+lcd_date_add[2]);
  •                }
  •                   if(num4==4)
  •                {
  •                 naozhong[3]++;
  •                 if(naozhong[3]==32)
  •                  naozhong[3]=1;
  •                 _nop_();
  •                                lcd_time(lcd_date_add[3],naozhong[3]);
  •                 lcd_com(0x80+lcd_date_add[3]);
  •                }
  •                   if(num4==5)
  •                {
  •                 naozhong[4]++;
  •                 if(naozhong[4]==13)
  •                  naozhong[4]=1;
  •                 _nop_();
  •                                lcd_time(lcd_date_add[4],naozhong[4]);
  •                 lcd_com(0x80+lcd_date_add[4]);
  •                }
  •                   if(num4==6)
  •                {
  •                 naozhong[5]++;
  •                 if(naozhong[5]==8)
  •                  naozhong[5]=1;
  •                 _nop_();
  •                                lcd_time(lcd_date_add[5],naozhong[5]);
  •                 lcd_com(0x80+lcd_date_add[5]);
  •                }
  •                   if(num4==7)
  •                {
  •                 naozhong[6]++;
  •                 if(naozhong[6]==99)
  •                  naozhong[6]=1;
  •                 _nop_();
  •                                lcd_time(lcd_date_add[6],naozhong[6]);
  •                 lcd_com(0x80+lcd_date_add[6]);
  •                }
  •               }
  •              }
  •              if(k3==0)
  •              {
  •               delay(5);
  •               if(k3==0)
  •               {
  •                  while(!k3);
  •                   if(num4==1)
  •                {
  •                 naozhong[0]--;
  •                 if(naozhong[0]==-1)
  •                  naozhong[0]=59;
  •                 _nop_();
  •                                lcd_time(lcd_date_add[2],naozhong[0]);
  •                 lcd_com(0x80+lcd_date_add[0]);
  •                }
  •                   if(num4==2)
  •                {
  •                 naozhong[1]--;
  •                 if(naozhong[1]==-1)
  •                  naozhong[1]=59;
  •                 _nop_();
  •                                lcd_time(lcd_date_add[1],naozhong[1]);
  •                 lcd_com(0x80+lcd_date_add[1]);
  •                }
  •                   if(num4==3)
  •                {
  •                 naozhong[2]--;
  •                 if(naozhong[2]==-1)
  •                  naozhong[2]=23;
  •                 _nop_();
  •                                lcd_time(lcd_date_add[2],naozhong[2]);
  •                 lcd_com(0x80+lcd_date_add[2]);
  •                }
  •                   if(num4==4)
  •                {
  •                 naozhong[3]--;
  •                 if(naozhong[3]==0)
  •                  naozhong[3]=31;
  •                 _nop_();
  •                                lcd_time(lcd_date_add[3],naozhong[3]);
  •                 lcd_com(0x80+lcd_date_add[3]);
  •                }
  •                   if(num4==5)
  •                {
  •                 naozhong[4]--;
  •                 if(naozhong[4]==0)
  •                  naozhong[4]=12;
  •                 _nop_();
  •                                lcd_time(lcd_date_add[4],naozhong[4]);
  •                 lcd_com(0x80+lcd_date_add[4]);
  •                }
  •                   if(num4==6)
  •                {
  •                 naozhong[5]--;
  •                 if(naozhong[5]==0)
  •                  naozhong[5]=7;
  •                 _nop_();
  •                                lcd_time(lcd_date_add[5],naozhong[5]);
  •                 lcd_com(0x80+lcd_date_add[5]);
  •                }
  •                   if(num4==7)
  •                {
  •                 naozhong[6]--;
  •                 if(naozhong[6]==0)
  •                  naozhong[6]=99;
  •                 _nop_();
  •                                lcd_time(lcd_date_add[6],naozhong[6]);
  •                 lcd_com(0x80+lcd_date_add[6]);
  •                }
  •               }
  •              }
  •             }
  •           }
  •          if(num3==3)
  •          {
  •          flag=0;
  •          flag1=0;
  •          lcd_com(0x80+1);
  •          lcd_date(20);//?lcd??????
  •          num3=0;
  •          num4=0;
  •                         }
  • }
  • void write_ds1302(uchar add,uchar date)
  • {
  •   uchar i,temp;
  • rst=0;
  • clk=0;
  • _nop_();
  • rst=1;
  • for(i=0;i<8;i++)
  • {
  •   clk=0;
  •   temp=add;
  •   io=temp&0x01;
  •   add>>=1;
  •   clk=1;
  •   _nop_();
  • }
  • for(i=0;i<8;i++)
  • {
  •   clk=0;
  •   temp=date;
  •   io=temp&0x01;
  •   date>>=1;
  •   clk=1;
  •   _nop_();
  • }
  • rst=0;
  • }
  • uchar read_ds1302(uchar add)
  • {
  •   uchar i,temp,data1,j;
  • rst=0;
  • clk=0;
  • _nop_();;
  • rst=1;
  • for(i=0;i<8;i++)
  • {
  •   clk=0;
  •   temp=add;
  •   io=temp&0x01;
  •   add>>=1;
  •   clk=1;
  •   _nop_();
  • }
  • for(i=0;i<8;i++)
  • {
  •     data1>>=1;
  •   clk=0;
  •   if(io)
  •   data1=data1|0x80;
  •   clk=1;
  • }
  • rst=0;
  • _nop_();
  • j=data1%16;
  • data1=data1/16;
  • data1=data1*10+j;
  • return(data1);
  • }
  • void set_ds1302(uchar add,uchar time)
  • {
  •   uchar j;
  •   write_ds1302(0x8e,0x00);
  • j=time/10;
  • time=time%10;
  • time=time+j*16;
  • write_ds1302(add,time);
  • write_ds1302(0x8e,0x80);
  • }
  • void read_rtc()
  • {
  •   uchar i;
  • for(i=0;i<7;i++)
  • {
  •   date[ i]=read_ds1302(date_read_add[ i]);
  • }
  • }
  • void display()
  • {
  •         uchar i;
  •   for(i=0;i<7;i++)
  •   {
  •    lcd_time(lcd_date_add[ i],date[ i]);
  •   }
  • }
  • void naozhongscan()
  • {
  • uchar i=0;
  • uchar j=0;
  •    while((j==0)&&(i<7))
  • {
  • j=naozhong^date[ i];
  • i++;
  • }
  • if(i==7)
  •   movestep(3);
  • }
  • uchar read0832()
  • {
  • uchar i,dat1=0,dat2=0;
  • CS0832=0;
  • CLK0832=0;
  • Di0832=1;
  • CLK0832=1;//òÔéÏ1y3ì2úéúáËò»¸ö¿aê¼DÅoÅ
  • CLK0832=0;
  • Di0832=1;//D¾Æ¬ÕaÄü½øDDμ¥í¨μà×a»»Ä£ê½
  • CLK0832=1;
  • CLK0832=0;
  • Di0832=1;
  • CLK0832=1;//¶Ôí¨μà1½øDD×a»»
  • CLK0832=0;
  • Di0832=1;
  • for(i=0;i<8;i++)
  •         {
  •                 dat1 = dat1 | Di0832;
  •                  CLK0832 = 1;
  •                 CLK0832 = 0;
  •                 dat1 = dat1 << 1 ;
  •         }
  •         CS0832 = 1;
  •         return dat1;// (dat1 == dat2) ? dat1:0;
  • }
  • void move(uchar step)
  • {
  • uchar i;
  • P2=0x0f;
  • for(i=0;i<step;i++)
  • {
  •    P2=0x03;
  •          delay(200);
  •    P2=0x06;
  •          delay(200);
  •          P2=0x0c;
  •          delay(200);
  •          P2=0x09;
  •          delay(200);
  •         }
  • }
  • void reserve(uchar step)
  • {
  • uchar i;
  • P2=0x0f;
  • for(i=0;i<step;i++)
  • {
  •    P2=0x09;
  •          delay(200);
  •    P2=0x0c;
  •          delay(200);
  •          P2=0x06;
  •          delay(200);
  •          P2=0x03;
  •          delay(200);
  •         }
  • }
  • void movestep(uchar level)
  • {
  •   switch(level)
  •   {
  •          case 0:switch(state)
  •          {
  •           case 0:break;
  •                 case 1:reserve(1);break;
  •                 case 2:reserve(2);break;
  •                 case 3:reserve(3);break;
  •          }state=0;break;
  •          case 1:switch(state)
  •          {
  •           case 0:move(1);break;
  •                 case 1:break;
  •                 case 2:reserve(1);break;
  •                 case 3:reserve(2);break;
  •          }state=1;break;
  •          case 2:switch(state)
  •          {
  •           case 0:move(2);break;
  •                 case 1:move(1);break;
  •                 case 2:break;
  •                 case 3:reserve(1);break;
  •          }state=2;break;
  •          case 3:switch(state)
  •          {
  •           case 0:move(3);break;
  •                 case 1:move(2);break;
  •                 case 2:move(1);break;
  •                 case 3:break;
  •          }state=3;break;
  •         }        
  • }

回复

使用道具 举报

ID:82765 发表于 2017-4-9 15:59 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

ID:111634 发表于 2017-4-9 16:06 | 显示全部楼层
冗长程序是不会有人看的,建议不要贴出来,贴出来也无用
回复

使用道具 举报

ID:111634 发表于 2017-4-9 17:33 | 显示全部楼层
自动控制通常是:传感器检测信号+程序鉴别控制+执行元件执行。你的程序均 没有这3个要素说明,你甚至还未意识到这些问题,仅此,你不适宜从事单片机应用,建议你另择专业。
回复

使用道具 举报

ID:154739 发表于 2017-4-9 22:32 | 显示全部楼层
zl2168 发表于 2017-4-9 17:33
自动控制通常是:传感器检测信号+程序鉴别控制+执行元件执行。你的程序均 没有这3个要素说明,你甚至还未意 ...

首先谢谢您的建议,但是这是我的一个设计,主要是以前是个学渣现在学了点编程在网上找了一些类似的程序学习综合了一下,让你误会了。
回复

使用道具 举报

ID:185946 发表于 2017-4-10 11:38 | 显示全部楼层
你好  请问 你找出问题了吗?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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