?? main._c
字號(hào):
/*
實(shí)驗(yàn)八:
PWM實(shí)險(xiǎn)。
1、利用PWM占空比調(diào)節(jié)功能,進(jìn)行定時(shí)器T1輸出三路動(dòng)態(tài)PWM信號(hào),
并將結(jié)果以亮度的型式顯示在對應(yīng)的LED發(fā)光二極管上。
2、內(nèi)部1 M晶振,程序采用單任務(wù)方式,軟件延時(shí)。
3、進(jìn)行此實(shí)驗(yàn)請插上LED短路塊。
4、通過此實(shí)驗(yàn),可以對PWM有個(gè)初步認(rèn)識(shí),知道它的工作原理。
AVR mega128學(xué)習(xí)板
www.iccavr.com 阿發(fā)
16:36 2007-10-12
*/
#include "iom128v.h"
/*延時(shí)函數(shù)*/
void delay_ms(unsigned char i) {
unsigned char a, b;
for (a = 0; a < i; a++) {
for (b = 1; b; b++);
}
}
/*IO口初始化函數(shù)*/
void io_init(void) {
DDRA = 0x00; /*方向輸入*/
PORTA = 0xFF; /*打開上拉*/
DDRB = 0xFF; /*方向輸出*/
PORTB = 0xFF; /*輸出高電平*/
DDRC = 0x00; /*不用的IO口建議設(shè)置為輸入帶上拉*/
PORTC = 0xFF;
DDRD = 0x00;
PORTD = 0xFF;
DDRE = 0x00;
PORTE = 0xFF;
DDRF = 0x00;
PORTF = 0xFF;
DDRG = 0x00;
PORTG = 0xFF;
}
void main(void) {
unsigned char i = 0;
io_init();
OCR1A = i; /*先預(yù)設(shè)值,防止啟動(dòng)瞬間值為空*/
OCR1B = i + 80;
OCR1C = i + 160;
TCCR1A = (1 << WGM10); /*8位相位修正PWM模式*/
TCCR1A |= (1 << COM1A1) | (1 << COM1B1) | (1 << COM1C1);
TCCR1B = (1 << CS10); /*256分頻*/
while (1) {
delay_ms(150); /*變化周期*/
i ++; /*調(diào)節(jié)角度*/
OCR1A = i | 0xC0;
OCR1B = (i + 80) | 0xC0; /*人為加入一個(gè)修改值,讀整占空比*/
OCR1C = (i + 160) | 0xC0; /*主要是因?yàn)長ED不是線性亮度*/
PORTB ^= 0x01;
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -