|
|
前往: |
| 我的AVR资料[程序篇] 定时器2中断测试(源码16) |
| 发表人 | 内容 | |
|---|---|---|
| 2010/12/22 00:46 |
|
|
|
[楼主位] 正点原子
等级:
注册时间:![]() 2010/12/02 10:41 文章: 8089 来自: 湖南 在线 |
本代码利用定时器2产生中断,并在中断里面对temp++,然后通过数码管将temp的值显示出来.代码如下:
#include<mega16.h> #include<delay.h> #define uchar unsigned char #define uint unsigned int long temp; unsigned char t; interrupt [TIM2_OVF] void time0_out(void) { TCNT2=0x00; t++; if(t>250){t=0;temp++;} } //digital number display function, the first parameter is the number you want to show //the second parameter is the position of the number void display(unsigned char number,unsigned char position); void main(void) { unsigned char b1,b2,b3,b4,b5,b6,b7,b8; TCCR2=0X03;//64c TCNT2=0X00; TIMSK=0X40; #asm("sei") //open all interrupt while(1) { b1=temp%10;display(b1,8);delay_us(500); b2=(temp/10)%10;display(b2,7);delay_us(500); b3=(temp/100)%10;display(b3,6);delay_us(500); b4=(temp/1000)%10;display(b4,5);delay_us(500); b5=(temp/10000)%10;display(b5,4);delay_us(500); b6=(temp/100000)%10;display(b6,3);delay_us(500); b7=(temp/1000000)%10;display(b7,2);delay_us(500); b8=(temp/10000000)%10;display(b8,1);delay_us(500); if(temp>99999999)temp=0; } } void display(unsigned char number,unsigned char position)//digtial show function { DDRA=0Xff;//set PORTA output PORTA=0XFF;//set PORTA output in high level switch(position)//choice the position { case 1:{PORTA&=0xf8;break;} case 2:{PORTA&=0xf9;break;} case 3:{PORTA&=0Xfa;break;} case 4:{PORTA&=0Xfb;break;} case 5:{PORTA&=0Xfc;break;} case 6:{PORTA&=0Xfd;break;} case 7:{PORTA&=0Xfe;break;} case 8:{PORTA&=0Xff;break;} } switch(number)//show number { case 0:{PORTA&=0x87;break;} //0 case 1:{PORTA&=0x8f;break;} //1 case 2:{PORTA&=0x97;break;} //2 case 3:{PORTA&=0x9f;break;} //3 case 4:{PORTA&=0xa7;break;} //4 case 5:{PORTA&=0xaf;break;} //5 case 6:{PORTA&=0xb7;break;} //6 case 7:{PORTA&=0xbf;break;} //7 case 8:{PORTA&=0xc7;break;} //8 case 9:{PORTA&=0xcf;break;} //9 default:{PORTA=0xff;break;} //null } } |
|
|
我的淘宝小店:http://shop62103354.taobao.com |
||
|
||
|
|
||
|
| 前往: |