汇编网首页登录博客注册
zhengcong3250的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
  •  何以解忧愁,唯有杜康酒!
  • 『姓名』:
  • 『性别』:男『发送消息
  • 个人说明:http://student.zjzk.cn/course_ware/data_structure/web/shu/shu6.3.2.htm
  • 详细信息『加为好友』
学习动态

[2011-02-04 22:11] 第一个项目,单片机的。。存起来呵呵

#include <reg52.h>
#include <intrins.h>
#include "lm6066.h"
#include "at24cxx.h"
#include "am2301.h"

sbit jinshui=P1^1;
sbit paishui=P1^2;
sbit wuhuadianyuan=P1^3;
sbit wuhuafengji=P1^4;
sbit wuhuasanre=P1^5;
sbit yewei=P1^6;
sbit key_up=P3^2;
sbit key_down=P3^3;
sbit key_set=P3^4;
sbit key_shift=P3^5;
sbit key_shiftdec=P3^1;


bit backmenu=1;
uchar  code start_log[]={
"   智  能  芳  香  机         "
"工作模式:      状态指示:工作"
"湿度:  %       温度:  摄氏度"
"工作时间:  :  停止时间:  :  "};
uchar code set_log[]={
"工作模式设定:                "
"工作时间:  :  停止时间:  :  "
"湿度上限:  %  湿度下限:  %  "
"日期设置:                    "};
uchar data date[]={"0000年00月00日 00:00"};
uchar code *m1[]={"时控","湿度","手动"};
uchar data set_time[]={"00:00"};
uchar data set_time1[]={"00:00"};
uchar data shidu_max[]={"00"},shidu_min[]={"00"};
uchar month,day,hour,min,sec,monthd;

uint year;
uchar work_mod,start_Tm_h,start_Tm_m,stop_Tm_h,stop_Tm_m,max_temp,min_temp;
uchar stauts=1;
bit Scr_Hz=1;
bit jiance_flag;

void key_Exe(unsigned char key);
void readDat(void);
void saveDat(void);
void jiance(void);
//============================================
void init_time()
{        
TMOD=0X01;
TH0=0X4C;
TL0=0X00;
TR0=1;
ET0=1;
EA=1;
}
//====================================================
uchar set_monthd(uchar m)
{        uchar len;
        switch(m)
        {
        case 1: case 3: case 5: case 7: case 8:
        case 10: case 12:len=31;break;
        case 4: case 6: case 9: case 11:len=30;break;
        case 2:if(year%4==0&&year%100!=0||year%400==0)len=29;
                        else len=28;break;
                default:break;
        }
        return len;
}
//================================================
void time0() interrupt 1
{  uchar f,cnt;
TH0=0X4C;
TL0=0X00; 
cnt++;f++;        
if(cnt>=20){sec++;cnt=0;}
if(sec>=60){min++;sec=0;}
if(min>=60){hour++;min=0;}
if(hour>=24){day++;hour=0;};
monthd=set_monthd(month);
if(day>monthd){month++;day=1;}
if(month>12){year++;month=1;}
if(year>9999||year<0)year=0;

date[0]=year/1000+0x30;
date[1]=(year/100)%10+0x30;
date[2]=(year%100)/10+0x30;
date[3]=year%10+0x30;
date[6]=month/10+0x30;
date[7]=month%10+0x30;
date[10]=day/10+0x30;
date[11]=day%10+0x30;
date[15]=hour/10+0x30;
date[16]=hour%10+0x30;
date[18]=min/10+0x30;
date[19]=min%10+0x30;
if(f==40){f=0;Scr_Hz=1;}

}
//=====================================
uchar scan_key()
{
key_up=1;
if(key_up==0)
{
delay(30);
key_up=1;
if(key_up==0)
{
while(!key_up);
return 0xfb;
}

}

key_down=1;
if(key_down==0)
{
delay(30);
key_down=1;
if(key_down==0)
{
while(!key_down);
return 0xf7;
}

}

key_set=1;
if(key_set==0)
{
delay(30);
key_set=1;
if(key_set==0)
{
backmenu=1;
while(!key_set);
return 0xef;
}

}

key_shift=1;
if(key_shift==0)
{
delay(30);
key_shift=1;
if(key_shift==0)
{

while(!key_shift);
return 0xdf;
}

}
key_shiftdec=1;
if(key_shiftdec==0)
{
delay(30);
key_shiftdec=1;
if(key_shiftdec==0)
{
while(!key_shiftdec);
return 0xfd;
}

}


return -1;

}
        
//==================================

void main()
{
        uchar key_val;
        uchar i;
        _RST=0;
        BUSY=0;delay(10);
        _RST=1;delay(200);
        P1=0x00;
        ClearRAM();
    LCDBUS  = 0xff;
        initLCDM();
        init_time();
        readDat();delay(10);                                                        //读取上次设置数据
        WriteTextScreen(set_log);
        WriteStrXY(14,0,m1[work_mod]); 
        WriteStrXY(10,3,date);
        WriteStrXY(10,1,set_time);
        WriteStrXY(25,1,set_time1);
        WriteStrXY(10,2,shidu_max);
        WriteStrXY(25,2,shidu_min);         
        for(i=0;i<=200;i++)
        {                key_val=scan_key();
                if(key_val!=-1)break;
                delay(25);
        }  
        ClearRAM();
          while(1)
          {          
          key_val=scan_key();
          if(key_val==0xdf)backmenu=0;
          if(work_mod==2)
           {
                           switch(key_val)
                        {
                        case  0xfb:key_val=0;paishui=!paishui;break;
                case 0xf7:key_val=0;jinshui=!jinshui;break;
                case 0xef:key_val=0;wuhuadianyuan=!wuhuadianyuan;wuhuafengji=!wuhuafengji;
                                  wuhuasanre=!wuhuasanre;break;
                                  default:break;
                        }
                        if(yewei==0)paishui=0;        else   jinshui=0;
                }
                jiance();
          
          if(Scr_Hz==1&&backmenu==1)
          {        
          
          Scr_Hz=0;
          Rd_HT();                
          readDat();delay(10);                                     //进入主画面读取上次数据,接口
          WriteTextScreen(start_log);
          WriteStrXY(25,0,date+15);
          WriteStrXY(9,1,m1[work_mod]);
          WriteStrXY(6,2,RH);
          WriteStrXY(22,2,T);
          WriteStrXY(10,3,set_time);
          WriteStrXY(25,3,set_time1);
          key_val=scan_key();
          
          }
                                                                                           //各控制检测接口
   if(key_val!=-1&&backmenu==0)         
         {
          
          ClearRAM();        
           
          WriteTextScreen(set_log);delay(10);;
           
           //if(key_val==-1)                 
          WriteStrXY(14,0,m1[work_mod]);
          WriteStrXY(10,3,date);
          WriteStrXY(10,1,set_time);
          WriteStrXY(25,1,set_time1);
          WriteStrXY(10,2,shidu_max);
          WriteStrXY(25,2,shidu_min);                  
          while(1)
          {
          jiance();
          key_val=scan_key();          
          key_Exe(key_val);
          key_val=0;// saveDat();
          if(backmenu==1)break;
          }

         } 
                                                     
          }
                                                                    
}

