⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tc0_3.c

📁 arm的功能测试模块
💻 C
字号:
/**********************************************************
****       AVR T/C0 使用范例3(T/C0作为定时器, 溢出中断)***
****       作者:  liugangdi                            ***
****       编译器:WINAVR20050214                       ***
****       日期:2005.12.11                             ***
***********************************************************/

/*功能简单说明:T/C0作为定时器,T/C0溢出中断动态扫描5位数码管显示
将16位的二进制转换成5位十进制动态显示。由于mega16实验板的限制可以
将8位的二进制转换成3位十进制动态显示。由于mega16实验板上只有两个
数码管,所以只能显示3位十进制中的个位和十位。 此时的OC0可以设置没
有被连接,PB3作为普通的端口使用.*/

#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <stdio.h>  
 
 
#define  uchar unsigned char
#define  uint  unsigned int
#define  number  0b00101101
  

uchar temp,i_g=0x00, i_sh=0x00, i_b=0x00;
uchar num_g,num_sh,num_b;
//8位二进制转3位十进制函数
void b8td3(uchar n)
{
 for (i_b=0;n>100;)
 {n=n-100;
  i_b=i_b+1;}
 for (i_sh=0;n>10;)
 {n=n-10;
  i_sh=i_sh+1;}
  i_g=n;
 }
 
//T/C0溢出中断初始化,每2ms溢出中断一次(1/(8*1000000/64))*256=2ms
void init_timer0(void)
{TIMSK=0x01;                //T/C0溢出中断使能
 TCCR0=0X03;                //64分频
 TCNT0=0X00;                //T/C0置初值0
 }
 
 
 //T/C0溢出中断服务程序
 SIGNAL (SIG_OVERFLOW0)     
 {
  switch (temp)
  {
  case 0xBF :PORTB=num_g;PORTA=temp;temp=0x7F;break;  //判断是否是此位线,若是送字线和位线显示,并且修改位线
  case 0x7F :PORTB=num_sh;PORTA=temp;temp=0xDF;break;
  case 0xDF :PORTB=num_b;PORTA=temp;temp=0xBF;break;
  default: break;
  }
 } 
 
 
 int main(void)
 {
  
  uchar tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  b8td3(number);   //调用8位二进制转3位十进制函数
  num_g=tab[i_g];
  num_sh=tab[i_sh];
  num_b=tab[i_b];   //根据返回的个、十、百位的值查的相应的七数码管的值
  DDRB=0xFF;
  DDRA=0xFF;        //A、B口定义方向
  PORTA=0xBF;       //A口赋初值(位线置初值)
  temp=PINA;       
  init_timer0();    //调用T/C0溢出中断初始化函数
  sei();            //开总中断
  while(1){;}
  
  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -