?? main.c
字號:
/*
實驗九:
AD轉換實驗。
1、AD轉換實驗。程序進行周期AD轉換,在并轉換值顯示在數碼管上。
2、使用內部1 M晶振。
3、進行此實驗需要插上SPI、AD0短路塊。
4、此實驗采樣AD0電位器的電壓值,并以實際電壓值的型式顯示在LED數碼管上。
5、此實驗包含ADC采樣、數值轉換、顯示,是一個完整的小系統。
AVR mega128學習板
www.iccavr.com 阿發
2007-10-12
*/
#include "iom128v.h"
#include <macros.h>
extern unsigned int get_ad(void); /*AD采樣函數*/
extern void disp_init(void); /*顯示初始化*/
extern unsigned char led_buf[]; /*顯示緩存*/
/*延時函數,頻率1MHz,單位mS*/
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 = 0xFE; /*PF0無上拉電阻*/
DDRG = 0x00;
PORTG = 0xFF;
}
/*十六進制轉十進制函數*/
void int_to_bcd(unsigned int temp) {
unsigned char i;
if (temp > 9999) { /*防止數值過大*/
temp = 9999;
}
for (i = 0; i < 4; i++) {
led_buf[i] = temp % 10; /*提取當前變量最低位*/
temp = temp / 10; /*去掉當前最低位值*/
}
}
void main(void) {
unsigned int i;
delay_ms(200); /*加入延時*/
io_init(); /*IO口初始化*/
disp_init(); /*顯示初始化*/
while (1) {
delay_ms(100); /*周期控制*/
i = get_ad(); /*獲取電壓*/
i = (unsigned int)(((unsigned long)i*5000)/1024);/*將AD結果轉成電壓值*/
int_to_bcd(i); /*將電壓值提取出來*/
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -