µ±Ç°Î»ÖãºÊ×Ò³ > ±ÏÒµÉè¼Æ-»ùÓÚCAN×ÜÏߺÍAVRµ¥Æ¬»úµÄÍøÂçÐÍζȴ«¸Ð - ͼÎÄ
½ÓÈ롣ʹÓÃÄÚ²¿µçѹ²Î¿¼Ô´Ê±£¬¿ÉÒÔͨ¹ýÔÚ AREF Òý½ÅÍⲿ²¢½ÓÒ»¸öµçÈÝÀ´Ìá¸ß ADC µÄ¿¹ÔëÐÔÄÜ¡£
³ÌÐòÖвÉÓà T/C0 ±È½ÏÆ¥ÅäÖжϣ¬Ã¿ 2ms ÖжÏÒ»´Î¡£¸Ã¶¨Ê±ÖжÏ×÷Ϊ ADC×Ô¶¯´¥·¢×ª»»µÄ´¥·¢Ô´Ðźš£ÔÚ ADC µÄ³õʼ»¯´úÂëÖУ¬ÉèÖà ADC ʱÖӵķ֯µÏµÊýΪ 32¡£ÏµÍ³4M ʱÖÓ¾¹ý64 ·ÖƵ²úÉú7.3725/64MHzµÄ ADC ʱÖÓ£¬Âú×ãÁËÖð´Î±È½Ïת»»µç·´ïµ½×î´ó¾«¶Èʱ£¬ÐèÒªµÄ 50kHz~200kHz Ö®¼äµÄ²ÉÑùʱÖÓµÄÒªÇó¡£ADC µ¥¶ËÊäÈëת»»Ê±¼äΪ 13 ¸ö ADC ʱÖÓÖÜÆÚ£¬ÔòÒ»´Î ADC ת»»µÄʱ¼äΪ 13¡Á64/7372.5KHz = 0.11ms¡£Òò´Ë£¬2ms µÄ¹Ì¶¨×ª»»¼ä¸ôʱ¼äÔ¶³¬³öÍê³ÉÒ»´Î ADC µÄת»»Ê±¼ä 0.11ms£¬²»»áÓ°Ïì ADC µÄת»»¹ý³Ì£¬Í¬Ê±Ã¿ÃëÄÚÍê³ÉµÄ ADC ת»»´ï 500 ´Î¡£
ÔÚ ADC ת»»Íê³ÉÖжϷþÎñÖУ¬°Ñ ADC ת»»½á¹û»»Ëã³Éµçѹֵ£¬»»Ëã²ÉÓÃÁËÕûÐÍÊý¼ÆË㡣ΪÁ˱£Ö¤¼ÆËã²úÉú²»Òç³ö£¬ÏȽ« adc_data Ç¿ÐÐת»»³É³¤ÐÍ£¬È»ºóÔÙ³Ë 5000£¨ÕâÀï¼Ù¶¨AVcc²Î¿¼µçѹΪ 5v£© £¬×îºóÔÙ³ý 1024£¬µÃ³öµÄ½á¹û¾ÍÊǶÔÓ¦µÄÊäÈëµçѹֵ.±£Ö¤ÁË»»ËãµÄÕýÈ·ÐÍ¡£
ADCºÍT/C0µÄ³õʼ»¯º¯ÊýµÄCÓïÑÔʵÏÖÈçÏÂËùʾ£¬Ô´´úÂëÓÐÏàÓ¦µÄ×¢ÊÍ£º
- 29 -
/******************************************************************** *º¯ÊýÔÐÍ: port_init(void) *²ÎÊý˵Ã÷: ÎÞ *·µ»ØÖµ: ÎÞ *˵Ã÷: AVRµ¥Æ¬»ú¶Ë¿Ú³õʼ»¯ ********************************************************************/ void port_init(void) { DDRA = 0x00; PORTA = 0x00; } /******************************************************************** *º¯ÊýÔÐÍ: adc_init(void) *²ÎÊý˵Ã÷: ÎÞ *·µ»ØÖµ: ÎÞ *˵Ã÷: AVRµ¥Æ¬»ú¶ÔÄÚ²¿ADCµÄ³õʼ»¯ ********************************************************************/ void adc_init(void)//dac³õʼ»¯ { ADCSRA = 0x00; //disable adc ADMUX = 0x60; //select adc avcc ÍⲿµçÔ´²Î¿¼£¬Êý¾Ý×ó¶ÔÆë£¬ADC0ΪÊäÈ룻 ACSR = 0x80; SFIOR&=0x1F; SFIOR|=0x60; //Ñ¡ÔñT/C0±È½ÏÆ¥ÅäÖжÏΪAD0 ´¥·¢Ô´ ADCSRA = 0xAD; } /******************************************************************** *º¯ÊýÔÐÍ: adc_isr(void) *²ÎÊý˵Ã÷: TXD_data1£º´æ·Åת»»½á¹ûµÄ²ÎÊý *·µ»ØÖµ: ÎÞ *˵Ã÷: ADCÖжϴ¦Àíº¯Êý£¬ÓÃÓÚÌáÈ¡ÖжÏÍê³ÉºóµÄÊý¾Ý ********************************************************************/ #pragma interrupt_handler adc_isr:iv_ADC //ADCת»»Íê³ÉÖжϴ¦Àíº¯Êý void adc_isr(void)//ADCת»» { TXD_data1=ADCH; //ת»»½á¹ûÖµ } //³õʼ»¯PA¿ÚΪADÊäÈë¶Ë¿Ú - 30 -
/******************************************************************** *º¯ÊýÔÐÍ: timer0_comp_isr(void) *²ÎÊý˵Ã÷: time_2ms_ok£ºÊý¾Ý¸üбêÖ¾ *·µ»ØÖµ: ÎÞ *˵Ã÷: ¶¨Ê±Æ÷´¦Àíº¯Êý£¬ÓÃÓÚÉèÖÃÊý¾Ý¸üбêÖ¾ ********************************************************************/ #pragma interrupt_handler timer0_comp_isr:20 void timer0_comp_isr(void) { time_2ms_ok=1; //Êý¾Ý¸üбêÖ¾ nop(); } /******************************************************************** *º¯ÊýÔÐÍ: init_devices(void) *²ÎÊý˵Ã÷: time_2ms_ok£ºÊý¾Ý¸üбêÖ¾ *·µ»ØÖµ: ÎÞ *˵Ã÷: É豸³õʼ»¯º¯Êý£¬ÓÃÓÚ³õʼ»¯ADC¡¢¶¨Ê±Æ÷T/C0ºÍÍⲿÖÐ¶Ï ********************************************************************/ void init_devices(void) //ϵͳµÄ³õʼ»¯ { //stop errant interrupts until set up CLI(); //¹ØÖÐ¶Ï port_init(); adc_init(); MCUCR = 0x00; //GICR = 0x40; GICR = 0x00; TCCR0=0x0B; //ÄÚ²¿Ê±ÖÓ£¬64·ÖƵ£¨7.3725Mhz/64£©£¬CTCģʽ TCNT0=0x00; OCR0=0xE6; TIMSK = 0x02; //ʹÄÜT/C0±È½ÏÖÐ¶Ï SEI(); //¿ªÖÐ¶Ï //all peripherals are now initialized }
- 31 -
4.4 LCMÄ£¿éÈí¼þµÄÉè¼Æ
LCMÄ£¿éµÄÈí¼þÉè¼ÆÖ÷Òª°üÀ¨Èý´ó²¿·Ö£ºLCD12864µÄ³õʼ»¯º¯Êý¡¢LCD12864дÊý¾ÝºÍдÃüÁÊý¡¢LCD12864ÏÔʾ×Ö·ûº¯Êý¡£
¸÷²¿·Öº¯ÊýµÄ´úÂëºÍ×¢ÊÍÈçÏÂͼËùʾ£º
/******************************************************************** *º¯ÊýÔÐÍ: void Write_Cmd(uchar cmd) *²ÎÊý˵Ã÷: cmd£º дÈëµÄÃüÁî²ÎÊý£» Lcdtemp£ºÅÐæ±êÖ¾ *·µ»ØÖµ: ÎÞ *˵Ã÷: ¸Ãº¯ÊýÓÃÓÚÏòLCMдÃüÁî ********************************************************************/ void Write_Cmd(uchar cmd) { uchar lcdtemp = 0; LCD_RS_Status; LCD_RW_Read; LCD_DataIn; do //ÅÐæ { LCD_ENABLE; NOP(); lcdtemp = LCD2MCU_Data; LCD_DISABLE; } while(lcdtemp & 0x80); LCD_DataOut; LCD_RW_Write; MCU2LCD_Data = cmd; LCD_ENABLE; NOP(); LCD_DISABLE; }
- 32 -
¹²·ÖÏí92ƪÏà¹ØÎĵµ