ATmega16L-定时器应用于数码管
时间:08-18
来源:互联网
点击:
/****************************************扫描数码管,数据口接PA段码接PC7 位码接PC6稳定显示01234567****************************************/#include iom16v.h>#include macros.h>unsigned int i;const unsigned char duanma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};const unsigned char weima[] ={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};/****************************************display****************************************/void display(unsigned int i){PORTA=0X00;PORTC|=BIT(7);PORTC=~BIT(7);PORTA=weima[i];PORTC|=BIT(6); PORTC=~BIT(6);PORTA=duanma[i];PORTC|=BIT(7);PORTC=~BIT(7);}/****************************************IO端口初始化****************************************/void init_port(void){PORTA=0XFF;DDRA=0XFF;PORTC=0XFF;DDRC=0XFF;}/****************************************定时器初始化****************************************/void init_timer(void){TCNT0=0X83; //1ms的定时器初值TCCR0=0X03; //定时器0的计数预分频取64 TIMSK=0X01; //使能T/C0中断SREG =0X80; //使能总中断}/***************************************主函数***************************************/void main(void){init_port(); //调用IO端口初始化函数init_timer(); //定时器初始化while(1){//添加自己需要的程序代码}}#pragma interrupt_handler timer0_ovf_isr:10 void timer0_ovf_isr(void){TCNT0=0X83; //重装1ms定时器初值if(++i>7) i=0;display(i); }TCNT0=0X83; //1ms的定时器初值TCCR0=0X03; //定时器0的计数预分频取64 8位定时器/计数器。 0x83=131。131-255 之间一共数了125.另外,外部晶振8M,经过64分频,周期成为1/(8000000/64)=8us 125个8us 就是1ms OK
- 基于MMS的即时报警系统设计(01-23)
- ATmega16L驱动ILI9325/9328(11-20)
- TWI ATMEGA16L 丛机模式(11-13)
- ATmega16L学习板18B20测试程序(11-11)
- ATmega16L的ISP技术在汽车电子差速控制中的应用(03-06)
- 基于Atmega16L的简单音乐制作(10-08)