?? main.c
字號:
/*
實驗八:
PWM實險。
1、利用PWM占空比調節功能,進行定時器T1輸出三路動態PWM信號,
并將結果以亮度的型式顯示在對應的LED發光二極管上。
2、內部1 M晶振,程序采用單任務方式,軟件延時。
3、進行此實驗請插上LED短路塊。
4、通過此實驗,可以對PWM有個初步認識,知道它的工作原理。
用一個定時器輸出三路PWM信號,充分發輝硬件資源。
AVR mega128學習板
www.iccavr.com 阿發
16:36 2007-10-12
*/
#include "iom128v.h"
/*延時函數*/
void delay_ms(unsigned char i) {
unsigned char a, b;
for (a = 0; a < i; a++) {
for (b = 1; b; b++);
}
}
/*IO口初始化函數*/
void io_init(void) {
DDRA = 0x00; /*方向輸入*/
PORTA = 0xFF; /*打開上拉*/
DDRB = 0xFF; /*方向輸出*/
PORTB = 0xFF; /*輸出高電平*/
DDRC = 0x00; /*不用的IO口建議設置為輸入帶上拉*/
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; /*先預設值,防止啟動瞬間值為空*/
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 ++; /*調節角度*/
OCR1A = i | 0xC0;
OCR1B = (i + 80) | 0xC0; /*人為加入一個修改值,讀整占空比*/
OCR1C = (i + 160) | 0xC0; /*主要是因為LED不是線性亮度*/
PORTB ^= 0x01;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -