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

📄 main.c

📁 用AVR单片机做的一些程序,包括跑马灯显示,PWM产生,ADC转换等
💻 C
字号:
/*
实验十六:

	DS18B20实验,动态LED数据管显示温度。
	1、AVR单片机读取DS18B20实验,并通过学习板上在LED数码管显示温度。
	2、晶振频率为内部1MHz。
	3、DS18B20由PA7口实现单总线访问,实现读取温度。
	4、低层驱动函数中带有中断保护,程序可直接用于商业产品中。
	5、LED数码管显示采用定时器中断方式,全中断驱动,不需要主程序管理,
		只要把要显示的内部放到显示缓存区就行了。
	6、进行此实验请插上SPI短路块。
	7、DS18B20的电源脚接到VCC及GND上面,数据线接到PF2口。

	
	11:48 2007-10-170
*/

#include "iom128v.h"									/*包含相关头文件*/
#include "ds1820.h"
#include "led4.h"

/*
延时函数

延时单位为:mS。
CPU频率为:1MHz。
*/
void delay_ms(unsigned int i) {

	unsigned char b;
	while (i --) {
		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 int_to_bcd(unsigned int temp) { 
	unsigned char i;

	for (i = 0; i < 4; i++) {
	led_buf[i] = temp % 10;								/*提取当前变量最低位*/
	temp = temp / 10;									/*去掉当前最低位值*/
    }
}

/*
主函数

实现系统的初始化操作。
周期性读取温度。
然后放入显示缓存区。
上面两个任务之间完全独立运行,方便移植。
*/
void main(void) {

	unsigned int i;

	io_init();
	delay_ms(200);
	ds1820_reset();										/*复位D18B20*/
	disp_init();										/*启动显示任务*/
	led_buf[4] = 1;										/*小数点位置*/
	while (1) {
		ds1820_start();									/*启动一次转换*/
		delay_ms(2000);									/*等待转换结束*/
		i = ds1820_read_temp();							/*读取温度数值*/
		i = (i * 10) / 16;								/*数值处理*/
		int_to_bcd(i);									/*整值分解*/
		}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -