📄 cortrol.lst
字号:
741 5 }
742 4 }
743 3
744 3
745 3 else if(i==1)
746 3 {
747 4 if(TH_flag==TEMP)
748 4 {
749 5 H_Temp_set=(KD1*10+KD2)*DDC;
750 5 return;
751 5 }
752 4 if(TH_flag==HUMI)
753 4 {
754 5 H_Hum_set=(KD1*10+KD2)*DDC;
755 5 return;
756 5 }
757 4 }
758 3 }
759 2 else if(keydata>=0&&keydata<=9)
760 2 { if(DDC==-1)
761 3 {error_bell();
762 4 return;
763 4 }
764 3 Display_set(((KD1*100+KD2*10+keydata)*DDC),i);
765 3 // F++;
766 3 KD3=keydata;
767 3 keyboard_flag=1;
768 3 // KeyNumber=0xff;
769 3 }
770 2 else if(kb_data==0x0E) //按下"返回"键
771 2 return;
772 2 else
773 2 {error_bell();
774 3 return;
775 3 }
776 2 keyboard_flag=1;
777 2 while(keyboard_flag==1);
778 2 if(kb_data==0x0F) //有“百”位数据时按下"确定"键
779 2 {if(i==0)
780 3 {if(TH_flag==TEMP)
781 4 { L_Temp_set=(KD1*100+KD2*10+KD3)*DDC;
782 5 keydata=0xff;
783 5 // KeyNumber=0xff;
784 5 continue;
785 5 }
786 4 }
C51 COMPILER V7.20 CORTROL 08/25/2008 11:28:19 PAGE 14
787 3 else if(i==1)
788 3 {if(TH_flag==TEMP)
789 4 { H_Temp_set=(KD1*100+KD2*10+KD3)*DDC;
790 5 return;
791 5 }
792 4 if(TH_flag==HUMI)
793 4 { H_Hum_set=(KD1*100+KD2*10+KD3)*DDC;
794 5 return;
795 5 }
796 4 }
797 3 }
798 2 else if(kb_data==0x0E) //按下"返回"键
799 2 return;
800 2 else
801 2 {error_bell(); //蜂鸣器报错误信号
802 3 return;
803 3 }
804 2 }
805 1
806 1 }
807 //=================================================================================
808
809 //****************************键值转换函数******************************************
810 //*****函数名称:key_switch **********
811 //*****函数功能:把实际键值转换成键盘上标识的键值 **********
812 //**********************************************************************************
813 uchar key_switch(unsigned char key_d)
814 {unsigned char key_cost;
815 1 switch(key_d)
816 1 {case 0: key_cost=7;break;
817 2 case 1: key_cost=8;break;
818 2 case 2: key_cost=9;break;
819 2 case 3: key_cost=0x10;break;
820 2 case 4: key_cost=4;break;
821 2 case 5: key_cost=5;break;
822 2 case 6: key_cost=6;break;
823 2 case 7: key_cost=0x11;break;
824 2 case 8: key_cost=1;break;
825 2 case 9: key_cost=2;break;
826 2 case 0X0A: key_cost=3;break;
827 2 case 0X0B: key_cost=0X12;break;
828 2 case 0X0C: key_cost=0X00;break;
829 2 case 0X0D: key_cost=0X0D;break;
830 2 case 0X0E: key_cost=0X0E;break;
831 2 case 0X0F: key_cost=0X0F;break;
832 2 default: break;
833 2 }
834 1 return key_cost;
835 1 }
836
837 //========================================================================================================
-=====//
838 //***************************************************************************************************
839 //******************************读温湿度数据*******************************************
840 //****函数功能:调用I2C读写函数计算出温湿度值 ****************
841 //****入口参数:TEMP,HUMI,温度标志,湿度标志 ****************
842 //****出口参数:TH_value,测量温度值,测量的湿度值 ****************
843 //***************************************************************************************************
844 signed int measure(unsigned char mode)
845 { unsigned int TH_H,TH_L,sum;
846 1 unsigned int i;
847 1 signed int TH_value,rh_lin;
C51 COMPILER V7.20 CORTROL 08/25/2008 11:28:19 PAGE 15
848 1 const float xdata T1=+0.01f; // for 14 Bit @ 5V
849 1 const float xdata T2=+0.00008f; // for 14 Bit @ 5V
850 1 float xdata t_C; // t_C : 温度
851 1
852 1 s_transstart(); //传输开始
853 1 switch(mode)
854 1 {case TEMP: error+=s_write_byte(MEASURE_TEMP); //发送测温度命令
855 2 break;
856 2 case HUMI: error+=s_write_byte(MEASURE_HUM1); //发送测湿度命令
857 2 break;
858 2 default: break;
859 2 }
860 1
861 1 for(i=0;i<65535;i++) //等待温湿度值准备
862 1 {if(TH_DATA==0)
863 2 break;
864 2 }
865 1
866 1 if(TH_DATA)
867 1 error=error+1;
868 1 TH_H=s_read_byte(noACK); //读温湿度值高位
869 1 TH_L=s_read_byte(ACK); //读温湿度值低位
870 1 TH_H=TH_H<<8;
871 1 sum=TH_H+TH_L;
872 1 t_C=sum*0.01 - 40;
873 1 if(mode)
874 1 {rh_lin=((-4)+(0.0405*sum)+(sum*sum*(-2.8E-6))); //计算湿度值
875 2 TH_value=(t_C-25)*(T1+T2*sum)+rh_lin; //计算温度湿度 [%RH]
876 2 if(TH_value>100)TH_value=100; //湿度范围:0.1-100之间
877 2 }
878 1 else
879 1 TH_value=(-40)+(0.01*sum); //计算温度值
880 1
881 1 return TH_value;
882 1 // LED=0;
883 1 }
884
885 //============================================================================
886
887 void s_transstart() //SHT11I2C启动
888 {
889 1 TH_DATA=1; TH_SCK=0;
890 1 delay(1);
891 1 TH_SCK=1;
892 1 delay(1);
893 1 TH_DATA=0;
894 1 delay(1);
895 1 TH_SCK=0;
896 1 delay(1);
897 1 TH_SCK=1;
898 1 delay(1);
899 1 TH_DATA=1;
900 1 delay(1);
901 1 TH_SCK=0;
902 1 }
903
904 //============================================================================
905
906 char s_write_byte(unsigned char value)// 写字节 检查ack应答
907 {
908 1 unsigned char xdata i,error=0;
909 1 for (i=0x80;i>0;i/=2) //shift bit for masking
C51 COMPILER V7.20 CORTROL 08/25/2008 11:28:19 PAGE 16
910 1 { if (i & value) TH_DATA=1; //masking value with i , write to SENSI-BUS
911 2 else TH_DATA=0;
912 2 TH_SCK=1; //clk for SENSI-BUS
913 2 TH_SCK=1;
914 2 TH_SCK=0;
915 2 }
916 1 TH_DATA=1;//disp(); //release DAT-line
917 1 TH_SCK=1; //disp(); //clk #9 for ack
918 1 error=TH_DATA; //disp(); //check ack (DAT will be pulled down by SHT11)
919 1 TH_SCK=0;
920 1 return error; //error=1 in case of no acknowledge
921 1 }
922
923 //=======================================================================
924
925 unsigned char s_read_byte(uchar ack) // 读字节 检查ack应答(if ack=1)
926 {
927 1 uchar xdata i,val=0;
928 1 TH_DATA=1; //release DAT-line
929 1 for (i=0x80;i>0;i/=2) //shift bit for masking
930 1 { TH_SCK=1; //clk for SENSI-BUS
931 2 if (TH_DATA) val=(val | i); //read bit
932 2 //disp();
933 2 TH_SCK=0;
934 2 }
935 1 TH_DATA=!ack; //in case of "ack==1" pull down DAT-Line
936 1 TH_SCK=1; //disp(); //clk #9 for ack
937 1 //disp(); //pulswith approx. 5 us
938 1 TH_SCK=0;//disp();
939 1 TH_DATA=1; //release DAT-line
940 1 return val;
941 1 }
942 //=========================================================================================
943 //=============================延时函数========================================
944 void delay1(unsigned char d1)
945 {
946 1 uchar j,k;
947 1 for(;d1>0;d1--)
948 1 {for(j=50;j>0;j--)
949 2 {for(k=0;k>0;k--);
950 3 }
951 2 }
952 1
953 1 }
954 void delay(unsigned int i)
955 {
956 1 for(;i>0;i--)
957 1 ;
958 1 }
959
960 //*************************************蜂鸣器函数*******************************
961 void bell(void)
962 {BELL=0;
963 1 delay(0x8fff);
964 1 BELL=1;
965 1 }
966 void error_bell(void)
967 { char k;
968 1 for(k=4;k>0;k--)
969 1 {bell();
970 2 delay(0x9fff);
971 2 }
C51 COMPILER V7.20 CORTROL 08/25/2008 11:28:19 PAGE 17
972 1 }
973 //*****************************************************************************
974
975
976
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 3473 ----
CONSTANT SIZE = 50 ----
XDATA SIZE = 7 21
PDATA SIZE = ---- ----
DATA SIZE = 53 34
IDATA SIZE = ---- ----
BIT SIZE = 3 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -