




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、1、流水燈12、AD轉(zhuǎn)換+數(shù)碼管顯示23、對EEPROM進行讀寫操作84、定時器0(輪循方式)95、定時器0中中斷106、定時器1測試程序127、定時器1測試程序之二148、串口通信(USART0)159、串口通信(USART1)1710、ATMEGA128 SPI驅(qū)動2011、PWM波形輸出2112、定時器1數(shù)碼管顯示(1s)2213、定時器1:定時計數(shù)(1s)2714、外部中斷0-33215、定時器3 pwm輸出3416、定時器0,快速PWM模式3517、定時器0,相位修正(調(diào)整)模式3618、定時器1pwm波形輸出3819、定時器3,OCRB3輸出PWM波形,占空比可調(diào)391、流水燈/*
2、硬件環(huán)境:atmega128開發(fā)板軟件環(huán)境:CodeVisionAVR-C*/#include #define uchar unsigned char#define uint unsigned intuchar cnt;void timer1_init() TCCR1B=0X00; /先停止定時器1 TCNT1H=0XF0; /設(shè)定定時器初值 TCNT1L=0XBE; TCCR1A=0X00; /啟動定時器1 TCCR1B=0X05; /使用1024分頻interrupt TIM1_OVF void timer1_ovf_isr(void) TCNT1H=0XF0; /重載定時器初值 TCNT
3、1L=0XBE; DDRE|=12; PORTE|=12; DDRA=0xff; PORTA=cnt; /輸出led的值到端口B cnt+; if(cnt=255) cnt=0;void main() /DDRB=0XFF; SREG|=0X80; TIMSK=0X04; timer1_init(); while(1) ; 2、AD轉(zhuǎn)換+數(shù)碼管顯示/*/*ADC測試程序 */*目標器件:ATmega128 */*晶振:RC 8MHZ */*編譯環(huán)境:ICCAVR 7.13A */*E-Mail:number007cool */*時間:2010年11月13日 */Aref接AVCC(+5V),采
4、用Aref作參考電壓/*用數(shù)碼管顯示AD轉(zhuǎn)換的結(jié)果*/*/*包含頭文件*/#include #include /*數(shù)碼管段碼表*/extern const unsigned char tab=0x3f,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07, 0x7F,0x6F;/*全局變量*/unsigned int adc_rel=0;/*函數(shù)功能:ADC初始化函數(shù)入口參數(shù):出口參數(shù):*/void adc_init(void)DDRF&=0XFE; /PORTF0設(shè)置為輸入,即作為ADC0口輸入模擬電壓PORTF&=0XFE; /PORTF0設(shè)置為輸入低電平ADCSRA=0x
5、00; /關(guān)ADCADMUX = 0X00; /采用Aref作為參考電壓,ADC0單端輸入,右對齊ACSR=(1ACD);ADCSRA = (1ADEN)|(1ADSC)|(1ADATE)|(1ADIE)|(1ADPS2)|(1ADPS1);/ADEN,啟動ADC;ADSC,ADC開始轉(zhuǎn)換;ADIE,ADC中斷使能;ADPSx,設(shè)置分頻因子64/*函數(shù)功能:ADC中斷函數(shù)入口參數(shù):出口參數(shù):*/#pragma interrupt_handler adc_isr:iv_ADCvoid adc_isr(void) /int data_h,data_l; /data_l=ADCL; /data_h=
6、ADCH; ADCSRA = 0x00; ADCSRA = (1ADEN)|(1ADSC)|(10x1ff) PORTA|=12; else PORTA&=(12); */*函數(shù)功能:延時子程序入口參數(shù):出口參數(shù):*/void delay(void) int i; for(i=0;i1800;i+);/*函數(shù)功能:顯示子程序入口參數(shù):k出口參數(shù):*/void display(unsigned int k)/發(fā)光二極管顯示初始化 DDRE|=12;PORTE|=12;DDRA=0XFF;PORTA=k;#define SS 0#define SCK 1#define MOSI 2#define
7、MISO 3#define SS_H() PORTB|=(1SS)#define SS_L() PORTB&=(1SS)#define led0_en()DDRB|=14;PORTB|=(14); /開第一個數(shù)碼管的位選#define led0_dis()DDRB|=14;PORTB&=(14); /關(guān)第一個數(shù)碼管的位選#define led1_en()DDRB|=15;PORTB|=(15);#define led1_dis()DDRB|=15;PORTB&=(15);#define led2_en()DDRB|=16;PORTB|=(16);#define led2_dis()DDRB|=
8、16;PORTB&=(16);#define led3_en()DDRB|=17;PORTB|=(17);#define led3_dis()DDRB|=17;PORTB&=(17);#define OE 7#define point 3#define dp 7#include #include const unsigned char table=0x3F,0x06,0x5B,0x4F,0x66, /0,1,2,3,4 0x6D,0x7D,0x07,0x7F,0x6F, /5,6,7,8,9 0x77,0x7C,0x39,0x5E,0x79,0x71,0x00; /a,b,c,d,e,fvol
9、atile unsigned char led_buffer4;void delay_1us(void) /1us延時函數(shù) asm(nop); void delay_nus(unsigned int n) /N us延時函數(shù) unsigned int i=0; for (i=0;in;i+) delay_1us(); void delay_1ms(void) /1ms延時函數(shù) unsigned int i; for (i=0;i1140;i+); void delay_nms(unsigned int n) /N ms延時函數(shù) unsigned int i=0; for (i=0;in;i+)
10、 delay_1ms(); /*完成spi的初始化*/void spi_init(void) DDRB |= (1MOSI)|(1SCK)|(1SS);/設(shè)置MOSI,SCK輸出 SPCR = (1SPE)|(1MSTR)|(1SPR0)|(1SPR1);/使能SPI,主機模式/*spi主機傳送數(shù)據(jù)*/void SPI_MasterTransmit(char Data) /* 啟動數(shù)據(jù)傳輸 */ SPDR = Data; /* 等待傳輸結(jié)束 */ while(!(SPSR & (1SPIF) ;/*完成對HC595的初始化*/void HC_595_init(void)DDRC |= (1OE
11、); /設(shè)置PORTC7為輸出PORTC &= (1OE); /輸出高電平,使能595PORTB = 0x0F; /同時打開四個數(shù)碼管的位選spi_init();led_buffer0=16; /初始化數(shù)碼管段碼led_buffer1=16;led_buffer2=16;led_buffer3=16;/*HC595完成傳送數(shù)據(jù)*/void HC_595_OUT(unsigned char data) SS_L(); SPI_MasterTransmit(data); SS_H();void leddis_update(void) /*最低位數(shù)碼管,第四個數(shù)碼管*/ if(point=0) HC
12、_595_OUT(tableled_buffer3|(1dp); else HC_595_OUT(tableled_buffer3); led0_en(); delay_nus(60); led0_dis(); if(point=1) HC_595_OUT(tableled_buffer2|(1dp); else HC_595_OUT(tableled_buffer2); led1_en(); delay_nus(60); led1_dis(); if(point=2) HC_595_OUT(tableled_buffer1|(1dp); else HC_595_OUT(tableled_bu
13、ffer1); led2_en(); delay_nus(60); led2_dis(); /*最高位數(shù)碼管,第一個數(shù)碼管*/ if(point=3) HC_595_OUT(tableled_buffer0|(19999) HC_595_OUT(0xFF);/當計數(shù)大于9999時,四個數(shù)碼管同時輸出8 PORTB|=(14)|(15)|(16)|(1999) led_buffer0=data/1000; led_buffer1=(data%1000)/100; led_buffer2=(data%100)/10; led_buffer3=data%10; leddis_update();els
14、e if(data99) led_buffer0=data/1000; /關(guān)閉最高位的那個數(shù)碼管 led_buffer1=(data%1000)/100; led_buffer2=(data%100)/10; led_buffer3=data%10; leddis_update(); else if(data9) led_buffer0=data/1000; led_buffer1=16; led_buffer2=(data%100)/10; led_buffer3=data%10; leddis_update();else led_buffer0=data/1000; led_buffer1
15、=16; led_buffer2=16; led_buffer3=data%10; leddis_update();volatile unsigned int countnum=0; void timer1_init(void)TCCR1B = 0x00; /stopTCNT1H = 0x8F; /setupTCNT1L = 0x81;OCR1AH = 0x70;OCR1AL = 0x7F;OCR1BH = 0x70;OCR1BL = 0x7F;OCR1CH = 0x70;OCR1CL = 0x7F;ICR1H = 0x70;ICR1L = 0x7F;TCCR1A = 0x00;TCCR1B
16、= 0x04; /start Timer#pragma interrupt_handler timer1_ovf_isr:15void timer1_ovf_isr(void)TCNT1H = 0x8F; /reload counter high valueTCNT1L = 0x81; /reload counter low valuecountnum+;if(countnum9999) countnum=0;void init_devices(void)CLI(); /disable all interruptstimer1_init();TIMSK = 0x04; /timer inter
17、rupt sourcesSEI(); /re-enable interrupts/*函數(shù)功能:主程序入口參數(shù):出口參數(shù):*/void main(void) init_devices(); HC_595_init(); adc_init(); SEI();/開全局中斷變量 display(0); while(1) delay(); display_led(adc_rel/1024.0*5*1000); 3、對EEPROM進行讀寫操作/*文件:main.c用途:注意:內(nèi)部8M晶振*/#include config.h/*向EEPROM里面寫入數(shù)據(jù)輸入量:地址,數(shù)據(jù)*/void EEPROM_wri
18、te(unsigned int uiAddress,unsigned char ucData)while(EECR&(1EEWE); /等待上一次寫操作結(jié)束EEAR = uiAddress; /地址EEDR = ucData; /數(shù)據(jù)EECR |=(1EEMWE); /置位EEMWE,主機寫使能EECR |=(1EEWE); /置位EEWE,寫使能,啟動寫操作/*從EEPROM指定的地址里面讀出相應(yīng)的數(shù)據(jù)*/unsigned char EEPROM_read(unsigned int uiAddress)while(EECR&(1EEWE); /等待上一次寫操作結(jié)束EEAR = uiAddre
19、ss; /設(shè)置地址寄存器EECR |=(1EERE); /讀使能return EEDR; /返回讀入EEDR里面的數(shù)據(jù)void main(void)unsigned char temp=123;unsigned char data;HC_595_init();EEPROM_write(0x01,temp);data=EEPROM_read(0x01);while(1) Seg7_Led_display(data); /調(diào)用顯示函數(shù)將寫入的數(shù)據(jù)又讀出來文件:eeprom12.rar大小:40KB下載:下載4、定時器0(輪循方式)/*定時器0和2(均為八位的定時計數(shù)器)有四種工作模式,此例是工作在
20、普通模式。在此模式下,計數(shù)器不斷的累加,當計數(shù)到最大值0xff后返回到0x00重新開始,在TCNT0為0 的同時,T/C溢出標志TOV0置位*/使用輪循方式,當TIFR溢出時,uc_led加1,輸出到led時期發(fā)光/TIFR中斷標志寄存器#include #define uchar unsigned charuchar uc_led,k;void main()/設(shè)置數(shù)碼管輸出高電平DDRE|=12; PORTE|=12;DDRA=0XFF;PORTF=0XFF;TCNT0=0X00;/設(shè)定定時計數(shù)器的初值為0TCCR0=0X05;/使用1024分頻(共有7種時鐘)uc_led=0;k=0;wh
21、ile(1) while(!(TIFR&0X01);/循環(huán)檢測TIFR中的溢出標志是否有效 /PORTA=uc_led; uc_led+; if(uc_led=255) uc_led=0; k+;if(k=255) k=0; PORTA=k;TIFR|=0X01; /寫1到TIFR的TOV0位清除溢出標志為TOV05、定時器0中中斷/*/*定時器T0測試程序 */*目標器件:ATmega128 */*晶振:RC 8MHZ */*編譯環(huán)境:ICCAVR 7.13 */*E-Mail:number007cool */*時間:2010年3月14日 */*TCCRn定時計數(shù)器控制寄存器 TCNTn計數(shù)
22、器,不斷的計數(shù) TIMSK定時計數(shù)器中斷屏蔽寄存器 TIFR中斷標志寄存器*/*/*包含頭文件*/#include #include /*全局變量*/int k;/*函數(shù)功能:端口初始化程序入口參數(shù):出口參數(shù):*/void port_init (void) DDRE|=12; PORTE|=1150) k=0; PORTA = 0x01; /*函數(shù)功能:主程序入口參數(shù):出口參數(shù):*/void main (void) CLI(); /disable all interrupts port_init(); timer0_init(); MCUCR = 0x00; TIMSK = 0x01; /T0
23、溢出使能 SEI(); /enable interrupts 6、定時器1測試程序/*/*定時器T1測試程序 */*/*包含頭文件*/#include #include /*全局變量*/int k;/*函數(shù)功能:端口初始化程序入口參數(shù):出口參數(shù):*/void port_init (void) DDRE|=12; PORTE|=140) k=0; PORTA = 0x01; /*函數(shù)功能:主程序入口參數(shù):出口參數(shù):*/void main (void) CLI(); /disable all interrupts port_init(); timer1_init(); MCUCR = 0x00;
24、TIMSK = 0x04; /T0溢出使能 SEI(); /enable interrupts 7、定時器1測試程序之二/*/*定時器T1測試程序 */*定時時間為1秒 */*/*包含頭文件*/#include #include /*全局變量*/int countnum;/*函數(shù)功能:端口初始化程序入口參數(shù):出口參數(shù):*/void port_init (void) DDRE|=12; PORTE|=12; DDRA=0XFF; PORTA=0X00;/*函數(shù)功能:定時器初始化程序入口參數(shù):出口參數(shù):*/void timer1_init(void)TCCR1B = 0x00; /stopTCNT
25、1H = 0x8F; /setupTCNT1L = 0x81;OCR1AH = 0x70;OCR1AL = 0x7F;OCR1BH = 0x70;OCR1BL = 0x7F;OCR1CH = 0x70;OCR1CL = 0x7F;ICR1H = 0x70;ICR1L = 0x7F;TCCR1A = 0x00;TCCR1B = 0x04; /start Timer/*函數(shù)功能:定時中斷服務(wù)程序入口參數(shù):出口參數(shù):*/#pragma interrupt_handler timer1_ovf_isr:15void timer1_ovf_isr(void)TCNT1H = 0x8F; /reload
26、counter high valueTCNT1L = 0x81; /reload counter low valuecountnum+;if(countnum=256) countnum=0;/*函數(shù)功能:主程序入口參數(shù):出口參數(shù):*/void main (void) CLI(); /disable all interrupts port_init(); timer1_init(); TIMSK = 0x04; /T0溢出使能 SEI(); /enable interrupts while(1) PORTA=countnum; 8、串口通信(USART0)/*/*串口0測試程序 */*目標器件
27、:ATmega128 */*晶振:RC 8MHZ */*編譯環(huán)境:ICCAVR 7.13A */*時間:2010年3月14日*/*E-Mail:number007cool */*/*包含頭文件*/#include#include/*宏定義*/#define fosc 8000000 /晶振8MHZ#define baud 2400/波特率/*函數(shù)功能:uart0初始化程序入口參數(shù):出口參數(shù):*/void uart0_init(void)UCSR0B = 0x00; /關(guān)閉UART00UCSR0A = 0x00; /不使用倍速發(fā)送(異步)UCSR0C =(1UCSZ01)|(1UCSZ00); /數(shù)據(jù)位為8位UBRR0L=(fosc/16/(baud+1)%256; /異步正常情況下的計算公式UBRR0H=(fosc/16/(baud+1)/256;UCSR0B =(1RXEN0)|(1TXEN0); /接收使能和發(fā)送使能/*函數(shù)功能:uart0發(fā)送單字節(jié)數(shù)據(jù)入口參數(shù):c出口參數(shù):*/void putchar0(unsigned char c) while (!(UCSR
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 鋁材產(chǎn)業(yè)實施方案
- 民間借貸糾紛的談案要點
- 海洋數(shù)字文旅體驗提升戰(zhàn)略規(guī)劃
- 老舍《駱駝祥子》課件
- 2025年克拉瑪依區(qū)公安系統(tǒng)招聘警務(wù)輔助人員考試筆試試題(含答案)
- 野外勘探彩鋼房搭建與維護協(xié)議
- 成都二手房買賣交易全程托管服務(wù)合同
- 幼兒園安全事故責任認定
- 寫一安全論文
- 緊急預(yù)案的模板
- 蘇科版八年級上冊數(shù)學第1章《全等三角形》單元知識點
- 排班系統(tǒng)-排班指南
- 新入職大學生培訓方案
- 傳統(tǒng)村落保護與發(fā)展模式
- 電氣安全專項隱患排查治理要點課件
- 《馬克思主義與社會科學方法論》1-7章思考題答案
- 《社會網(wǎng)絡(luò)分析法》課件
- 銀行基礎(chǔ)知識詳解
- 散熱器安裝施工方案與技術(shù)措施
- 在線語言學習行業(yè)競爭格局分析
評論
0/150
提交評論