📄 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 + -