0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

怎么制作顯示溫度的時鐘

454398 ? 作者:工程師吳畏 ? 2018-09-18 10:37 ? 次閱讀

一、。先發(fā)下制作完成的成品

手機拍的不是很清楚,但LCD上能看到顯示的時間和溫度值。

因為國慶忙,還沒來加上設(shè)置按鍵和鬧鐘功能,后續(xù)一定補上!見諒!

二、開始制作了

材料清單:

1.萬能電路板一塊

2.ATmega16單片機一塊

3.40DIP插座一塊

4.1602LCD液晶顯示屏一塊

5.ds1820溫度傳感器一只

6.4.7K電阻一只

7.7.3728Mhz晶振一只

8.27P電容兩只

9.排插和排坐若干

10.USB下載

以上材料淘寶都可以買到,大概40元左右。

三、我設(shè)計的原理圖

怎么制作顯示溫度的時鐘

怎么制作顯示溫度的時鐘

ds1820引腳圖(用TO-92封裝的)

LCD1602 引腳圖

四、按圖紙手工焊接,大家動手能力這么強,具體過程我就不寫了。

五、程序編寫(注:不懂得話可以直接跳過看下面的第六項)

軟件使用ICCAVR軟件,網(wǎng)上搜下很容易下載。

下面是我寫的程序:

#include

#include

#include “delay.h”

#include “1602.h”

unsigned long int j=0;

unsigned int s,t,h;

unsigned char display[9]={0,0,0,0,0,0,0,0,0};//顯示數(shù)據(jù)

typedef unsigned char uint8;/* 定義可移植的無符號8位整數(shù)關(guān)鍵字 */

typedef signed char int8;/* 定義可移植的有符號8位整數(shù)關(guān)鍵字 */

typedef unsigned int uint16;/* 定義可移植的無符號16位整數(shù)關(guān)鍵字 */

typedef signed int int16;/* 定義可移植的有符號16位整數(shù)關(guān)鍵字 */

typedef unsigned long uint32;/* 定義可移植的無符號32位整數(shù)關(guān)鍵字 */

typedef signed long int32;/* 定義可移植的有符號32位整數(shù)關(guān)鍵字 */

extern unsigned char wmh,wml; //全局變量

extern unsigned char count,count1;

#define CLR_DIR_1WIRE DDRD&=~BIT(4) //只要修改這里的參數(shù)就可以了!呵呵!

#define SET_DIR_1WIRE DDRD|=BIT(4) //里面什么都不用該!

#define CLR_OP_1WIRE PORTD&=~BIT(4)

#define SET_OP_1WIRE PORTD|=BIT(4)

#define CHECK_IP_1WIRE (PIND & 0x10) //檢測 pD4

void init_1820(void);

void write_1820(unsigned char x);

unsigned char read_1820(void);

/*************************************************

** 讀取溫度值

** 更改全局變量 wmh,wml; 溫度的高低位

*************************************************/

extern void gettemp(void);

unsigned char count,count1,flag; //flag溫度為負(fù)標(biāo)志,count為實際溫度

void init_1820(void)

{

SET_DIR_1WIRE; //設(shè)置PC2 為輸出

SET_OP_1WIRE;

CLR_OP_1WIRE;

delay_nus(480); //480us以上

SET_OP_1WIRE;

CLR_DIR_1WIRE;

delay_nus(20); //15~60us

while(CHECK_IP_1WIRE);

SET_DIR_1WIRE;

SET_OP_1WIRE;

delay_nus(140); //60~240us

}

void write_1820(unsigned char x)

{

unsigned char m;

for(m=0;m《8;m++)

{

CLR_OP_1WIRE;

if(x&(1《

SET_OP_1WIRE;

else

{CLR_OP_1WIRE;}

delay_nus(40); //15~60us

SET_OP_1WIRE;

}

SET_OP_1WIRE;

}

unsigned char read_1820(void)

{

unsigned char temp,k,n;

temp=0;

for(n=0;n《8;n++)

{

CLR_OP_1WIRE;

SET_OP_1WIRE;

CLR_DIR_1WIRE;

k=(CHECK_IP_1WIRE); //讀數(shù)據(jù),從低位開始

if(k)

temp|=(1《

else

temp&=~(1《

delay_nus(50); //60~120us

SET_DIR_1WIRE;

}

return (temp);

}

void gettemp(void) //讀取溫度值

{

unsigned char temh,teml,wm0,wm1,wm2,wm3;

init_1820(); //復(fù)位18b20

write_1820(0xcc); // 發(fā)出轉(zhuǎn)換命令

write_1820(0x44);

delay_nms(800); //不延時也好使,不知道怎么回事!

init_1820();

write_1820(0xcc); //發(fā)出讀命令

write_1820(0xbe);

teml=read_1820(); //讀數(shù)據(jù)

temh=read_1820();

wm0=teml》》4; //只要高8位的低四位和低8位的高四位,溫度范圍0~99啦!

wm1=temh《《4;

j=(temh*256+teml)*5; //計算具體溫度

display[1]=j/100%10+0x30;

display[2]=j/10%10+0x30;

display[3]=j%10+0x30;

LCD_write_char(5,1,display[1]);

LCD_write_char(6,1,display[2]);

LCD_write_char(7,1,‘?!?

LCD_write_char(8,1,display[3]);

LCD_write_char(9,1,‘C’);

}

//TIMER1 initialize - prescale:1024

// WGM: 0) Normal, TOP=0xFFFF

// desired value: 1Sec

// actual value: 1.000Sec (0.0%)

void timer1_init(void)

{

TCCR1B = 0x00; //stop

TCNT1H = 0xE3; //setup

TCNT1L = 0xE1;

OCR1AH = 0x1C;

OCR1AL = 0x1F;

OCR1BH = 0x1C;

OCR1BL = 0x1F;

ICR1H = 0x1C;

ICR1L = 0x1F;

TCCR1A = 0x00;

TCCR1B = 0x05; //start Timer

}

void init_devices(void)

{

//stop errant interrupts until set up

CLI(); //disable all interrupts

timer1_init();

MCUCR = 0x00;

GICR = 0x00;

TIMSK = 0x1C; //timer interrupt sources

SEI(); //re-enable interrupts

//all peripherals are now initialized

}

#pragma interrupt_handler timer1_ovf_isr:9

void timer1_ovf_isr(void)

{

//TIMER1 has overflowed

TCNT1H = 0xE3; //reload counter high value

TCNT1L = 0xE1; //reload counter low value

if(s++ == 59)

{s=0;

if(t++ == 59)

{t=0;

if(h++ == 24)

{h=1;

}

}

}

}

void dis(void)

{

display[4]=s/10+0x30;

display[5]=s%10+0x30;

display[6]=t/10+0x30;

display[7]=t%10+0x30;

display[8]=h/10+0x30;

display[9]=h%10+0x30;

LCD_write_char(10,0,display[5]);

LCD_write_char(9,0,display[4]);

LCD_write_char(8,0,‘:’);

LCD_write_char(7,0,display[7]);

LCD_write_char(6,0,display[6]);

LCD_write_char(5,0,‘:’);

LCD_write_char(4,0,display[9]);

LCD_write_char(3,0,display[8]);

delay_nms(50);

}

void main(void)

{h=24;

t=59;

s=55;

init_devices();

LCD_init();

delay_nms(50);

while(1)

{

gettemp();

dis();

delay_nms(500);

}

}

經(jīng)過ICCAVR編譯后生成的 hex 就是我們下載到單片機需要的文件。

六。下載 time.hex 到單片機

1.先下載 time.hex 文件

2.把USB下載線插在ISP接口上。

3.運行 AVR_fighter 軟件(買USB下載線送的配套軟件)

按圖紅圈先選擇 ATMEGA16,再設(shè)置好熔絲位,最后點擊寫入。

4.

點擊 裝FLASH 按鈕選擇 time.hex 文件后,點擊 編程。

幾秒后你就會看到液晶顯示出時間和溫度值,因為因為國慶忙,還沒來加上設(shè)置按鍵和鬧鐘功能,后續(xù)加下,見諒!

不過聰明的你一定看出來了,只要提前設(shè)定好 s,t,h(時、分、秒)編譯后下載,時鐘就能按你的要求工作了。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 單片機
    +關(guān)注

    關(guān)注

    6040

    文章

    44592

    瀏覽量

    636835
  • 時鐘
    +關(guān)注

    關(guān)注

    11

    文章

    1740

    瀏覽量

    131625
收藏 人收藏

    評論

    相關(guān)推薦

    以VB程序顯示溫度傳感器制作

    以VB 程序顯示溫度傳感器制作這次專題主要利用溫度感測組件Pt102 與OP 轉(zhuǎn)換電路所完成的溫度感測裝置。此外,我們將
    發(fā)表于 11-20 16:25 ?104次下載

    制作液晶顯示溫度計的方法

    制作液晶顯示溫度計的方法 本文介紹一種用DSl8820測溫、用SMCl602A液晶來顯示的新型溫度計。該
    發(fā)表于 03-09 16:58 ?3495次閱讀
    <b class='flag-5'>制作</b>液晶<b class='flag-5'>顯示</b><b class='flag-5'>溫度</b>計的方法

    基于51單片機的時鐘+溫控系統(tǒng)的小制作

    該作品是基于51單片機的時鐘+溫控系統(tǒng)的小制作,能夠顯示時鐘溫度
    發(fā)表于 11-17 10:19 ?38次下載

    帶日歷時鐘溫度顯示的電子萬年歷

    溫度顯示日歷時鐘溫度顯示的電子萬年歷,帶電路圖+PCB+源程序
    發(fā)表于 12-07 14:35 ?87次下載

    基于單片機的彩屏模塊(1.8寸彩屏程序-1)溫度-時鐘綜合顯示

    基于單片機的彩屏模塊(1.8寸彩屏程序-1)溫度-時鐘綜合顯示【C語言】
    發(fā)表于 01-06 14:26 ?28次下載

    基于單片機的彩屏模塊(1.8寸彩屏程序-2)溫度-時鐘綜合顯示

    基于單片機的彩屏模塊(1.8寸彩屏程序-2)溫度-時鐘綜合顯示
    發(fā)表于 01-12 11:13 ?23次下載

    單片機數(shù)字時鐘溫度計鬧鐘計算器制作

    單片機數(shù)字時鐘溫度計鬧鐘 計算器制作,感興趣的小伙伴們可以看一看。
    發(fā)表于 09-12 16:55 ?0次下載

    DS1302時鐘電子表鬧鐘 旋轉(zhuǎn)LED顯示 創(chuàng)意時鐘DIY 溫度顯示報警設(shè)計

    DS1302時鐘電子表鬧鐘 旋轉(zhuǎn)LED顯示 創(chuàng)意時鐘DIY 溫度顯示報警
    發(fā)表于 01-12 16:48 ?44次下載

    如何制作一個多功能便攜時鐘?

    在2012年世界末日的最后一個情人節(jié)里,給大家展示一款純手工打造的便攜時鐘,同樣也會像以前一樣配上詳細(xì)的制作過程。有時鐘溫度、秒表等功能。當(dāng)初制作
    的頭像 發(fā)表于 08-10 17:29 ?5652次閱讀
    如何<b class='flag-5'>制作</b>一個多功能便攜<b class='flag-5'>時鐘</b>?

    Arduino天氣時鐘制作教程

    在本文中,我們將制作Arduino天氣時鐘,它將告訴我們時間,日期和溫度。 LM35傳感器將為我們提供溫度,DS3231將告訴我們?nèi)掌诤蜁r間,我們將使用OLED
    的頭像 發(fā)表于 08-01 11:13 ?8378次閱讀

    如何制作一個帶有溫度和濕度顯示的木質(zhì)時鐘

    你差不多了完成了!您要做的就是將溫度濕度傳感器和墻壁熱粘合。以及前面大孔的顯示和側(cè)孔的充電端口!
    的頭像 發(fā)表于 08-23 16:33 ?4288次閱讀
    如何<b class='flag-5'>制作</b>一個帶有<b class='flag-5'>溫度</b>和濕度<b class='flag-5'>顯示</b>的木質(zhì)<b class='flag-5'>時鐘</b>

    基于51單片機1602溫度顯示時鐘

    基于51單片機1602帶溫度顯示的電子時鐘要在1602上顯示時間和溫度先要了解1602是如何工作的
    發(fā)表于 11-05 14:50 ?33次下載
    基于51單片機1602<b class='flag-5'>溫度</b><b class='flag-5'>顯示</b><b class='flag-5'>時鐘</b>

    RTX51tiny 復(fù)雜應(yīng)用---時鐘溫度顯示、按鍵解析

    RTX51tiny 復(fù)雜應(yīng)用---時鐘、溫度顯示、按鍵解析
    發(fā)表于 11-21 13:06 ?25次下載
    RTX51tiny 復(fù)雜應(yīng)用---<b class='flag-5'>時鐘</b>、<b class='flag-5'>溫度</b><b class='flag-5'>顯示</b>、按鍵解析

    使用實時時鐘IC DS1307制作精確時鐘的方法

    如何使用實時時鐘 IC DS1307 制作準(zhǔn)確的時鐘。時間將顯示在液晶顯示屏上。
    的頭像 發(fā)表于 04-26 17:23 ?6646次閱讀
    使用實時<b class='flag-5'>時鐘</b>IC DS1307<b class='flag-5'>制作</b>精確<b class='flag-5'>時鐘</b>的方法

    基于51單片機時鐘溫度顯示設(shè)計

    本資源內(nèi)容概要:? ? ? ?這是基于51單片機時鐘溫度顯示設(shè)計包含了電路圖源文件(Altiumdesigner軟件打開)、C語言程序源代碼(keil軟件打開)、proteus仿真圖。本資源適合人群
    發(fā)表于 06-25 10:17 ?0次下載