⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 用AVR单片机做的一些程序,包括跑马灯显示,PWM产生,ADC转换等
💻 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 + -