新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ATmega16L-定時器應用于數碼管

        ATmega16L-定時器應用于數碼管

        作者: 時間:2012-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 


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 东乡县| 松桃| 邹平县| 刚察县| 余干县| 新密市| 连州市| 和静县| 柳河县| 将乐县| 扶绥县| 内乡县| 江西省| 达州市| 浦县| 沅江市| 璧山县| 保康县| 金川县| 醴陵市| 云霄县| 台北县| 广安市| 无为县| 奉贤区| 武山县| 宜宾县| 大田县| 英吉沙县| 林芝县| 淄博市| 江川县| 锡林郭勒盟| 彰化县| 汾阳市| 卢氏县| 德格县| 册亨县| 西安市| 喜德县| 华宁县|