📄 main.c
字号:
/*
实验三十:
DS18B20实验,动态LED数据管显示温度。
1、AVR单片机读取DS18B20实验,并通过学习板上在LED数码管显示温度。
2、晶振频率为内部1MHz。
3、DS18B20由PA7口实现单总线访问,实现读取温度。
4、低层驱动函数中带有中断保护,程序可直接用于商业产品中。
5、LED数码管显示采用定时器中断方式,全中断驱动,不需要主程序管理,只要把要显示的内部放到显示缓存区就行了。
6、进行此实验请插上JP1的所有8个短路块,JP6(SPI_EN)短路块。
7、DS18B20的电源脚接到VCC及GND上面,数据线接到PA7口。
AVR mega16学习板
AVR_AFA
www.iccavr.com
11:48 2007-6-30
*/
#include "iom16v.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++) {
;
}
}
}
/*
主函数
实现系统的初始化操作。
周期性读取温度。
然后放入显示缓存区。
上面两个任务之间完全独立运行,方便移植。
*/
void main(void) {
unsigned int i;
DDRA = 0x00; /*方向输入*/
PORTA = 0xFF; /*打开上拉*/
DDRB = 0xFF; /*方向输出*/
PORTB = 0xF0; /*电平设置*/
DDRC = 0x00;
PORTC = 0xFF;
DDRD = 0x00;
PORTD = 0xFF;
delay_ms(200);
ds1820_reset(); /*复位D18B20*/
led4_init(); /*启动显示任务*/
while (1) {
ds1820_start(); /*启动一次转换*/
delay_ms(2000); /*等待转换结束*/
i = ds1820_read_temp(); /*读取温度数值*/
i = (i * 10) / 16; /*数值处理*/
led_buf[3] = i / 1000; /*将显示信息加载到显示缓存区*/
i = i % 1000;
led_buf[2] = i / 100;
i = i % 100;
led_buf[1] = i / 10;
led_buf[0] = i % 10;
led_buf[4] = 1; /*小数点位置*/
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -