|
RE: 1.2´çÊýÂë¹ÜʱÖÓ_ζÈ_¹â¿Ø_º¬Ô´Âë_ÔÀíͼ
Ê×ÏȸÐлÂÛ̳ÖÐÌṩ¡±1´çÊýÂë¹ÜʱÖÓ+12C5A60S2µ¥Æ¬»ú+×Ô¶¯ÁÁ¶È+ʱ¼äζÈÂÖÁ÷ÏÔʾ£¨ÊµÎï+´úÂ룩¡°×÷Õߣ¬
±¾ÈËÔÚÔ×÷Õß»ù´¡ÉÏ£¬¸ù¾ÝÏÖÓÐÔªÆ÷¼þ£¬³É¹¦ÖÆ×÷ÁË1.2´çÊýÂë¹ÜʱÖÓ£¬ÓÉÓÚÊ×´ÎʹÓüÎÁ¢´´»æÖÆÔÀíͼºÍPCB,
ʹÓÃË«Ãæ°åÖÆ×÷PCB,ÓÉÓÚÏß¾¶½ÏϸºÍ¹ý¿×´¦Àí¼¼Êõ²»ÐиÄΪµ¥Ãæ°åÖÆ×÷£¬ÖÆ×÷ÖÐDS1302²»¼ÆÊ±£¬ºóÔö¼ÓÁËC3ºÍC4
Â˲¨µçÈݽâ¾öÁËÎÊÌâ¡£- /*********************************************************************************
- ÃèÊö£º 4λ¹²ÑôÊýÂë¹ÜʱÖÓ£¬ÏÔʾ88£º88Ñùʽ£¬Õý³£×ßʱµÄʱºò£¬¡°£º¡±1ÃëÉÁ˸2´Î£»µ÷ʱ¼äµÄµÄʱºòðºÅϨÃð
- µ÷ʱ£º°´KEY1°´¼üµÚ1´ÎСʱλÉÁ˸£¬ÔÙ°´KEY2Ò»´ÎСʱ¼Ó1£¬°´KEY3Ò»´ÎСʱ¼õ1£¬³¤°´Á¬¼ÓÁ¬¼õ£»
- °´KEY1°´¼üµÚ2´Î·ÖÖÓλÉÁ˸£¬ÔÙ°´KEY2Ò»´Î·ÖÖÓ¼Ó1£¬°´KEY3Ò»´Î·ÖÖÓ¼õ1£¬³¤°´Á¬¼ÓÁ¬¼õ£»
- °´KEY1°´¼üµÚ3´Î£¬Ãë´ÓÁ㿪ʼÀÛ¼Ó£¬Ê±Öӻص½Õý³£×ßʱ£»
- УʱµÄʱºòÏȵ÷ºÃʱ¡¢·Ö£¬·ÖÖÓÒª±È²Î¿¼Ê±¼äµÄ·ÖÖÓ¼Ó1·Ö£¬
- ÔÙ¿´²Î¿¼Ê±¼äµÄÃëÊýµ½ÁË59ÔÙ°´KEY1°´¼üµÄµÚ3´Î£¬ÕâÑù¶Ôʱ¾Í±È½Ï×¼ÁË¡£
- ¼Ó±¸ÓÃµç³Ø£¬µôµç×ßʱ
-
- KEY2¼üµÚ2¹¦ÄÜ£º·Çµ÷ʱ״̬£¬Îª¹â¿Ø¿ª¹Ø£»
- KEY3¼üµÚ2¹¦ÄÜ£º·Çµ÷ʱ״̬£¬ÎªÏÔʾÇл»¿ª¹Ø£»
- DS18B20×öζȼì²â£¬ÊµÊ±Ê±ÖÓÓëζÈÂÖÁ÷ÏÔʾ£»
- ζÈÏÔʾ·¶Î§£º -9.9¡æ~99.9¡æ£»
- Ôö¼ÓÊýÂë¹Üµ÷ÁÁ¶È¹¦ÄÜ,°´¼ü10¼¶ÁÁ¶ÈP1.0½Ó10Kµç×èÉÏÀ¡¢¹âÃôµç×èÏÂÀ·Öѹ£»
- »·¾³¹âÏßÔ½ÁÁ£¬ÊýÂë¹ÜÔ½ÁÁ£¬·´Ö®ÊýÂë¹ÜÔ½°µ¡£
- ʵÎïͨ¹ý.
- 12MHz¾§Õñ£¬STC15F2K60S2+DS1302ʱÖÓоƬ+DS18B20£¬
- P0¿Ú½Ó¶Î룬P2^4~P2^7½ÓpnpÈý¼«¹Ü¿ØÖÆ4¸ö¹²Ñô¼«¡£
- **********************************************************************************/
- //#include <STC12C5A60S2.h>
- #include <STC15F2K60S2.h>
- #include <intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit TSCLK = P2^2;//ʱÖÓÏß
- sbit TIO = P2^1;//Êý¾ÝÏß
- sbit TRST = P2^0;//ʹÄܶË
- sbit key1 = P3^4; //ÉèÖüü
- sbit key2 = P3^3; //¼Ó /¹â¿Ø¿ª¹Ø¼ü£¨Ð£Ê±µÄʱºò×ö¼Ó¼ü£¬·´Ö®Îª¹â¿Ø¿ª¹Ø£©
- sbit key3 = P3^2; // ¼õ/ÏÔʾÇл»¼ü
- sbit DQ = P2^3; //DS18B20Êý¾Ý¿Ú
- sbit w1 = P2^4; //ÉèÖÃλÇý¶¯¿Ú
- sbit w2 = P2^5;
- sbit w3 = P2^6;
- sbit w4 = P2^7;
- sbit w5 = P3^7; //´Ëλ²»ÏÔʾ
- sbit dd = P1^4; //·äÃùÆ÷¿ØÖƶË
- uchar xs=0; //ÏÔʾÇл»¼ÆÊý±äÁ¿
- uchar tian=0;
- uchar knum,shan_cont;
- char shi,fen,miao;
- uchar ba=40;
- uint mh,mh_count,count;
- bit shan; //УʱÉÁ˸±ê־λ
- uchar s=0; //ÏÔʾ¸ººÅ
- uint temp; //ζÈÖµ
- bit flag; //ÂÖÁ÷ÏÔʾ±ê־λ
- bit flag_gk; //¹â¿Ø±ê־λ
- bit flag_js=0; //×Ô¶¯Ð£Ê±±êÖ¾
- bit flag_fm; //·äÃùÆ÷Æô¶¯±êÖ¾
- uchar fm; //·äÃùÆ÷¼ÆÊ±±äÁ¿
- /***************************************¶¨Òåת»»¿ØÖƼĴæÆ÷¿ØÖÆÎ»*****************************************/
- #define ADC_POWER 0X80 //µçÔ´¿ØÖÆÎ»
- #define ADC_FLAG 0X10 //ת»»½áÊø±ê־λ
- #define ADC_START 0X08 //ת»»¿ªÊ¼Î»
- /*********************************************¶¨ÒåADת»»ËÙ¶È*********************************************/
- #define ADC_SPEEDLL_540 0X00
- #define ADC_SPEEDLL_360 0X20
- #define ADC_SPEEDLL_180 0X40
- #define ADC_SPEEDLL_90 0X60
- /***********дʱ·ÖÃëµØÖ·************/
- #define write_shi 0x84
- #define write_fen 0x82
- #define write_miao 0x80
- #define write_ram 0xc0
- /***********¶Áʱ·ÖÃëµØÖ·************/
- #define read_shi 0x85
- #define read_fen 0x83
- #define read_miao 0x81
- #define read_ram 0xc1
- uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0x46,0xbf};//¹²Ñô¶ÎÂë £¨0--9¡¢ºÚÆÁ¡¢C¡¢-£©
- /*********************************************************************************************************
- ** º¯Êý¹¦ÄÜ £ºÑÓʱº¯Êý
- ** º¯Êý˵Ã÷ £ºÀûÓÃÈí¼þÑÓʱ£¬Õ¼ÓÃCPU
- ** Èë¿Ú²ÎÊý £ºtime:ÐèÒªÑÓʱµÄʱ¼ä£¬
- ** ³ö¿Ú²ÎÊý £ºÎÞ
- *********************************************************************************************************/
- void Delay_ms(uint time)
- {
- uint i,j;
- for(i = 0;i < time;i ++)
- for(j = 0;j < 45;j ++);
- }
- /*********************************************************************************************************
- ** º¯Êý¹¦ÄÜ £ºÑÓʱº¯Êý
- ** º¯Êý˵Ã÷ £ºÀûÓÃÈí¼þÑÓʱ£¬Õ¼ÓÃCPU£¬¾µ÷ÊÔ×îСµ¥Î»´óԼΪ1us
- ** Èë¿Ú²ÎÊý £ºtime:ÐèÒªÑÓʱµÄʱ¼ä£¬µ¥Î»us
- ** ³ö¿Ú²ÎÊý £ºÎÞ
- *********************************************************************************************************/
- void delay(uchar n)
- {
- while (n--)
- {
- _nop_();
- _nop_();
- }
- }
- /*****************DS18B20******************/
- void Init_Ds18b20(void) //DS18B20³õʼ»¯send reset and initialization command
- {
- DQ = 1; //DQ¸´Î»,²»ÒªÒ²¿ÉÐС£
- delay(1); //ÉÔ×öÑÓʱ
- DQ = 0; //µ¥Æ¬»úÀµÍ×ÜÏß
- //delay(250); //¾«È·ÑÓʱ£¬Î¬³ÖÖÁÉÙ480us
- EA=0;
- delay(170);
- EA=1;
- DQ = 1;
- EA=0; //ÊÍ·Å×ÜÏߣ¬¼´À¸ßÁË×ÜÏß
- delay(170); //´Ë´¦ÑÓʱÓÐ×ã¹»,È·±£ÄÜÈÃDS18B20·¢³ö´æÔÚÂö³å¡£
- EA=1;
- }
- uchar Read_One_Byte() //¶Áȡһ¸ö×Ö½ÚµÄÊý¾Ýread a byte date
- //¶ÁÊý¾Ýʱ,Êý¾ÝÒÔ×Ö½ÚµÄ×îµÍÓÐЧλÏÈ´Ó×ÜÏßÒÆ³ö
- {
- uchar i = 0;
- uchar dat = 0;
- for(i=8;i>0;i--)
- {
- DQ = 0; //½«×ÜÏßÀµÍ£¬ÒªÔÚ1usÖ®ºóÊÍ·Å×ÜÏß //µ¥Æ¬»úÒªÔÚ´ËϽµÑغóµÄ15usÄÚ¶ÁÊý¾Ý²Å»áÓÐЧ¡£
- delay(1); //ÖÁÉÙά³ÖÁË1us,±íʾ¶ÁʱÐò¿ªÊ¼
- dat >>= 1; //ÈôÓ×ÜÏßÉ϶Áµ½µÄλÊý¾Ý£¬ÒÀ´Î´Ó¸ßÎ»ÒÆ¶¯µ½µÍλ¡£
- DQ = 1; //ÊÍ·Å×ÜÏߣ¬´ËºóDS18B20»á¿ØÖÆ×ÜÏß,°ÑÊý¾Ý´«Êäµ½×ÜÏßÉÏ
- delay(7); //ÑÓʱ7us,´Ë´¦²ÎÕÕÍÆ¼öµÄ¶ÁʱÐòͼ£¬¾¡Á¿°Ñ¿ØÖÆÆ÷²ÉÑùʱ¼ä·Åµ½¶ÁʱÐòºóµÄ15usÄÚµÄ×îºó²¿·Ö
- if(DQ) //¿ØÖÆÆ÷½øÐвÉÑù
- {
- dat |= 0x80; //Èô×ÜÏßΪ1,¼´DQΪ1,ÄǾͰÑdatµÄ×î¸ßλÖÃ1;ÈôΪ0,Ôò²»½øÐд¦Àí,±£³ÖΪ0
- }
- EA=0;
- delay(40); //´ËÑÓʱ²»ÄÜÉÙ£¬È·±£¶ÁʱÐòµÄ³¤¶È60us¡£
- EA=1;
- }
- return (dat);
- }
- void Write_One_Byte(uchar dat)
- {
- uchar i = 0;
- for(i=8;i>0;i--)
- {
- DQ = 0; //ÀµÍ×ÜÏß
- delay(1); //ÖÁÉÙά³ÖÁË1us,±íʾдʱÐò(°üÀ¨Ð´0ʱÐò»òд1ʱÐò)¿ªÊ¼
- DQ = dat&0x01; //´Ó×Ö½ÚµÄ×îµÍλ¿ªÊ¼´«Êä
- //Ö¸ÁîdatµÄ×îµÍλ¸³Óè¸ø×ÜÏß,±ØÐëÔÚÀµÍ×ÜÏߺóµÄ15usÄÚ, //ÒòΪ15usºóDS18B20»á¶Ô×ÜÏß²ÉÑù¡£
- delay(60); //±ØÐëÈÃдʱÐò³ÖÐøÖÁÉÙ60us
- DQ = 1; //дÍêºó,±ØÐëÊÍ·Å×ÜÏß,
- dat >>= 1;
- delay(1);
- }
- }
- uint Get_Tmp() //»ñȡζÈget the temperature
- {
- float tt;
- uchar L,M;
- EA=0;
- Init_Ds18b20(); //³õʼ»¯
- Write_One_Byte(0xcc); //ºöÂÔROMÖ¸Áî
- Write_One_Byte(0x44); //ζÈת»»Ö¸Áî
- Init_Ds18b20(); //³õʼ»¯
- Write_One_Byte(0xcc); //ºöÂÔROMÖ¸Áî
- Write_One_Byte(0xbe); //¶ÁÔÝ´æÆ÷Ö¸Áî
- L = Read_One_Byte(); //¶ÁÈ¡µ½µÄµÚÒ»¸ö×Ö½ÚΪζÈLSB
- M = Read_One_Byte(); //¶ÁÈ¡µ½µÄµÚÒ»¸ö×Ö½ÚΪζÈMSB
- temp = M; //ÏȰѸ߰ËλÓÐЧÊý¾Ý¸³ÓÚtemp
- temp <<= 8; //°ÑÒÔÉÏ8λÊý¾Ý´ÓtempµÍ°ËÎ»ÒÆµ½¸ß°Ëλ
- temp = temp|L; //Á½×ֽںϳÉÒ»¸öÕûÐͱäÁ¿
- EA=1;
- if(M >= 0x08) //ÅжÏÊÇ·ñΪ¸ºÊý
- {
- temp = ~temp + 1;//¸ºÊýÊÇÒÔ²¹ÂëµÄÐÎʽ´æ·ÅµÄÐèҪȡ·´¼Ó1
- s = 0xbf; //ÏÔʾ¸ºÊý·ûºÅ
- }
- else s = 0; //ΪÕýÊýÔò²»ÏÔʾ¸ºÊý·ûºÅ
- tt = temp*0.0625; //µÃµ½ÕæÊµÊ®½øÖÆÎ¶ÈÖµ
- //ÒòΪDS18B20¿ÉÒÔ¾«È·µ½0.0625¶È
- //ËùÒÔ¶Á»ØÊý¾ÝµÄ×îµÍλ´ú±íµÄÊÇ0.0625¶È
- temp = tt*10+0.5; //·Å´óÊ®±¶
- //ÕâÑù×öµÄÄ¿µÄ½«Ð¡ÊýµãºóµÚһλҲת»»Îª¿ÉÏÔʾÊý×Ö
- //ͬʱ½øÐÐÒ»¸öËÄÉáÎåÈë²Ù×÷¡£
- return temp;
- }
- /****************ζÈÏÔʾº¯Êý**************/
- void Display_tem(uint temp) //ÏÔʾ³ÌÐò
- {
- uchar A1,A2,A3;
- A1 = temp/100; //°Ùλ
- A2 = temp%100/10; //ʮλ
- A3 = temp%10; //¸öλ
-
- if(A1 > 0 && s == 0 )
- {
- P0 = 0xff;
- w2 = 1; w3 = 1; w4 = 1;
- Delay_ms(50-ba);
- P0 = table[A1]; //ÏÔʾ°Ùλ
- w1 = 0;
- Delay_ms(ba);
- }
- else
- {
- if(A1 == 0 && s == 0)
- {
- P0 = 0xff;
- w2 = 1; w3 = 1; w4 = 1;
- Delay_ms(50-ba);
- P0 = table[10]; //°ÙλΪ0²»ÏÔ
- w1 = 0;
- Delay_ms(ba);
- }
- else
- if(s != 0)
- {
- P0 = 0xff;
- w2 = 1; w3 = 1; w4 = 1;
- Delay_ms(50-ba);
- P0 = s; //°ÙλΪ¸ºÊýÏÔʾ-
- w1 = 0;
- Delay_ms(ba);
- }
-
-
- }
-
-
- P0 = 0xff;
- w1 = 1; w3 = 1; w4 = 1;
- Delay_ms(50-ba);
- P0 = table[A2]&0X7F; //ÏÔʾʮλ,ʹÓõÄÊÇÓÐСÊýµãµÄÊý×é(ÒòΪtempÖµÀ©´óÁË10±¶,ËäÈ»ÊÇʮλ,ʵ¼ÊΪ¸öλ)
- w2 = 0;
- Delay_ms(ba);
-
- P0 = 0xff;
- w1 = 1; w2 = 1; w4 = 1;
- Delay_ms(50-ba);
- P0 = table[A3];
- w3 = 0;
- Delay_ms(ba);
-
- P0 = 0xff;
- w1 = 1; w2 = 1; w3 = 1;
- Delay_ms(50-ba);
- P0 = 0x46; //ÏÔʾC×ÖÑù
- w4 = 0;
- Delay_ms(ba);
-
- P0 = 0xff;
- w1 = 1; w2 = 1; w3 = 1;
- Delay_ms(50-ba);
- P0 = 0xff;
- w5 = 0;
- P0 = 0xff;
- Delay_ms(ba);
- }
- void display( uchar shi,uchar fen) //ʱ¼äÏÔʾº¯Êý
- {
- /*****Õý³£ÏÔʾ******/
- if(knum == 0)
- {
- if(shi/10 > 0)
- {
- w2 = 1; w3 = 1; w4 = 1;
- Delay_ms(50-ba);
- P0 = table[shi/10]; //ÏÔʾСʱʮλ
- w1 = 0;
- Delay_ms(ba);
- }
- else
- {
- w2 = 1; w3 = 1; w4 = 1;
- Delay_ms(50-ba);
- P0 = table[10]; //СʱʮλΪ0²»ÏÔʾ
- w1 = 0;
- Delay_ms(ba);
-
- }
-
- P0 = 0xff;
- w1 = 1; w3 = 1; w4 = 1;
- Delay_ms(50-ba);
- if(mh_count>=50)
- P0 = table[shi%10]&0x7f; //ÏÔʾСʱ¸öλ
- else
- P0 = table[shi%10];
- w2 = 0;
- Delay_ms(ba);
-
- P0 = 0xff;
- w1 = 1; w2 = 1; w4 = 1;
- Delay_ms(50-ba);
- if(mh_count>=50)
- P0 = table[fen/10]&0x7f; //ÏÔʾ·ÖÖÓʮλ
- else
- P0 = table[fen/10];
- w3 = 0;
- Delay_ms(ba);
-
- P0 = 0xff;
- w2 = 1; w3 = 1; w1 = 1;
- Delay_ms(50-ba);
- P0 = table[fen%10]; //ÏÔʾ·ÖÖÓ¸öλ
- w4 = 0;
- Delay_ms(ba);
-
- P0 = 0xff;
- w1 = 1; w2 = 1; w3 = 1;
- Delay_ms(50-ba);
- P0 = 0xff;
- w5 = 0; //ÕâÀïɨÃèÒ»¸ö¿Õ룬ÊýÂë¹Üǰ4λÁÁ¶È¾Í¾ùÔÈÁË£¬µÚ4λÓëǰ3λÁÁ¶ÈÒ»Ö£¬²»È»µÚ4λҪ±Èǰ3λÁÁ
- P0 = 0xff;
- Delay_ms(ba);
- }
- /********УʱСʱλÉÁ˸************/
- if(knum==1)
- {
- if( shan==0 )
- {
- w2 = 1; w3 = 1; w4 = 1;
- Delay_ms(50-ba);
- P0 = 0xff; //ÏÔʾСʱʮλ
- w1 = 0;
- Delay_ms(ba);
- P0 = 0xff;
- w1 = 1; w3 = 1; w4 = 1;
- Delay_ms(50-ba);
- P0 = 0xff;;
- w2 = 0;
- Delay_ms(ba);
- }
-
- else
- {
- w2 = 1; w3 = 1; w4 = 1;
- Delay_ms(50-ba);
- P0 = table[shi/10]; //ÏÔʾСʱʮλ
- w1 = 0;
- Delay_ms(ba);
-
- P0 = 0xff;
- w1 = 1; w3 = 1; w4 = 1;
- Delay_ms(50-ba);
- P0 = table[shi%10];
- w2 = 0;
- Delay_ms(ba);
- }
- P0 = 0xff;
- w1 = 1; w2 = 1; w4 = 1;
- Delay_ms(50-ba);
- P0 = table[fen/10];
- w3 = 0;
- Delay_ms(ba);
-
- P0 = 0xff;
- w2 = 1; w3 = 1; w1 = 1;
- Delay_ms(50-ba);
- P0 = table[fen%10]; //ÏÔʾ·ÖÖÓ¸öλ
- w4 = 0;
- Delay_ms(ba);
-
- P0 = 0xff;
- w1 = 1; w2 = 1; w3 = 1;
- Delay_ms(50-ba);
- P0 = 0xff;
- w5 = 0; //ÕâÀïɨÃèÒ»¸ö¿Õ룬ÊýÂë¹Üǰ4λÁÁ¶È¾Í¾ùÔÈÁË£¬µÚ4λÓëǰ3λÁÁ¶ÈÒ»Ö£¬²»È»µÚ4λҪ±Èǰ3λÁÁ
- P0 = 0xff;
- Delay_ms(ba);
- }
- /*******Уʱ·ÖÖÓλÉÁ˸*******/
- if(knum==2 )
- {
- if(shan==0)
- {
- w2 = 1; w1 = 1; w4 = 1;
- Delay_ms(50-ba);
- P0 = 0xff; //ÏÔʾСʱʮλ
- w3 = 0;
- Delay_ms(ba);
- P0 = 0xff;
- w1 = 1; w3 = 1; w2 = 1;
- Delay_ms(50-ba);
- P0 = 0xff;;
- w4 = 0;
- Delay_ms(ba);
- }
- else
- {
- w2 = 1; w1 = 1; w4 = 1;
- Delay_ms(50-ba);
- P0 = table[fen/10]; //ÏÔʾСʱʮλ
- w3 = 0;
- Delay_ms(ba);
-
- P0 = 0xff;
- w1 = 1; w3 = 1; w3 = 1;
- Delay_ms(50-ba);
- P0 = table[fen%10];
- w4 = 0;
- Delay_ms(ba);
- }
- P0 = 0xff;
- w3 = 1; w2 = 1; w4 = 1;
- Delay_ms(50-ba);
- P0 = table[shi/10];
- w1 = 0;
- Delay_ms(ba);
-
- P0 = 0xff;
- w4 = 1; w3 = 1; w1 = 1;
- Delay_ms(50-ba);
- P0 = table[shi%10]; //ÏÔʾ·ÖÖÓ¸öλ
- w2 = 0;
- Delay_ms(ba);
-
- P0 = 0xff;
- w1 = 1; w2 = 1; w3 = 1;
- Delay_ms(50-ba);
- P0 = 0xff;
- w5 = 0; //ÕâÀïɨÃèÒ»¸ö¿Õ룬ÊýÂë¹Üǰ4λÁÁ¶È¾Í¾ùÔÈÁË£¬µÚ4λÓëǰ3λÁÁ¶ÈÒ»Ö£¬²»È»µÚ4λҪ±Èǰ3λÁÁ
- P0 = 0xff;
- Delay_ms(ba);
- }
-
- }
- void t0_init()
- {
- TMOD |= 0x01; //¶¨Ê±Æ÷0,16λģʽ
- TL0 = 0xF0; //ÉèÖö¨Ê±³õÖµ 10ºÁÃë³õÖµ @12MHz
- TH0 = 0xD8; //ÉèÖö¨Ê±³õÖµ
- EA=1;
- ET0=1;
- TR0 = 1;
- }
- /*********************************************************************************************************
- ** º¯Êý¹¦ÄÜ £ºÄÚÖÃADCµÄ³õʼ»¯ÅäÖÃ
- ** º¯Êý˵Ã÷ £ºÊ¹ÓÃÄÚÖÃADCʱÐèÒªÏÈÅäÖöÔÓ¦µÄP1¿ÚµÄ¹Ü½ÅΪģÄâÊäÈë
- ** Èë¿Ú²ÎÊý £ºport£ºÐèÒªÅäÖÃΪģÄâÊäÈëµÄͨµÀ£¬Ê¹ÓûòÔËËã¿ÉÒÔͬʱÅäÖöà¸ö¹Ü½Å
- ** È磺ADC_Init(ADC_PORT0 | ADC_PORT1 | ADC_PORT2)µ÷Óô˺¯Êýºó¿ÉÒÔͬʱÅäÖÃP1^0,P1^1,P1^2ΪģÄâÊäÈë
- ** ³ö¿Ú²ÎÊý £ºÎÞ
- *********************************************************************************************************/
- void ADC_Init()
- {
- P1ASF=0x01;//ÉèÖÃADת»»Í¨µÀ P1.0
- ADC_RES=0;//Çå¿Õת»»½á¹û
- ADC_CONTR=ADC_POWER | ADC_SPEEDLL_540;//´ò¿ªADת»¯Æ÷µçÔ´
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- }
- /*********************************************************************************************************
- ** º¯Êý¹¦ÄÜ £º»ñÈ¡ADC¶ÔӦͨµÀµÄÖµ£¬²éѯ·¨
- ** º¯Êý˵Ã÷ £ºÃ¿´ÎÖ»ÄÜ»ñȡһ¸öͨµÀµÄÖµ£¬²»Í¬Í¨µÀÐèÒª·Ö±ðµ÷Óøú¯Êý»ñÈ¡
- ** Èë¿Ú²ÎÊý £º
- ** ³ö¿Ú²ÎÊý £º
- *********************************************************************************************************/
- uchar GetADCResult()//¶ÁȡͨµÀchµÄµçѹֵ
- {
- ADC_CONTR = ADC_POWER | ADC_SPEEDLL_540 | ADC_START;//¿ªÊ¼×ª»»£¬²¢ÉèÖòâÁ¿Í¨µÀΪP1^0
- _nop_();//Ðè¾¹ýËĸöCPUʱÖÓÑÓʱ£¬ÉÏÊöÖµ²ÅÄܱ£Ö¤±»Éè½øADC_CONTR¿ØÖƼĴæÆ÷
- _nop_();
- _nop_();
- _nop_();
- while(!(ADC_CONTR & ADC_FLAG));//µÈ´ýת»»½áÊø
- ADC_CONTR &= ~ADC_FLAG;//Èí¼þÇå³ýÖжϿØÖÆÎ»
- return ADC_RES;
- }
- void timer0() interrupt 1
- {
- TL0 = 0xF0; //֨װ¶¨Ê±³õÖµ 10ºÁÃë³õÖµ @12MHz
- TH0 = 0xD8; //֨װ¶¨Ê±³õÖµ
-
- mh_count++; //ðºÅÉÁ˸±äÁ¿
- if(mh_count==100) //1Ãëʱ¼äµ½
- {
- mh_count=0;
- count++;
- if(count==5)
- {
- count=0;
- flag = !flag;
- }
- }
- if(knum != 0) //µ÷ʱ¼äµÄʱºò£¬ÉÁ˸µÄλ±íʾΪµ÷½ÚµÄλ
- {
- shan_cont++;
- if(shan_cont==30) //ÉèÖÃʱ£¬300msÉÁ˸ʱ¼ä£¬¿É¸ù¾Ýʵ¼ÊЧ¹ûµ÷Õû
- {
- shan_cont=0;
- shan = !shan;
- }
- }
- if(flag_fm) //Èç¹û·äÃùÆ÷Æô¶¯±ê־Ϊ1
- {
- dd = 0; //·äÃùÆ÷Ïì
- fm++; //¼ÆÊ±±äÁ¿×Ô¼Ó
- if(fm == 30) //µ½300ms£¬·äÃùÆ÷Í£
- {
- fm = 0; //¼ÆÊ±±äÁ¿ÇåÁã
- dd = 1; // ·äÃùÆ÷Í£
- flag_fm = 0;//Æô¶¯±êÖ¾ÇåÁã
- }
- }
- }
- //дDS1302Êý¾Ý
- void Write_DS1302_DAT(uchar cmd, uchar dat)
- {
- uchar i;
- /****************************************/
- TSCLK = 1; //°Ñ¸´Î»ÏßÄøß
- for(i=0;i<8;i++)
- { //µÍλÔÚǰ
- TRST = 0; //ʱÖÓÏßÄõͿªÊ¼Ð´Êý¾Ý
- TIO = cmd & 0x01;
- cmd >>= 1; //°ÑµØÖ·ÓÒÒÆÒ»Î»
- TRST = 1; //ʱÖÓÏßÄøß
- }
- for(i=0;i<8;i++)
- {
- TRST = 0; //ʱÖÓÏßÄõͿªÊ¼Ð´Êý¾Ý
- TIO = dat & 0x01;
- dat >>= 1; //°ÑÊý¾ÝÓÒÒÆÒ»Î»
- TRST = 1; //ʱÖÓÏßÄøß
- }
- TSCLK = 0; //¸´Î»ÏߺϵÍ
- TRST = 0;
- TIO = 0;
- /**************************************/
- }
- //¶ÁDS1302Êý¾Ý
- uchar Read_DS1302_DAT(uchar cmd)
- {
- uchar i, dat;
- /*************************************************/
- TSCLK = 1; //ÀµÍÊý¾Ý×ÜÏß
- for(i = 0; i < 8; i++)//ÿ´Îд1λ£¬Ð´8´Î
- {
- TRST = 0; //ÀµÍʱÖÓ×ÜÏß
- TIO = cmd & 0x01;//д1λÊý¾Ý£¬´Ó×îµÍλ¿ªÊ¼Ð´
- cmd >>=1; //ÓÒÒÆÒ»Î»
- TRST = 1; //À¸ßʱÖÓ×ÜÏߣ¬²úÉúÉÏÉýÑØÊý¾Ý±»DS1302¶Á×ß
- }
- for(i = 0; i < 8; i++)//ÿ´Î¶Á1룬¶Á8´Î
- {
- TRST = 0; //ÀµÍʱÖÓ×ÜÏß,²úÉúϽµÑØ£¬DS1302°ÑÊý¾Ý·Åµ½TIOÉÏ
- dat >>= 1; //ÓÒÒÆÒ»Î»
- if(TIO==1) dat |= 0x80;//¶ÁÈ¡Êý¾Ý£¬´Ó×îµÍλ¿ªÊ¼
- TRST = 1; //À¸ßʱÖÓ×ÜÏߣ¬ÒÔ±¸ÏÂÒ»´Î²úÉúϽµÑØ
- }
- TSCLK=0;
- TRST=0;
- TIO=0;
- return dat; //·µ»Ø¶Á³öÊý¾Ý
- /************************************************/
- }
- //Êý¾ÝתBCDÂë
- uchar Dat_Chg_BCD(uchar dat)
- {
- uchar dat1, dat2;
- dat1 = dat / 10;
- dat2 = dat % 10;
- dat2 = dat2 + dat1 * 16;
- return dat2;
- }
- //BCDÂëת»»ÎªÊý¾Ý
- uchar BCD_Chg_Dat(uchar dat)
- {
- uchar dat1, dat2;
- dat1 = dat / 16;
- dat2 = dat % 16;
- dat2 = dat2 + dat1 * 10;
- return dat2;
- }
-
- void init_1302() //³õʼ»¯º¯Êý ÉèÖÃʱ¼ä
- { //¼Ó±¸ÓÃµç³Ø£¬µôµç×ßʱ
- if(Read_DS1302_DAT(read_ram) != 0xaa) //Èç¹ûµÚ00¸öRAMλÖò»µÈÓÚ0xaa£¬¾Í³õʼ»¯1302
- {
- Write_DS1302_DAT(0x8e, 0);//Çå³ýд±£»¤
- Write_DS1302_DAT(write_miao, Dat_Chg_BCD(Read_DS1302_DAT(0x81)));//µ÷ʱÖÓоƬÃ루²¢ÇÒ½øÐÐBCDÂëת»»£©
- Write_DS1302_DAT(write_fen, Dat_Chg_BCD(Read_DS1302_DAT(0x83)));//µ÷ʱÖÓоƬ·Ö
- Write_DS1302_DAT(write_shi, Dat_Chg_BCD(Read_DS1302_DAT(0x85)));//µ÷ʱÖÓоƬʱ
- Write_DS1302_DAT(write_ram,0xaa);//дÈë³õʼ»¯±êÖ¾RAM£¨µÚ00¸öRAMλÖã©
- Write_DS1302_DAT(0x8e, 0x80);//¿ªÐ´±£»¤
- }
- }
- void read_sf()
- {
- miao = BCD_Chg_Dat(Read_DS1302_DAT(0x81));//¶ÁÃë¼Ä´æÆ÷£¨²¢ÇÒ½øÐÐBCDÂëת»»£©
- fen = BCD_Chg_Dat(Read_DS1302_DAT(0x83));//¶Á·Ö¼Ä´æÆ÷
- shi = BCD_Chg_Dat(Read_DS1302_DAT(0x85));//¶Áʱ¼Ä´æÆ÷
- }
- void keysan()
- {
- static bit kf1=0, kf3=0,kf2=0; //×ÔËø±êÖ¾,ÕâÀïÒ»¶¨Òª¼Óstatic£¨»òÕßÓÃÈ«¾Ö±äÁ¿£©£¬·ñÔò°´¼ü²»Áé
- static uint i=0,j=0,k=0,m=0,n=0; //Ïû¶¶ÑÓʱ±äÁ¿
-
- if(key1==1) //ÉèÖà //IOÊÇ¸ßµçÆ½£¬ËµÃ÷°´¼üûÓб»°´Ï£¬ÕâʱҪ¼°Ê±ÇåÁãһЩ±ê־λ
- {
- i=0; //°´¼üÏû¶¶¼ÆÊ±±äÁ¿ÇåÁã
- kf1=0; //°´¼ü×ÔËø±êÖ¾ÇåÁã
- }
- else if(kf1 == 0) //Óа´¼ü°´Ï£¬ÇÒÊǵÚÒ»´Î±»°´ÏÂ
- {
- flag_fm = 1; //Æô¶¯·äÃùÆ÷
- ++i;
- if(i>10) //i>10 ADC²éѯ·½Ê½ÓÃ
- {
- i=0;
- kf1=1; //×ÔËø°´¼üÖÃλ,±ÜÃâÒ»Ö±´¥·¢
- knum++;
- if(knum==1)
- {
- Write_DS1302_DAT(0x8e,0x00); //д±£»¤È¡Ïû
- Write_DS1302_DAT(write_miao,0x80); // дÃë80£¬Ê±ÖÓÍ£Ö¹×ßʱ;
-
- }
- if(knum==3)
- {
- knum = 0;
- Write_DS1302_DAT(write_miao,0x00);
- Write_DS1302_DAT(0x8e,0x80); //±£»¤Æô¶¯
- }
- }
- }
- /************ÏÔʾºÍ¹â¿ØÇл»****************/
- if(knum == 0)
- {
- if(key3==1) //ÉèÖà //IOÊÇ¸ßµçÆ½£¬ËµÃ÷°´¼üûÓб»°´Ï£¬ÕâʱҪ¼°Ê±ÇåÁãһЩ±ê־λ
- {
- m=0; //°´¼üÏû¶¶¼ÆÊ±±äÁ¿ÇåÁã
- kf3=0; //°´¼ü×ÔËø±êÖ¾ÇåÁã
- }
- else if(kf3 == 0) //Óа´¼ü°´Ï£¬ÇÒÊǵÚÒ»´Î±»°´ÏÂ
- { flag_fm = 1; //Æô¶¯·äÃùÆ÷
- ++m;
- if(m>10) //i>10 ADC²éѯ·½Ê½ÓÃ
- {
- m=0;
- kf3=1; //×ÔËø°´¼üÖÃλ,±ÜÃâÒ»Ö±´¥·¢
- xs++;
- if(xs==3)
- {
- xs = 0;
-
- }
- }
- }
- if(key2==1) //ÉèÖà //IOÊÇ¸ßµçÆ½£¬ËµÃ÷°´¼üûÓб»°´Ï£¬ÕâʱҪ¼°Ê±ÇåÁãһЩ±ê־λ
- {
- n=0; //°´¼üÏû¶¶¼ÆÊ±±äÁ¿ÇåÁã
- kf2=0; //°´¼ü×ÔËø±êÖ¾ÇåÁã
- }
- else if(kf2 == 0) //Óа´¼ü°´Ï£¬ÇÒÊǵÚÒ»´Î±»°´ÏÂ
- { flag_fm = 1; //Æô¶¯·äÃùÆ÷
- ++n;
- if(n>10) //i>10 ADC²éѯ·½Ê½ÓÃ
- {
- n=0;
- kf2=1; //×ÔËø°´¼üÖÃλ,±ÜÃâÒ»Ö±´¥·¢
- flag_gk = !flag_gk;
- }
- }
- }
- ///-------¼Ó--------///
- if(knum != 0)
- {
- if(key2==0) //¼Ó
- {
-
- j++;
- // if(j >= 5000) //³¤°´Á¬¼Ó ADCÖжϷ½Ê½ÓÃ
- if(j >= 100) //³¤°´Á¬¼Ó ADC²éѯ·½Ê½ÓÃ
-
- { //flag_fm = 0;
- if(knum==2)
- {
- fen++;
- fen=fen/10*16+fen%10; //תΪ16½øÖÆ
- if(fen==0x60)
- fen=0x00;
- Write_DS1302_DAT(write_fen,fen);
- read_sf(); //¶Á³öʱ¼ä£¬È»ºóÏÔʾ
- }
-
- if(knum==1)
- {
- shi++;
- shi=shi/10*16+shi%10; //תΪ16½øÖÆ
- if(shi==0x24)
- shi=0x00;
- Write_DS1302_DAT(write_shi,shi);
- read_sf();
- }
-
- j=90; //ÕâÀïjµÄÖµ¿ÉÒÔÉèÖÃÁ¬¼ÓµÄ¿ìÂý£¬jµÄÖµÔ½´ó¾ÍÔ½¿ì
- //ÒòΪ³õÖµÔ½´ó£¬¼Óµ½100µÄʱ¼ä¾ÍÔ½¶Ì
- flag_fm = 1; //Æô¶¯·äÃùÆ÷
- }
- }
-
- else
- {
- if(j>10 && j<100) //¶Ì°´
- {
- flag_fm = 1; //Æô¶¯·äÃùÆ÷
- if(knum==2)
- {
- fen++;
- fen=fen/10*16+fen%10; //תΪ16½øÖÆ
- if(fen==0x60)
- fen=0x00;
- Write_DS1302_DAT(write_fen,fen);
- read_sf(); //¶Á³öʱ¼ä£¬È»ºóÏÔʾ
- }
-
- if(knum==1)
- {
- shi++;
- shi=shi/10*16+shi%10; //תΪ16½øÖÆ
- if(shi==0x24)
- shi=0x00;
-
- Write_DS1302_DAT(write_shi,shi);
- read_sf();
- }
-
- j=0;
- }
- }
-
- //----------¼õ-----------//
- if(key3==0) //¼õ
- { flag_fm = 1; //Æô¶¯·äÃùÆ÷
- k++;
- if(k >= 100) //³¤°´
- {
- if(knum==2)
- {
- fen--;
- fen=fen/10*16+fen%10; //תΪ16½øÖÆ
- if(fen==-1)
- fen=0x59;
- Write_DS1302_DAT(write_fen,fen);
- read_sf();
- }
- if(knum==1)
- {
- shi--;
- shi=shi/10*16+shi%10; //תΪ16½øÖÆ
- if(shi==-1)
- shi=0x23;
- Write_DS1302_DAT(write_shi,shi);
- read_sf();
- }
- k=90;
- }
- }
- else
- {
- if(k>10 && k<100) //¶Ì°´
- {
- flag_fm = 1; //Æô¶¯·äÃùÆ÷
- if(knum==2)
- {
- fen--;
- fen=fen/10*16+fen%10; //תΪ16½øÖÆ
- if(fen==-1)
- fen=0x59;
- Write_DS1302_DAT(write_fen,fen);
- read_sf();
- }
- if(knum==1)
- {
- shi--;
- shi=shi/10*16+shi%10; //תΪ16½øÖÆ
- if(shi==-1)
- shi=0x23;
- Write_DS1302_DAT(write_shi,shi);
- read_sf();
- }
- }
- k=0; //Ïû¶¶±äÁ¿ÇåÁ㣬ΪÏ´ΰ´¼ü×ö×¼±¸
- }
- }
- }
- void main()
- {
- t0_init();
- read_sf();
- init_1302();
- ADC_Init();
- flag_fm = 1; //Æô¶¯·äÃùÆ÷
- while(1)
- {
- read_sf();
- switch(xs)
- {
- case 0:if(flag==0 && knum == 0) //ʱ¼ä¡¢Î¶ÈÂÖÁ÷ÏÔʾ£¬5ÃëÇл»Ò»´Î
- {Display_tem(Get_Tmp());}
- else
- display( shi,fen); break;
- case 1: display( shi,fen); break; //ÏÔʾʱ¼ä
- case 2: Display_tem(Get_Tmp()); break;//ÏÔʾζÈ
- default: break;
- }
- keysan();
- if(shi>=5 && shi<=21) ba=20;else ba=1;//5~21 ÁÁ¶È×î´ó,22~4 ÁÁ¶È×îС
- if(!flag_gk) //Èç¹û¹â¿Ø±ê־Ϊ0£¬¾ÍΪ×Ô¶¯ÁÁ¶È ;ĬÈÏΪ×Ô¶¯ÁÁ¶È
- {
- if(GetADCResult()>5 && GetADCResult()<25) ba=40;
- if(GetADCResult()>25 && GetADCResult()<50) ba=39; //10¼¶ÁÁ¶È£¬baÖµÔ½´ó£¬LEDÔ½ÁÁ
- if(GetADCResult()>50 && GetADCResult()<80) ba=35;
- if(GetADCResult()>80 && GetADCResult()<100) ba=30;
- if(GetADCResult()>100 && GetADCResult()<130) ba=25;
- if(GetADCResult()>130 && GetADCResult()<150) ba=20;
- if(GetADCResult()>150 && GetADCResult()<180) ba=15;
- if(GetADCResult()>180 && GetADCResult()<200) ba=10;
- if(GetADCResult()>200 && GetADCResult()<230) ba=5;
- if(GetADCResult()>230 && GetADCResult()<250) ba=1;
- }
- else ba = 40; // ·ñÔòΪ×î´óÁÁ¶È
- if((shi>=5 && shi<=21) && fen ==0 && miao == 0) //Õûµã±¨Ê±
- {
- flag_fm = 1;
- }
-
- }
- }
- char shifen,baifen,ge,result;
- void adc_isr() interrupt 5 using 1
- {
- unsigned int temp;
- temp=ADC_RES; //ADÈ¡8λ½á¹û
- result=temp*0.01953125*1000; //ad½á¹û»»Ëã³Éµçѹֵ£¬ ½«5V·Ö³É256·Ý£¬Ã¿·Ý5v/256=0.01953125v £¬ÔÙÀ©´ó1000±¶
- ge=result/1000;
- shifen=result%1000/100;
- baifen=result%100/10;
-
- ADC_CONTR = 0xc8;//¿ªÆôת»»
- }
¸´ÖÆ´úÂë
|
|