- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
精品文档
基于 ATmega16与 1602LCD的温度显示程序
// 主芯片为 ATmega16
// 间隔 2s 采集一次温度值
// 使用 1602 的液晶作为显示
主程序如下:
#include <iom16v.h>
#include <macros.h>
#include "18B20.h"
#include "1602.h"
uchar adc_0[]={"Temperature:"};
uchar adc_1[]={0xdf,0x43};
// 延时函数在 16M 时延时 1ms
void s_1ms(unsigned int ms)
{
unsigned int aa;
for(;ms>=1;ms--)
{
for(aa=0;aa<=2000;aa++)
{;}
}
}
void main()
{
unsigned int i,tem3,tem2,tem1;
// 端口初始化
DDRA = 0xff;
PORTA = 0x00;
DDRB = 0xFF;
PORTB = 0xF0;
DDRC = 0x00;
PORTC = 0xFF;
DDRD = 0xff;
PORTD = 0xff;
// 延时 200ms
s_1ms(200);
//DS18B20 复位
ds1820_reset();
//1602 初始化
LcdInit();
。
1欢迎下载
精品文档
WriteChar(1,0,12,adc_0);
WriteChar(1,14,2,adc_1);
while (1)
{
// 进行一次转换
ds1820_start();
s_1ms(2000);
i = ds1820_read_temp(); // 读取温度数值
i = (i * 10) / 16; // 数值处理
// 第 3 位没有显示
i = i % 1000;
// 显示第 2 位
tem2= i / 100;
WriteNum(1,12,tem2);
i = i % 100;
// 显示第 1 位
tem1= i / 10;
WriteNum(1,13,tem1);
}
}
DS18B20的头文件程序:
//DS18B20 连接在端口 C 的第 6 引脚
// 设置成输入
#define DQ_INPUT DDRC &= ~(1 << PC6)
// 设置成输出
#define DQ_OUT DDRC |= (1 << PC6)
// 设置成低电平
#define DQ_LO PORTC &= ~(1 << PC6)
// 设置成高电平
#define DQ_HI PORTC |= (1 << PC6)
// 读出
#define DQ_R PINC & (1 << PC6)
// 中断标志
unsigned char init_f;
// 延时函数
void s_10us(unsigned int ms)
{
unsigned int aa;
。
2欢迎下载
文档评论(0)