//=========================================================
void key_Exe(uchar key)
{        uchar year_h;

        if(key==0xdf)
        {        stauts++;key=0;
                if(stauts>13)stauts=1;
        
        }
        else if(key==0xfd)
        {        
        stauts--;key=0;
        if(stauts==0)stauts=13;
        
        }
         switch(stauts)
                {
                case 1:setcursor(14,0);break;
                case 2:setcursor(10,1);break;
                case 3:setcursor(13,1);break;
                case 4:setcursor(25,1);break;
                case 5:setcursor(28,1);break;
                case 6:setcursor(10,2);break;
                case 7:setcursor(25,2);break;
                case 8:setcursor(10,3);break;
                case 9:setcursor(12,3);break;
                case 10:setcursor(16,3);break;
                case 11:setcursor(20,3);break;
                case 12:setcursor(25,3);break;
                case 13:setcursor(28,3);break;
                default:break;
                }
        if(key==0xfb)
        {        //        key=0;
                switch(stauts)
                {
                case 1:work_mod++;if(work_mod>=3)work_mod=0;break;
                case 2:start_Tm_h++;if(start_Tm_h>=24)start_Tm_h=0;
                                set_time[0]=start_Tm_h/10+0x30;set_time[1]=start_Tm_h%10+0x30;                        
                                 delay(200);break;
                case 3:start_Tm_m++;if(start_Tm_m>=60)start_Tm_m=0;
                                set_time[3]=start_Tm_m/10+0x30;set_time[4]=start_Tm_m%10+0x30;

                                 delay(200);break;
                case 4:stop_Tm_h++;if(stop_Tm_h>=24)stop_Tm_h=0;
                                set_time1[0]=stop_Tm_h/10+0x30;set_time1[1]=stop_Tm_h%10+0x30;
                            delay(200);break;
                case 5:stop_Tm_m++;if(stop_Tm_m>=60)stop_Tm_m=0;
                                set_time1[3]=stop_Tm_m/10+0x30;set_time1[4]=stop_Tm_m%10+0x30;
                                 delay(200);break;
                case 6:max_temp++;if(max_temp>=100)max_temp=0;
                                shidu_max[0]=max_temp/10+0x30;shidu_max[1]=max_temp%10+0x30;
                                delay(200);break;
                case 7:min_temp++;if(min_temp>=100)min_temp=0;
                                shidu_min[0]=min_temp/10+0x30;shidu_min[1]=min_temp%10+0x30;
                                delay(200);break;
                case 8:year_h=(year/100);year_h++;year=year_h*100+year%100;
                                delay(200);break;
                case 9:year++;delay(200);break;
                case 10:month++;delay(200);break;
                case 11:day++;delay(200);break;
                case 12:hour++;delay(200);break;
                case 13:min++;delay(200);break;
                default:break;
                }
        }
        else if(key==0xf7)
        {        
                switch(stauts)
                {
                case 1:work_mod--;if(work_mod==-1)work_mod=0;break;
                case 2:start_Tm_h--;if(start_Tm_h==-1)start_Tm_h=0;
                                set_time[0]=start_Tm_h/10+0x30;set_time[1]=start_Tm_h%10+0x30;
                                delay(200);break;
                case 3:start_Tm_m--;if(start_Tm_m==-1)start_Tm_m=0;
                                set_time[3]=start_Tm_m/10+0x30;set_time[4]=start_Tm_m%10+0x30;
                                delay(200);break;
                case 4:stop_Tm_h--;if(stop_Tm_h==-1)stop_Tm_h=0;
                                set_time1[0]=stop_Tm_h/10+0x30;set_time1[1]=stop_Tm_h%10+0x30;
                                delay(200);break;
                case 5:stop_Tm_m--;if(stop_Tm_m==-1)stop_Tm_m=0;
                                set_time1[3]=stop_Tm_m/10+0x30;set_time1[4]=stop_Tm_m%10+0x30;
                                delay(200);break;
                case 6:max_temp--;if(max_temp==-1)max_temp=0;
                                shidu_max[0]=max_temp/10+0x30;shidu_max[1]=max_temp%10+0x30;
                                delay(200);break;
                case 7:min_temp--;if(min_temp==-1)min_temp=0;
                                shidu_min[0]=min_temp/10+0x30;shidu_min[1]=min_temp%10+0x30;
                                delay(200);break;
                case 8:year_h=(year/100);year_h--;year=year_h*100+year%100;
                                delay(200);break;
                case 9:year--;delay(200);break;
                case 10:month--;delay(200);break;
                case 11:day--;delay(200);break;
                case 12:hour--;delay(200);break;
                case 13:min--;delay(200);break;
                default:break;
                }
        }
        if(key==0xfb||key==0xf7)
        { 
        
        WriteStrXY(10,3,date);
        WriteStrXY(14,0,m1[work_mod]);
        WriteStrXY(10,1,set_time);
        WriteStrXY(25,1,set_time1);
        WriteStrXY(10,2,shidu_max);
        WriteStrXY(25,2,shidu_min);          
        }                 
        if(key==0xef)
        {
                key=0;saveDat();ClearRAM();
                backmenu=1;
        }                        
}
//================================================
void saveDat(void)
{        
        EA=0;
        wr_24cxx(70,work_mod);delay_iic();
        wr_24cxx(71,set_time[0]);delay_iic();
        wr_24cxx(72,set_time[1]);delay_iic();
        wr_24cxx(73,set_time[3]);delay_iic();
        wr_24cxx(74,set_time[4]);delay_iic();
        wr_24cxx(75,set_time1[0]);delay_iic();
        wr_24cxx(76,set_time1[1]);delay_iic();
        wr_24cxx(77,set_time1[3]);delay_iic();
        wr_24cxx(78,set_time1[4]);delay_iic();
        wr_24cxx(79,shidu_max[0]);delay_iic();
        wr_24cxx(80,shidu_max[1]);delay_iic();
        wr_24cxx(81,shidu_min[0]);delay_iic();
        wr_24cxx(82,shidu_min[1]);delay_iic();
        wr_24cxx(83,year/1000+0x30);delay_iic();
        wr_24cxx(84,(year/100)%10+0x30);delay_iic();
        wr_24cxx(85,(year%100)/10+0x30);delay_iic();
        wr_24cxx(86,year%10+0x30);delay_iic();
        wr_24cxx(87,month/10+0x30);delay_iic();
        wr_24cxx(88,month%10+0x30);delay_iic();
        wr_24cxx(89,day/10+0x30);delay_iic();
        wr_24cxx(90,day%10+0x30);delay_iic(); 
        
        EA=1;  
}
//=============================================
void readDat(void)
{
        uchar h1,h2,h3,h4;
        work_mod=rd_24cxx(70);delay_iic();
        set_time[0]=rd_24cxx(71);delay_iic();
        set_time[1]=rd_24cxx(72);delay_iic();
        start_Tm_h=(set_time[0]-0x30)*10+(set_time[1]-0x30);
        set_time[3]=rd_24cxx(73);delay_iic();
        set_time[4]=rd_24cxx(74);delay_iic();
        start_Tm_m=(set_time[3]-0x30)*10+(set_time[4]-0x30);
        set_time1[0]=rd_24cxx(75);delay_iic();
        set_time1[1]=rd_24cxx(76);delay_iic();
        stop_Tm_h=(set_time1[0]-0x30)*10+(set_time1[1]-0x30);
        set_time1[3]=rd_24cxx(77);delay_iic();
        set_time1[4]=rd_24cxx(78);delay_iic();
        stop_Tm_m=(set_time1[3]-0x30)*10+(set_time1[4]-0x30);
        shidu_max[0]=rd_24cxx(79);delay_iic();
        shidu_max[1]=rd_24cxx(80);delay_iic();
        max_temp=(shidu_max[0]-0x30)*10+(shidu_max[1]-0x30);
        shidu_min[0]=rd_24cxx(81);delay_iic();
        shidu_min[1]=rd_24cxx(82);delay_iic();
        min_temp=(shidu_min[0]-0x30)*10+(shidu_min[1]-0x30);        
        h1=rd_24cxx(83);delay_iic();
        h2=rd_24cxx(84);delay_iic();
        h3=rd_24cxx(85);delay_iic();
        h4=rd_24cxx(86);delay_iic();
        year=(h1-0x30)*1000+(h2-0x30)*100+(h3-0x30)*10+(h4-0x30);
        h1=rd_24cxx(87);delay_iic();
        h2=rd_24cxx(88);delay_iic();
        month=(h1-0x30)*10+(h2-0x30);
        h1=rd_24cxx(89);delay_iic();
        h2=rd_24cxx(90);delay_iic();
        day=(h1-0x30)*10+(h2-0x30);

}
//=============================================
void main_jiance()
{
        uchar wenduzhi,shiduzhi;
        wenduzhi=(T[0]-0x30)*10+(T[1]-0x30);
        if(wenduzhi>=24)
        {
        paishui=1;
        if(yewei==0)
                {
                if(wuhuadianyuan==1)
                        {
                        wuhuadianyuan=0;
                        wuhuafengji=0;
                        wuhuasanre=0;
                        }
                paishui=0;jinshui=1;
                }
         }
         if(yewei==1&&jinshui==1)jinshui=0;
        shiduzhi=(RH[0]-0x30)*10+(RH[1]-0x30);
        if(shiduzhi<=min_temp)
        {
                wuhuadianyuan=1;        
                wuhuafengji=1;
                wuhuasanre=1;
        }
        else if(shiduzhi>=max_temp)
                        {
                                wuhuadianyuan=0;
                                wuhuafengji=0;
                                wuhuasanre=0;
                        }

}
//
void jiance()
{
        if(work_mod==0)
        {        
                if(start_Tm_h==hour&&start_Tm_m==min)
                        jiance_flag=1;
                else if(stop_Tm_h==hour&&stop_Tm_m==min)
                                jiance_flag=0;
                if(jiance_flag==1)main_jiance();
        }
        if(work_mod==1)main_jiance();
        
}
评论次数(5)  |  浏览次数(2061)  |  类型(我的程序) |  收藏此文  | 

[  zaixuexi   发表于  2011-02-04 22:50  ]

挺好的,加油.

[  zhengcong3250   发表于  2011-02-05 13:27  ]

谢谢

[  parse   发表于  2012-02-24 20:07  ]

老师的C程序好精湛啊!

[  游客   发表于  2014-03-25 13:48  ]

说句实话,代码写的非常垃圾。你缺乏基本的编程素养,不积跬步无以至千里,建议先把基础打扎实。

[  zkkpkk   发表于  2016-05-11 11:56  ]

注意日期,很早以前的代码了,谁都一样,谁在第一个项目就写得漂亮的

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码