我用avr mega16单片机运行一个最简单的程序,在学习板上能运行,我把单片机焊在另一块电路板上就不能用了,输出的电平不正确(只连接了vcc和gnd).下面是程序,谁帮我解决一下啊。
- ////////////////////////////////////
- //T0_DEMO
- //
- //PA口接LED的段码
- //PC0~PC3口接四位位选
- //////////////////////////////
- #include
- #include
- #define fose 7372800
- unsigned int time_10ms;
- unsigned int time_s;
- unsigned char DISP_NUM; //显示的位数
- unsigned char BitTab[]={0xFE,0xFD,0xFB,0xF7}; //三位位选码
- //unsigned char DispTab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //LED字形码
- unsigned char DispTab[]={0x3F,0x30,0x9B,0xB9,0xB4,0xAD,0xAF,0x38,0xBF,0xBD}; //修正都的LED字形码
- unsigned char DISP_DATA[4]; //显示的数字
- void Display(void);
- //显示函数,DISP_NUM决定显示哪个LED
- //采用共阴LED动态显示方法,定时中断函数里面调用
- void Display(void)
- {
- PORTA=DispTab[DISP_DATA[DISP_NUM]]; //PA口接LED的段码
- PORTC=BitTab[DISP_NUM]; //PC口接位选
- DISP_NUM++; //先显示低位,再显示高位
- if(DISP_NUM==4)
- DISP_NUM=0;
- }
- #pragma interrupt_handler timer0comp:20
- void timer0comp (void)
- {
- time_10ms++;
- if(time_10ms==100)
- {
- time_10ms=0;
- time_s++;
- if(time_s>6000)
- time_s=0;
- }
- DISP_DATA[0]=time_s/1000;
- DISP_DATA[1]=(time_s/100)-(DISP_DATA[0]*10);
- DISP_DATA[3]=time_s%10;
- DISP_DATA[2]=((time_s%100)-DISP_DATA[3])/10;
-
- Display();
- }
- void main(void)
- {
- DDRA=0XFF;
- PORTA=0X00;
- DDRC=0X0F;
- PORTC=0X00;
-
- //t/c0初始化(10ms)
- TCCR0=0X0d;
- TCNT0=0X00;
- OCR0=0X48;
- TIMSK=0X02;
-
- time_10ms=0;
- time_s=0;
-
- asm("sei");
- for(;;)
- {
- }
-
-
- }