版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、ATMEGA128相關(guān)例程說明:本文檔由滄海一聲笑原創(chuàng)由卩箱:H己學(xué)av單片機已經(jīng)有相當一段時間了,一開始用的是atmegal2&覺得不是很好用。丁是H己去買了一塊16L的芯片,覺得還彳亍。一開始用的是ICCAVR.應(yīng)為它用起來比較簡單,不像winavr那樣,要寫個Makefie,比較的麻煩,但iccavr的缺點是太過丁簡麗,調(diào)試程序時,感覺不是很好。后來經(jīng)同學(xué)介紹,用起了winavr,其實也是比較的簡單,只不過要加一個makefile而已,其實makefile可以用軟件自帶的組建H動生成,只需修改幾個參數(shù)就可以用。后來又用起了codevisionavr,雖然不太習慣,也談不上不好用.需要注意
2、的是,三個不同的軟件所帶的同文件不一樣oiccavr是ioml28v.h(姑且以128為例),winavr是avr/io.h,不過makefile中要設(shè)置芯片為atmegal28.ifijcvavr則是megal28.ho記得一開始的時候,我對這些不同的同文件不是很理解,是從一個學(xué)長那里了解到,才弄明白的。其實前兩個軟件只需把頭文件稍微改一下基本上可以通用。而最后一個軟件的中斷的寫法似乎不太一樣,因而和錢兩個軟件的兼容性是最歪的??傮w說winavr給人的感覺是比較專業(yè)lx流水燈嚴硬件環(huán)境:atmegal28開發(fā)板軟件環(huán)境:CodeVisionAVR-C*/#include#defineucha
3、runsignedchar#defineuintunsignedintucharent;voidtimerlnit()TCCR1B=OXOO;先停止定時器1TCNT1H=OXFO;設(shè)定定時器初值TCNT1L=OXBE;TCCR1A=OXOO;啟動定時器1TCCR1B=OXO5;使用1024分頻interruptTIM1_OVFvoidtlmerl_ovMsr(void)TCNT1H=OXFO;重載定時器初值TCNT1L=OXBE;DDRE|=12;PORTE|=12;DDRA=Oxff;PORTA=cnt;輸出led的值到端口Bcnt+;if(cnt=255)cnt=O;voidmain()/
4、DDRB=OXFF;SREG|=0X80;TIMSK=0X04;timerlnit();while(l);2、AD轉(zhuǎn)換+數(shù)碼管顯示/*/*ADC測試程序*/*l寸標器件:ATmegal28*/*晶振:RC8MHZ*/*編譯環(huán)境:ICCAVR7.13A*/*E-Mail: HYPERLINK mailto:*/*時間:2010年11月13日*/Aref接AVCC(+5V),采用Aref作參考電壓/*用數(shù)碼管顯示AD轉(zhuǎn)換的結(jié)果*/*/*包倉頭文件*/#include#include/*數(shù)碼管段碼表*/externconstunsignedchartab=0 x3f/0 x06z0 x5Bz0 x4
5、F/0 x66,0 x6Dz0 x7D,0 x07/0 x7F,0 x6F;/*全局變吊.*/unsignedintadc_rel=O;/*函數(shù)功能:ADC初始化函數(shù)入口參數(shù):出口參數(shù):*voidadcjnit(void)DDRF&=OXFE;/PORTFO設(shè)代為輸入,即作為ADCO口輸入模擬電壓PORTF&=OXFE;/PORTFO設(shè)置為輸入低電平ADCSRA=OxOO;關(guān)ADCADMUX=0X00;采用Aef作為參考電壓,ADC0單端輸入,右對齊ACSR=(1ACD);ADCSRA=(1ADEN)|(1ADSC)|(1ADATE)|(1ADIE)|(1ADPS2)|(1ADPS1);/AD
6、EN,啟動ADC;ADSC,ADC開始轉(zhuǎn)換:ADIE,ADC中斷使能:ADPSX,設(shè)世分頻因子64/*兩數(shù)功能:ADC中斷函數(shù)入口參數(shù):出口參數(shù):*/#pragmainterrupt_handleadc_is:iv_ADCvoidadcjsr(void)/intdata_h,data_l;/dataJ=ADCL;/data_h=ADCH;ADCSRA=0 x00;ADCSRA=(1ADEN)|(1ADSC)|(KOxlff)PORTA|=12;elsePORTA&=(1VV2);*/*函數(shù)功能:延時子程序入口參數(shù):出口參數(shù):*/voiddelay(void)inti;for(i=0;i1800
7、;i+);/*函數(shù)功能:顯示子程序入口參數(shù):k出口參數(shù):*/voiddisplay(unsignedintk)發(fā)光:極管顯示初始化DDRE|=12;PORTE|=12;DDRA=OXFF;PORTA=k;#defineSS0#defineSCK1#defineMOSI2#defineMISO3#defineSS_H()PORTB|=(1SS)#defineSS_L()PORTB&=(1VVSS)#defineledO_en()(DDRB|=14;PORTB|=(14);開第一個數(shù)碼管的位選#defineledO_dis()DDRB|=14;PORTB&=(1VV4);關(guān)第一個數(shù)碼管的位選#de
8、fineledl.en()DDRB|=15;PORTB|=(15);#defineledl_dis()DDRB|=15;PORTB&=(1VV5);#defineIed2_en()DDRB|=16;PORTB|=(16);#defineIed2_dis()DDRB|=16;PORTB&=(lv6);#defineIed3_en()DDRB|=17;PORTB|=(17);#defineIed3_dis()DDRB|=17;PORTB&=(1VV7);#defineOE7#definepoint3#definedp7#include#inelude0丄2尼4567,8,9/a,b,c,dzejc
9、onstunsignedchartable=0 x3F,0 x06/0 x5B/0 x4Fz0 x66,0 x6D,0 x7D,0 x07,0 x7F,0 x6F,0 x77,0 x7C,0 x39,0 x5Ez0 x79,0 x71,0 x00;volatileunsignedcharled_buffer4;voiddelay_lus(void)/Ius延時函數(shù)asm(Hnopj;voiddelay_nus(unsignedintn)Nus延時函數(shù)unsignedinti=0;for(i=0;in;i+)delay_lus();voiddelay_lms(void)/1ms延時函數(shù)unsig
10、nedinti;for(i=0;i1140;i+);voiddelay_nms(unsignedintn)/Nms延時函數(shù)unsignedinti=0;for(i=0;in;i+)delay_lms();/*完成spi的初始化*/voidspijnit(void)DDRB|=(1MOSI)|(1SCK)|(1SS);/SMOSI,SCK輸出SPCR=(1VVSPE)|(1VVMSTR)|(1VVSPRO)|(1VVSPR1);使能SPI,主機模式/*spi主機傳送數(shù)據(jù)*/voidSPI_MasterTransmit(charData)/*啟動數(shù)據(jù)傳輸*/SPDR=Data;/*等待傳輸結(jié)束*/
11、while(!(SPSR&(1SPIF)/*完成對HC595的初始化*/voidHC_595nit(void)DDRC|=(1OE);設(shè)置PORTC7為輸出PORTC&=(1VVOE);輸出高電平,使能595PORTB=OXOF;同時打開四個數(shù)碼管的位選spinit();led_buffer0=16;初始化數(shù)碼管段碼led_bufferl=16;led_buffer2=16;led_buffer3=16;/*HC595完成傳送數(shù)據(jù)*/voidHC_595_OUT(unsignedchardata)SS_L();SPI_MasterTransmit(data);SS_H();voidleddis
12、_update(void)/*最低位數(shù)碼管,第四個數(shù)碼管*7if(point=O)HC_595_OUT(tableled_buffe3|(lvvdp);elseHC_595_OUT(tableled_buffe3);ledO_en();delay_nus(60);ledO_dis();if(point=l)HC_595_OUT(tableled_buffer2|(ldp);elseHC_595_OUT(tableled_buffer2);ledl_en();delay_nus(60);ledl_dis();if(point=2)HC_595_OUT(tableled_bufferl|(ldp)
13、;elseHC_595_OUT(tableled_bufferlJ);Ied2_en();delay_nus(60);Ied2_dis();/*最高位數(shù)碼管,第一個數(shù)碼管*/if(point=3)HC_595_OUT(tableled_buffer0|(l9999)HC_595_OUT(OxFF);當計數(shù)大于9999時,四個數(shù)碼管同時輸出8PORTB|=(14)|(15)|(16)|(1999)led_bufferO=data/lOOO;led_bufferl=(data%1000)/100;led_buffer2=(data%100)/10;led_buffer3=data%10;leddi
14、s_update();elseif(data99)led_bufferO=data/lOOO;關(guān)閉最高位的那個數(shù)碼管led_bufferl=(data%1000)/100;led_buffer2=(data%100)/10;led_buffer3=data%10;leddis_update();elseif(data9)led_bufferO=data/lOOO;led_bufferl=16;led_buffer2=(data%100)/10;led_buffer3=data%10;leddis_update();elseled_buffer0=data/1000;led_bufferl=16
15、;led_buffer2=16;led_buffer3=data%10;leddis_update();volatileunsignedintcountnum=0;voidtimerlnit(void)TCCR1B=0 x00;/stopTCNT1H=0 x8F;/setupTCNT1L=0 x81;OCR1AH=0 x70;OCR1AL=0 x7F;OCR1BH=0 x70;OCR1BL=0 x7F;OCR1CH=0 x70;OCR1CL=0 x7F;ICR1H=0 x70;ICR1L=0 x7F;TCCR1A=0 x00;TCCR1B=0 x04;/startTimer#pragmaint
16、errupt_handletimerl_ovfjsr:15voidtimerl_ovfjsr(void)TCNT1H=0 x8F;/reloadcounterhighvalueTCNT1L=0 x81;/reloadcounterlowvaluecountnum+;if(countnum9999)countnum=0;voidinit_devices(void)CLI();/disableallinterruptstimerljnit();TIMSK=0 x04;/timerinterruptsourcesSEI();/re-enableinterrupts/*函數(shù)功能:主程序入口參數(shù):出口參
17、數(shù):*/voidmain(void)init_devices();HC_595nit();adcjnit();SEI();/開全局中斷變戢display(O);while(l)delay();displayJed(adc_rel/1024.0*5*1000);3、對EEPROM進行讀寫操作/*文件:main.c用途:注意:內(nèi)部8M晶振*/#includenconfig.hH/*向EEPROM里而寫入數(shù)據(jù)輸入雖:地址.數(shù)據(jù)*/voidEEPROM_wite(unsignedintuiAddress.unsignedcharucData)while(EECR&(lEEWE);等待上一次寫操作結(jié)束E
18、EAR=uiAddress;地址EEDR=ucData;數(shù)據(jù)EECR|=(1EEMWE);譽位EEMWE,主機寫使能EECR|=(1EEWE);置位EEWE,寫使能,啟動寫操作/*從EEPROM指定的地址里面讀出相應(yīng)的數(shù)據(jù)*/unsignedcharEEPROM_read(unsignedintuiAddress)while(EECR&(lEEWE);等待上一次寫操作結(jié)束EEAR=uiAddress;設(shè)呂地址寄存器EECR|=(1EERE);讀使能returnEEDR;返回讀入EEDR里而的數(shù)據(jù)voidmain(void)unsignedchartemp=123;unsignedchardat
19、a;HC_595Jnit();EEPROM_wnte(0 x01ztemp);data=EEPROM_read(Ox01);while(l)Seg7_Led_display(data);調(diào)用顯示函數(shù)將寫入的數(shù)據(jù)又讀出來文件:eeproml2.rar大?。?0KB卜載:里4.定時器0(輪循方式)/*定時器0和2(均為八位的定時計數(shù)器)有四種工作模式,此例是工作在普通模式。在此模式下,計數(shù)器不斷的累加,當計數(shù)到最大值Oxff后返回到0 x00重新開始,在TCNT0為0的同時,T/C溢出標志TOVO置位*/使用輪循方式,當TIFR溢出時,uc_led加1.輸出到led時期發(fā)光/TIFR中斷標志寄存器
20、#include#defineucharunsignedcharucharuc_led,k;voidmain()設(shè)置數(shù)碼管輸出高電平DDRE|=12;PORTE|=12;DDRA=0XFF;PORTF=OXFF;TCNT0=0X00;設(shè)定定時計數(shù)器的初值為0TCCR0=0X05;/使用1024分頻(共有7種時鐘)ucJed=0;k=0;while(l)while(!(TIFR&0X01);/循環(huán)檢測TIFR中的溢出標志是否有效/PORTA=ucJed;uc_led+;if(ucjed=255)uc_led=O;k+;if(k=255)k=0;PORTA=k;TIFR|=0X01;寫1到TIFR
21、的TOVO位清除溢出標志為TOVO5、定時器0中中斷/*/*定時器TO測試程序/*目標器件:ATmegal28/*晶振:RC8MHZ*/*/*/*編譯環(huán)境:ICCAVR7.13*/*E-Mail: HYPERLINK mailto: x01;/*函數(shù)功能:主程序入口參數(shù):出口參數(shù):*/voidmain(void)CLI();/disableallinterruptsport_init();timerOnit();MCUCR=0 x00;TIMSK=0 x01;/TO溢出使能SEI();/enableinterrupts定時器1測試程序/*/*/*定時器T1測試程序/*/*包倉頭文件*/#inc
22、lude#inelude/*個局變;r*/intk;/*函數(shù)功能:端口初始化程序入口參數(shù):出口參數(shù):*/voidportjnit(void)DDRE|=12;PORTE|=140)k=0;PORTA0 x01;/*函數(shù)功能:主程序入口參數(shù):出口參數(shù):*/voidmain(void)CLI();/disableallinterruptsport_init();timerlnit();MCUCR=0 x00;TIMSK=0 x04;/TO溢出使能SEI();/enableinterrupts7、定時器1測試程序之二/*/*/*定時器T1測試程序/*定時時間為1秒*/*/*包倉頭文件*/#inclu
23、de#include/*個局變;d*/intcountnum;/*函數(shù)功能:端口初始化程序入口參數(shù):出口參數(shù):*/voidportJnit(void)DDRE|=12;PORTE|=1#include/*牙宦義*/#definefosc8000000晶振8MHZ#definebaud2400波特率/*兩數(shù)功能:uatO初始化程序入口參數(shù):出口參數(shù):*/voiduartOnit(void)UCSROB=0 x00;關(guān)閉UARTOOUCSROA=0 x00;不使用倍速發(fā)送(異步)UCSROC=(1UCSZO1)|(1UCSZOO);數(shù)據(jù)位為8位UBRR0L=(fosc/16/(baud+l)%25
24、6;異步正常惜況下的計算公式UBRR0H=(fosc/16/(baud+l)/256;UCSROB=(1RXENO)|(1TXENO);接收使能和發(fā)送使能/*因數(shù)功能:uartO發(fā)送單字節(jié)數(shù)據(jù)入口參數(shù):c出口參數(shù):*/voidputcharO(unsignedcharc)while(!(UCSROA&(1UDREO);/表明發(fā)送器已經(jīng)準備就緒UDR0=C;將要發(fā)送的數(shù)據(jù)裝入UDR0寄存器/*函數(shù)功能:uartO接收單字節(jié)數(shù)據(jù)入口參數(shù):出口參數(shù):*/unsignedchargetcharO(void)while(!(UCSROA&(1#include/*牙左義*/#definefosc80000
25、00晶振8MHZ#definebaud9600波特率/*函數(shù)功能:uatl初始化程序入口參數(shù):出口參數(shù):*/voiduartljnit(void)/USART1初始化UCSR1B=0 x00;關(guān)閉USART1UCSR1A=0 x00;不適使用倍速發(fā)送UCSR1C=(1VVUCSZ11)|(1VVUCSZ1O);數(shù)據(jù)位為八位UBRRlL=(fosc/16/(baud+l)%256;/異步疋常模式下,UBRR的計算公式UBRRlH=(fosc/16/(baud+l)/256;UCSR1B=(1RXEN1)|(1TXEN1);/接收使能,傳送使能/*函數(shù)功能:uartl發(fā)送單字節(jié)數(shù)據(jù)入口參數(shù):c出口
26、參數(shù):*/voidputcharl(unsignedcharc)串口1發(fā)送字符while(!(UCSR1A&(1UDRE1);/表明發(fā)送器一準備就緒UDRl=c;/*函數(shù)功能:uartl接收單字節(jié)數(shù)據(jù)入口參數(shù):出口參數(shù):*/unsignedchargetcharl(void)/$口1接回收數(shù)據(jù)while(!(UCSRlA&(1VVRXC1);returnUDR1;將接收到的字符返回/*函數(shù)功能:uartl發(fā)送字符串數(shù)據(jù)入口參數(shù):*s出口參數(shù):*/voidputsl(char*s)while(*s)putcharl(*s);s+;putchal(OxOa);回車換行putcharl(OxOd);
27、/*函數(shù)功能:主程序入口參數(shù):出口參數(shù):*/voidmain(void)unsignedchari;uartljnit();putsl(”HELLO);while(l)putsl(Htestok!”);串口調(diào)試助手SCoMAssistant2.涪空重填|撿送的字符/數(shù)據(jù)htty/Zr血TindJE.163.如制發(fā)送手君發(fā)送|廠自動發(fā)送倜期改翅重選)自動發(fā)送周期:阿i亳秒選擇發(fā)送文件還沒有選擇丈件發(fā)送文件MAILt*jSTATUS:CONIOFEHEBz24.00,1(,8,1.fRX::15577TX:銅Count-srRESET需要注總的是:1、耍保證串口通信的成功,PC機和單片機必須設(shè)用成
28、一樣的波特率,這樣才能夠保證串口通信的成功。2、上面提到的串口指的是九針的串口,它的兒個相應(yīng)的管腳定義如下:2接受數(shù)據(jù)(RXD)3發(fā)出數(shù)據(jù)(TXD)5伯號地線(SG)下面是引腳圖10.ATMEGA128SPI驅(qū)動ATMEGA128單片機SPI通信驅(qū)動程序/*文件:spi.c用途:SPI驅(qū)動/*函數(shù)名稱:spi_init(void)*功能描述:SPI初始化*輸入:*輸出:*全局變戢:無*調(diào)用模塊:*說明:*注意:*/voidspijnit(void)DDRB|=(1MOSI)|(1SCK)|(KSS);/設(shè)置MOSI和SCK輸出SPCR=(1SPE)|(1MSTR)|(1SPRO)|(1SPR1
29、);使能SPI,主機模式/SPE,使能SPI:MSTR,主機模式:SPRO和SPR1設(shè)置時鐘頻率/*函數(shù)名稱:SPI_MasterTransmit(charData)*功能描述:SPI主機發(fā)送數(shù)拯*輸入:Data需要通過SPI傳輸?shù)臄?shù)據(jù)*輸出:*全局變戢:無*調(diào)用模塊:*說明:*注意:*/voidSPI_MasterTransmit(charData)/*啟動數(shù)據(jù)傳輸*/SPDR=Data;/*等待傳輸結(jié)束*/whlle(!(SPSR&(1SPIF)串行發(fā)送結(jié)束以后SPIF置位(即為1)11.PWM波形輸出#include#include#defineuintunsignedint#defin
30、eucharunsignedcharvoiddelay_ms(uintn)uinti=Ozj;while(in)(for(j=0;j1000;j+);i+;voidpwmOnit(void)DDRB=0X10;TCCRO=OXOO;OCRO=OX7F;/8位的定時計數(shù)器的初值設(shè)定為0 x7fTCNTO=O;計數(shù)器TCCR0=0X6A;/設(shè)代為快速pwm模式,采取8分頻voidmain(void)ucharwide;chartemp;pwmOJnit();while(l)delay_ms(50);if(+wide=255)wide=O;OCRO=wide;定時器1數(shù)碼管顯示(is)config.
31、h文件/*時間誤差:0.00672秒每秒*/#defineSS0#defineSCK1#defineMOSI2#defineMISO3#defineSS_H()PORTB|=(1SS)#defineSS_L()PORTB&=(1VVSS)注意,不要漏掉了(開第一個數(shù)碼管的位選#defineledO_en()DDRB|=14;PORTB|=(14);#defineledO_dis()DDRB|=14;PORTB&=(1VV4);#defineledl_en()DDRB|=15;PORTB|=(15);#defineledl_dis()DDRB|=15;PORTB&=(1VV5);#defineI
32、ed2_en()(DDRB|=16;PORTB|=(16);#defineIed2_dis()DDRB|=16;PORTB&=(1VV6);#defineIed3_en()(DDRB|=17;PORTB|=(17);#defineIed3_dis()DDRB|=17;PORTB&=(1VV7);#defineOE7#definepoint4#definedp7#include#ineludevoidportJnit(void)DDRA=OXFF;PORTA=OXFF;constunsignedchartable=0 x3F,0 x06/0 x5Bz0 x4Fz0 x66,0 x6D,0 x7D
33、,0 x07,0 x7F,0 x6F,0 x77,0 x7C,0 x39,0 x5E,0 x79,0 x71,0 x00;volatileunsignedcharled_buffer4;voiddelay_lus(void)/Ius延時函數(shù)asm(HnopH);voiddelay_nus(unsignedintn)Nus延時函數(shù)unsignedinti=0;for(i=0;ivn;i+)delay_lus();voiddelay_lms(void)/1ms延時函數(shù)unsignedinti;for(i=0;i1140;i+);voiddelay_nms(unsignedintn)Nms延時函數(shù)u
34、nsignedinti=0;for(i=0;ivn;i+)關(guān)第一個數(shù)碼管的位選/0丄2加5,6,7,8,9/abedejdelay_lms();/*完成spi的初始化*/voidspijnit(void)DDRB|=(1VVMOSI)|(1VVSCK)|(1VVSS);設(shè)置MOSI,SCK輸出SPCR=(1VVSPE)|(1VVMSTR)|(1VVSPRO)|(1VVSPR1);使能SPI,主機模式/*spi主機傳送數(shù)據(jù)*/voidSPI_MasterTransmit(charData)/*啟動數(shù)據(jù)傳輸*/SPDR=Data;/*等待傳輸結(jié)束*/while(!(SPSR&(1SPIF)f/*完
35、成對HC595的初始化*/voidHC_595Jnit(void)DDRC|=(1OE);設(shè)置PORTC7為輸出PORTC&=(1OE);輸出高電平,使能595PORTB=OXOF;同時打開四個數(shù)碼管的位選spinit();led_buffer0=16;初始化數(shù)碼管段碼led_bufferl=16;led_buffer2=16;led_buffer3=16;/*HC595完成傳送數(shù)據(jù)*/voidHC_595_OUT(unsignedchardata)SS_L();SPI_MasterTransmit(data);SS_H();voidleddis_update(void)/*最低位數(shù)碼管,第四
36、個數(shù)碼管*7if(point=O)HC_595_OUT(tableled_buffer3|(ldp);elseHC_595_OUT(tableled_buffer3);ledO_en();delay_nus(60);ledO_dis();if(point=l)HC_595_OUT(tableled_buffer2|(ldp);elseHC_595_OUT(tableled_buffer2J);ledl_en();delay_nus(60);ledl_dls();if(point=2)HC_595_OUT(tableled_bufferl|(ldp);elseHC_595_OUT(tablele
37、d_bufferlJ);Ied2_en();delay_nus(60);Ied2_dis();/*最高位數(shù)碼管,第一個數(shù)碼管*/if(point=3)HC_595_OUT(tableled_buffer0|(l9999)HC_595_OUT(OxFF);當計數(shù)大丁9999時,四個數(shù)碼管同時輸出8PORTB|=(14)|(15)|(16)|(1999)led_bufferO=data/lOOO;led_bufferl=(data%1000)/100;led_buffer2=(data%100)/10;led_buffer3=data%10;leddis_update();elseif(data9
38、9)led_buffer0=16;關(guān)閉最高位的那個數(shù)碼管led_bufferl=(data%1000)/100;led_buffer2=(data%100)/10;led_buffer3=data%10;leddis_update();elseif(data9)led_buffe0=16;led_bufferl=16;led_buffer2=(data%100)/10;led_buffer3=data%10;leddis_update();elseled_buffe0=16;led_bufferl=16;led_buffer2=16;led_buffer3=data%10;leddis_upd
39、ate();voidinit_devices(void)CLI();portjnit();/disableallinterrupts端口初始化HC_595Jnit();/595初始化timerljnit();定時器1初始化/TIMSK=0X04;定時器1中斷溢出使能或者寫成TIMSK|=(1TOIE1);main.c文件*/#include#inelude#includeconfig.hH/*令加變n;*/intk;volatileunsignedintent;/*函數(shù)功能:定時器初始化程序入口參數(shù):出口參數(shù):*/voidtimerlnit(void)TCCR1B=0 x00;/stopTCN
40、T1H=OxFF;/setupIsTCNT1L=0 x3D;7/(12*16+2)*40*1024/8000000=0.99328sOCR1AH=0 x00;OCR1AL=0 xC3;OCR1BH=0 x00;OCR1BL=0 xC3;OCR1CH=0 x00;OCR1CL=0 xC3;ICR1H=0 x00;ICR1L=0 xC3;TCCR1A=0 x00;TCCR1B=0 x05;/startTimer1024DDRE|=12;PORTE|=140)k=0;PORTA0 x01;cnt+;if(cnt=10000)cnt=0;/*函數(shù)功能:主程序入口參數(shù):出口參數(shù):*/voidmain(v
41、oid)CLI();/disableallinterruptsinit_devices();MCUCR=0 x00;TIMSK=0 x04;/TO溢出使能SEI();/enableinterruptswhile(l)display_led(cnt);定時器1:定時計數(shù)(is)main.c文件:*/#include#inelude#includeconfig.h*/intk;volatileunsignedintent;unsignedcharfenpin=0 x01,0 x02,0 x03,0 x04,0 x05;分頻系數(shù)分別為:1,8,64,256,1024;/*函數(shù)功能:定時器初始化程序入
42、口參數(shù):出口參數(shù):*/voidtimerlnit(void)TCCR1B=0 x00;/stopTCNT1H=OxFO;/setupIsTCNT1L=OxBE;/(16*16*15+4*16)*1024/8000000*2=0.999424STCCR1A=0 x00;TCCR1B=fenpin4;/startTimer1024DDRE|=12;PORTE|=12;/*函數(shù)功能:定時中斷服務(wù)程序入口參數(shù):出口參數(shù):*/#pragmainterrupt_handletimerl_ovfjsr:15voidtimerl_ovfjsr(void)TCNT1H=OxFO;/reloadcounterhi
43、ghvalueTCNT1L=OxBE;/reloadcounterlowvaluecnt+;if(cnt=20000)cnt=O;/*因數(shù)功能:主程序入口參數(shù):出口參數(shù):*/voidmain(void)CLI();/disableallinterruptsinit_devices();MCUCR=0 x00;TIMSK=0 x04;/Tl溢出使能SEI();/enableinterruptswhile(l)display_led(cnt/2);config.h文件:/*時間誤湼:0.00672秒毎秒*/#defineSS0#defineSCK1#defineMOSI2#defineMISO3#
44、defineSS_H()PORTB|=(1SS)#defineSS_L()PORTB&=(1VVSS)注意,不要漏掉了(#defineled0_en()(DDRB|=14;PORTB|=(14);開第一個數(shù)碼管的位選#defineledO_dis()DDRB|=14;PORTB&=(lv4)汀關(guān)第一個數(shù)碼管的位選#defineledl_en()DDRB|=15;PORTB|=(15);#defineledl_dis()DDRB|=15;PORTB&=(1VV5);#defineIed2_en()DDRB|=16;PORTB|=(16);#defineIed2_dis()DDRB|=16;POR
45、TB&=(1VV6);#defineIed3_en()DDRB|=17;PORTB|=(17);#defineIed3_dis()DDRB|=17;PORTB&=(1VV7);#defineOE7#definepoint4#definedp7#include#ineludevoidportJnit(void)DDRA=0XFF;PORTA=OXFF;0H45,6,7,8,9/abGcteJconstunsignedchartable=0 x3F,0 x06/0 x5Bz0 x4Fz0 x66,0 x6D,0 x7D,0 x07,0 x7Fz0 x6F,0 x77,0 x7C,0 x39,0 x
46、5Ez0 x79,0 x71,0 x00;volatileunsignedcharled_buffer4;voiddelay_lus(void)/Ius延時函數(shù)asm(FopH);voiddelay_nus(unsignedintn)Nus延時函數(shù)unsignedinti=0;for(i=0;in;i+)delay_lus();voiddelay_lms(void)/1ms延時函數(shù)unsignedinti;for(i=0;i1140;l+);voiddelay_nms(unsignedintn)/Nms延時函數(shù)unsignedinti=0;for(i=O;in;i+)delay_lms();/
47、*完成spi的初始化*/voidspijnit(void)DDRB|=(1VVMOSI)|(1VVSCK)|(1VVSS);設(shè)置MOSI,SCK輸出SPCR=(1VVSPE)|(1VVMSTR)|(1VVSPRO)|(1VVSPR1);使能SPI,主機模式/*spi主機傳送數(shù)據(jù)*/voidSPI_MasterTransmit(charData)/*啟動數(shù)據(jù)傳輸*/SPDR=Data;/*等待傳輸結(jié)束*/while(!(SPSR&(1SPIF)f/*完成對HC595的初始化*/voidHC_595nit(void)DDRC|=(1OE);設(shè)置PORTC7為輸出PORTC&=(1VVOE);輸出高
48、電平,使能595PORTB=OXOF;同時打開四個數(shù)碼管的位選spinit();led_buffer0=16;初始化數(shù)碼管段碼led_bufferl=16;led_buffer2=16;led_buffer3=16;/*HC595完成傳送數(shù)據(jù)*/voidHC_595_OUT(unsignedchardata)SS_L();SPI_MasterTransmit(data);SS_H();voidleddis_update(void)/*授低位數(shù)碼管,第四個數(shù)碼管*7if(point=O)HC_595_OUT(tableled_buffe3|(lvvdp);elseHC_595_OUT(table
49、led_buffer3);ledO_en();delay_nus(60);ledO_dis();if(point=l)HC_595_OUT(tableled_buffe2|(lvvdp);elseHC_595_OUT(tableled_buffer2);ledl_en();delay_nus(60);ledl_dis();if(point=2)HC_595_OUT(tableled_bufferl|(l9999)HC_595_OUT(OxFF);當計數(shù)大丁9999時,四個數(shù)碼管同時輸出8PORTB|=(14)|(15)|(16)|(1999)led_buffer0=data/1000;led_bufferl=(data%1000)/100;led_b
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《禮儀插花的應(yīng)用》課件
- 《離合器檢修》課件
- 單位管理制度匯編大合集人事管理十篇
- 單位管理制度分享匯編【人力資源管理】十篇
- 單位管理制度分享大全職員管理篇
- 《中級計量經(jīng)濟學(xué)》課程教學(xué)大綱 (二)
- 八下期中測試卷02【測試范圍:第1-11課】(原卷版)
- 《員工敬業(yè)度提升》課件
- 《市場分析教學(xué)課件》課件
- 《標準化概述》課件
- 醫(yī)生四頁簡歷10模版
- 2024年人教版八年級歷史上冊期中考試卷(附答案)
- 2024年WPS計算機二級考試題庫350題(含答案)
- 2024年鍋爐運行值班員(中級)技能鑒定理論考試題庫(含答案)
- 福建省泉州市2023-2024學(xué)年高一上學(xué)期期末質(zhì)檢英語試題(解析版)
- 蘇教版(2024新版)七年級上冊生物期末模擬試卷 3套(含答案)
- 《項目管理》完整課件
- 2024-2030年中國苯胺行業(yè)現(xiàn)狀動態(tài)與需求前景展望報告
- 英雄之旅思維模型
- 解一元二次方程(公式法)(教學(xué)設(shè)計)-九年級數(shù)學(xué)上冊同步備課系列
- 冬季傳染病預(yù)防-(課件)-小學(xué)主題班會課件
評論
0/150
提交評論