#include <iom8515v.h><br />#include <macros.h><br />#define uchar unsigned char<br />#define uint unsigned int<br />#define ulong unsigned long<br /><br />void port_init(void)<br />{<br /> PORTA = 0x00;<br /> DDRA = 0xFF;<br /> PORTB = 0x04;<br /> DDRB = 0x00;<br /> PORTC = 0xC8;<br /> DDRC = 0x18;<br /> PORTD = 0x00;<br /> DDRD = 0x00; <br /> PORTE = 0x00;<br /> DDRE = 0x00; <br /> OSCCAL= 0XA7;<br /> SFIOR&=~BIT(2); <br /> //SFIOR&=~BIT(PUD); <br />}<br /><br />void mDelay(uint Delay)<br />{ uint K;<br />for(;Delay>0;Delay--)<br />{ for(K=0;K<900;K++)<br />{;}<br />}<br />}<br /><br />//call this routine to initialize all <br /><br />peripherals<br />void init_devices(void)<br />{<br /> //stop errant interrupts until set up<br /> CLI(); //disable all interrupts<br /> port_init();<br /><br /> MCUCR = 0x00;<br /> EMCUCR = 0x00;<br /> GICR = 0x00;<br /> TIMSK = 0x00;<br /> SEI(); //re-enable interrupts<br /> //all peripherals are now initialized<br />}<br /><br />//<br />void main(void)<br />{<br /> uint i=0;<br /> init_devices();<br /> //insert your functional code here...<br /> CLI();<br /> while(1)<br /> {<br /> <br /> if((PINB&0x04)==0)<br /> {mDelay(10); //消除按键抖动<br /> if ((PINB&0x40)==0)<br /> {<br /> PORTA=i++; <br /> if(i>0xff) i=0; <br /><br /> <br /> }<br /> }<br /><br /> }<br /> <br />}<br /><br />目的是PB2的按键使PORTA的数据递增,问题是按<br /><br />键下去没反映,while(1)中换成<br />while(1)<br /> {<br /> <br /> if((PINB&0x04)==0)<br /> {//mDelay(10); //消除按键抖<br /><br />动<br /> //if ((PINB&0x40)==0)<br /> {<br /> PORTA=i++; <br /> if(i>0xff) i=0; <br /><br /> <br /> }<br /> }<br /><br /> }<br />就可以响应按键,难道中间的消除按键抖动不能<br /><br />用?<br />刚学习AVR还请做过的人指教,谢谢!<br /> |
|