?? 控制系統(tǒng).lst
字號(hào):
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); // 狀態(tài)寄存
735 1 w1302(d02_passw,0x74); // 密碼儲(chǔ)存首位
736 1 w1302(d02_passw+2,0x14); // 初始值為:741456
737 1 w1302(d02_passw+4,0x56); // 密碼最后一位
C51 COMPILER V8.02 縚制系統(tǒng) 08/08/2008 18:31:54 PAGE 13
738 1 w1302(d02_alm,0x12); // 鬧鈴時(shí)(12小時(shí))
739 1 w1302(d02_alm+2,0x00); // 鬧鈴分(0分)
740 1 w1302(d02_temp,0xff); // 溫度上限(255為關(guān)閉)
741 1 w1302(d02_temp+2,0xff); // 溫度下限(關(guān)閉)
742 1 w1302(d02_initsi,0xb4); // 是否要初始化標(biāo)記(0xb4為已經(jīng)初始化)
743 1 w1302(d02_wrc,0x80);
744 1 }
745
746 /*寫DS1302一字節(jié)的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 /*讀取時(shí)間*/
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 // 鬧鈴時(shí)間比較
774 1 {
775 2 alm_run=0;buzstop=0;buzzer=close;
776 2 }
777 1 }
778
779 /*開機(jī)讀數(shù)據(jù)*/
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 函數(shù)名稱:DS18b20驅(qū)動(dòng)
C51 COMPILER V8.02 縚制系統(tǒng) 08/08/2008 18:31:54 PAGE 14
800 功能描述:基本驅(qū)動(dòng)(讀寫數(shù)據(jù)、數(shù)據(jù)轉(zhuǎn)換、初始化)
801 全局變量:無(wú)
802 參數(shù)說(shuō)明:無(wú)
803 返回說(shuō)明:返回讀取的數(shù)據(jù)
804 設(shè) 計(jì) 人:LIJH
805 版 本:1.0
806 說(shuō) 明:調(diào)試中。。。
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); // 延時(shí)≥480us
817 1 b20_io=1;
818 1 delay_b20(12); // 拉高為高電平后在15—60us出現(xiàn)低電平,并維持60—240us
819 1 ds18b20=~b20_io;
820 1 delay_b20(40);
821 1 }
822
823
824 /*向18B20發(fā)送一個(gè)字節(jié)*/
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; // 拉低電平后向總線寫入一個(gè)位,15us后18B20接收
831 2 b20_io=data_send&0x01;
832 2 delay_b20(10); // 延時(shí)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) // 讀入總線數(shù)值
850 2 temp.t_data[n]|=0x80;
851 2 delay_b20(10); // 等待60us
852 2 }
853 1 }
854
855
856 /*數(shù)據(jù)轉(zhuǎn)化*/
857 void conversion_t(void)
858 {
859 1 uchar save=0,save1=0;
860 1 if(temp.temp_data<0) // 判斷數(shù)值符號(hào)
861 1 {temp_pn=1;temp.temp_data=~temp.temp_data+1;}
C51 COMPILER V8.02 縚制系統(tǒng) 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; // 小數(shù)點(diǎn)后的值轉(zhuǎn)變
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; // 整數(shù)部分?jǐn)?shù)值
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); // 跳過(guò)ROM
893 1 send18b20_byte(0x44); // 溫度轉(zhuǎn)換
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(); // 數(shù)值轉(zhuǎn)換
900 1 EA=1;
901 1 TR0=1;
902 1 }
903
904
905
906 /*=====================================================================================
907 函數(shù)名稱:畫面構(gòu)造
908 功能描述:界面1、2、3,圖片菜單,反白,標(biāo)頭,16*16(32)圖片
909 全局變量:無(wú)
910 參數(shù)說(shuō)明:函數(shù)說(shuō)明
911 返回說(shuō)明:無(wú)
912 設(shè) 計(jì) 人:LIJH
913 版 本:1.0
914 說(shuō) 明:X坐標(biāo)每一格每次16點(diǎn)
915 ======================================================================================*/
916
917
918 /*反白或顯示圖片 參數(shù)格式:(H)8bit數(shù)據(jù),(L)8bit數(shù)據(jù),X0坐標(biāo)(16bit),Y0坐標(biāo)(1bit),X坐標(biāo)(16bit),Y坐標(biāo)(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 縚制系統(tǒng) 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); // 擴(kuò)展功能
927 3 wr_lcd(comm,y0+j); // 寫Y坐標(biāo)
928 3 wr_lcd(comm,x0+i); // 寫X坐標(biāo)
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 /*顯示字體 參數(shù)格式: 顯示位置(0x80-0x9f),顯示個(gè)數(shù),顯示內(nèi)容指針*/
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 /*導(dǎo)航標(biāo)頭顯示*/
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);
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -