⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 控制系统.lst

📁 核心文件,直接烧录
💻 LST
📖 第 1 页 / 共 5 页
字号:
 726          
 727          
 728          
 729          /*初始化写DS1302 RAM*/
 730          void init_wds1302_ram(void)
 731          {
 732   1        w1302(d02_wrc,0x00); 
 733   1        w1302(0x90,0xa5);         // 单二极管2K电阻充电
 734   1        w1302(d02_signs,0x00);        // 状态寄存
 735   1        w1302(d02_passw,0x74);        // 密码储存首位
 736   1        w1302(d02_passw+2,0x14);  // 初始值为:741456
 737   1        w1302(d02_passw+4,0x56);  // 密码最后一位
C51 COMPILER V8.02   縚制系统                                                              08/08/2008 18:31:54 PAGE 13  

 738   1        w1302(d02_alm,0x12);          // 闹铃时(12小时)
 739   1        w1302(d02_alm+2,0x00);        // 闹铃分(0分)
 740   1        w1302(d02_temp,0xff);         // 温度上限(255为关闭)   
 741   1        w1302(d02_temp+2,0xff);   // 温度下限(关闭)
 742   1        w1302(d02_initsi,0xb4);   // 是否要初始化标记(0xb4为已经初始化)
 743   1        w1302(d02_wrc,0x80); 
 744   1      }
 745          
 746          /*写DS1302一字节的RAM*/
 747          void wds1302_data(uchar adder,uchar _data)
 748          {
 749   1        w1302(d02_wrc,0x00); 
 750   1        w1302(adder,_data);
 751   1        w1302(d02_wrc,0x80);
 752   1      } 
 753          
 754          
 755          /*读取日期*/
 756          void rds1302_date(void)
 757          {
 758   1        
 759   1        today.year=r1302(d02_year+1);   
 760   1        today.week=r1302(d02_weeks+1);
 761   1        today.month=r1302(d02_month+1);
 762   1        today.day=r1302(d02_day+1);  
 763   1      }
 764          
 765          
 766          /*读取时间*/
 767          void rds1302_time(void)
 768          {
 769   1        now.hour=(r1302(d02_hour+1));
 770   1        now.minute=r1302(d02_minute+1);
 771   1        now.second=r1302(d02_second+1);
 772   1        if(now.hour==alarm_time[0]&&now.minute==alarm_time[1]) alm_run=1;
 773   1        else                                                                          // 闹铃时间比较
 774   1        {
 775   2          alm_run=0;buzstop=0;buzzer=close;
 776   2        } 
 777   1      }                                       
 778          
 779          /*开机读数据*/
 780          void rds1302_data(void)
 781          {
 782   1        signs=r1302(d02_signs+1);
 783   1        alarm_time[0]=r1302(d02_alm+1);
 784   1        alarm_time[1]=r1302(d02_alm+3);
 785   1        als_temp[0]=r1302(d02_temp+1);
 786   1        als_temp[1]=r1302(d02_temp+3);                   
 787   1      }
 788           
 789          
 790          /*DS1302初始化*/
 791          void init_ds1302(void)
 792          {
 793   1        wds1302_time_date();
 794   1        init_wds1302_ram();
 795   1      }
 796          
 797          
 798          /*=====================================================================================
 799           函数名称:DS18b20驱动
C51 COMPILER V8.02   縚制系统                                                              08/08/2008 18:31:54 PAGE 14  

 800           功能描述:基本驱动(读写数据、数据转换、初始化)
 801           全局变量:无
 802           参数说明:无
 803           返回说明:返回读取的数据
 804           设 计 人:LIJH
 805           版    本:1.0
 806           说    明:调试中。。。
 807           ======================================================================================*/
 808          
 809          
 810          
 811          /*18B20初始化*/
 812          void init_ds18b20()
 813          {
 814   1        b20_io=1;
 815   1        b20_io=0;
 816   1        delay_b20(120);               // 延时≥480us
 817   1        b20_io=1;
 818   1        delay_b20(12);            // 拉高为高电平后在15—60us出现低电平,并维持60—240us
 819   1        ds18b20=~b20_io;
 820   1        delay_b20(40);        
 821   1      }
 822          
 823          
 824          /*向18B20发送一个字节*/
 825          void send18b20_byte(uchar data_send)
 826          {
 827   1        uchar d=0;
 828   1        for (d=0;d<8;d++)
 829   1        {
 830   2              b20_io=0;                                       // 拉低电平后向总线写入一个位,15us后18B20接收  
 831   2          b20_io=data_send&0x01;          
 832   2          delay_b20(10);                              // 延时60us后完成一次
 833   2          b20_io=1;
 834   2          data_send>>=1;                          // 下位开始
 835   2        }
 836   1      }
 837          
 838          
 839          /*从18B20读出温度值 12位分辨率*/  
 840          void receive18b20(void)
 841          {
 842   1        uchar n=1,d;
 843   1        for (d=0;d<16;d++)
 844   1        {
 845   2              if(d==8) n=0;
 846   2              b20_io=0;                                         // 拉低总线
 847   2              temp.t_data[n]>>=1;            
 848   2              b20_io=1;                     // 拉高总线
 849   2              if(b20_io)                                        // 读入总线数值
 850   2            temp.t_data[n]|=0x80;
 851   2          delay_b20(10);                                // 等待60us
 852   2        }
 853   1      }
 854          
 855          
 856          /*数据转化*/
 857          void conversion_t(void)
 858          {
 859   1        uchar save=0,save1=0;
 860   1        if(temp.temp_data<0)           // 判断数值符号
 861   1          {temp_pn=1;temp.temp_data=~temp.temp_data+1;}
C51 COMPILER V8.02   縚制系统                                                              08/08/2008 18:31:54 PAGE 15  

 862   1        else temp_pn=0;
 863   1        if(temp.t_data[1]&0x01==1) save+=6;       // 小数点后的值转变
 864   1        if((temp.t_data[1]>>1)&0x01==1) save+=12;
 865   1        if((temp.t_data[1]>>2)&0x01==1) save+=25;
 866   1        if((temp.t_data[1]>>3)&0x01==1) save+=50;
 867   1        temp.temp_data>>=4;
 868   1        save1=temp.temp_data&0x00ff;                          // 整数部分数值
 869   1        temp.t_data[0]=save1;
 870   1        temp.t_data[1]=save;
 871   1        thl_als=1;
 872   1        if(save1>=(als_temp[0]&0x7f))      // 温度比较
 873   1        {
 874   2              if(!temp_pn||(temp_pn&(als_temp[0]&0x80)!=0)){ als_th=open;als_tl=close;}
 875   2        }
 876   1        else if(save1<(als_temp[1]&0x7f)&&als_temp[1]!=255)
 877   1        {
 878   2          if(!temp_pn||(temp_pn&(als_temp[1]&0x80)!=0)) {als_tl=open;als_th=close;}
 879   2        }
 880   1        else {als_th=als_tl=close;thl_als=0;buzstop=0;buzzer=close;} 
 881   1      }
 882          
 883          
 884          
 885          /*18b20功能*/
 886          void ds18b20_func(void)
 887          {
 888   1        EA=0;
 889   1        TR0=0;
 890   1        temp.temp_data=0;
 891   1        init_ds18b20(); 
 892   1        send18b20_byte(0xcc); // 跳过ROM
 893   1        send18b20_byte(0x44); // 温度转换
 894   1        delay_pw();
 895   1        init_ds18b20();
 896   1        send18b20_byte(0xcc); 
 897   1        send18b20_byte(0xbe); // 读RAM
 898   1        receive18b20();               // 读取温度值
 899   1        conversion_t();               // 数值转换
 900   1        EA=1;
 901   1        TR0=1;
 902   1      }
 903          
 904          
 905          
 906          /*=====================================================================================
 907           函数名称:画面构造
 908           功能描述:界面1、2、3,图片菜单,反白,标头,16*16(32)图片
 909           全局变量:无
 910           参数说明:函数说明
 911           返回说明:无
 912           设 计 人:LIJH
 913           版    本:1.0
 914           说    明:X坐标每一格每次16点
 915           ======================================================================================*/
 916          
 917          
 918          /*反白或显示图片 参数格式:(H)8bit数据,(L)8bit数据,X0坐标(16bit),Y0坐标(1bit),X坐标(16bit),Y坐标(1bit)*
             -/
 919          void con_disp (uchar data1,uchar data2,uchar x0,uchar y0,uchar xl,uchar yl)
 920          {
 921   1        uchar i,j;
 922   1        for(j=0;j<yl;j++)
C51 COMPILER V8.02   縚制系统                                                              08/08/2008 18:31:54 PAGE 16  

 923   1        {
 924   2          for(i=0;i<xl;i++)
 925   2          {
 926   3            wr_lcd(comm,0x34);     // 扩展功能
 927   3            wr_lcd(comm,y0+j);         // 写Y坐标
 928   3            wr_lcd(comm,x0+i);         // 写X坐标
 929   3            wr_lcd(comm,0x30);         // 普通功能
 930   3            wr_lcd(dat,data1);
 931   3            wr_lcd(dat,data2);
 932   3          }
 933   2        }
 934   1        wr_lcd(comm,0x36);             // 开绘图显示
 935   1      }
 936          
 937          
 938          
 939          /*显示字体 参数格式: 显示位置(0x80-0x9f),显示个数,显示内容指针*/
 940          void display_cnasc(uchar dis_bit,uchar num,uchar *cnasc)
 941          {
 942   1        wr_lcd(comm,0x30);         // 普通功能
 943   1        wr_lcd(comm,dis_bit);      // 写地址
 944   1        while(num>0)
 945   1        {
 946   2          wr_lcd(dat,*(cnasc++));
 947   2          wr_lcd(dat,*(cnasc++));
 948   2              num--; 
 949   2        }
 950   1      }
 951          
 952          
 953          
 954          /*导航标头显示*/
 955          void dis_title(void)
 956          {
 957   1        display_cnasc(0x80,1,"\x15 ");
 958   1        display_cnasc(0x90,1,"┏");
 959   1        display_cnasc(0x97,1,"┓");
 960   1        display_cnasc(0x98,1,"┗");
 961   1        display_cnasc(0x9f,1,"┛");
 962   1        display_cnasc(0x92,1,"\x1e ");
 963   1        display_cnasc(0x9a,1,"\x1f ");
 964   1        con_disp(0xff,0xff,0x80,0x80,3,16);
 965   1        con_disp(0xef,0xef,0x83,0x80,1,16);
 966   1        con_disp(0xde,0xf7,0x84,0x80,1,16);
 967   1        con_disp(0x76,0xdb,0x85,0x80,1,16);
 968   1        con_disp(0x55,0x55,0x86,0x80,1,16);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -