历史上的今天

今天是:2024年10月12日(星期六)

正在发生

2019年10月12日 | 分享:LCD1602温度检测显示程序(ATmega16)

发布者:吾道明亮 来源: eefocus关键字:LCD1602  温度检测  显示程序  ATmega16 手机看文章 扫描二维码
随时随地手机看文章

单片机源程序如下:


  1. //**********************************************************************//

  2. //*************************      头文件定义       **********************//

  3. //**********************************************************************//

  4. #include

  5. #include


  6. //宏定义

  7. #define uchar unsigned char

  8. #define uint unsigned int


  9. //温度18b20(数据线端口)

  10. #define tmp (PINB&BIT(PB3))

  11. #define temp_h PORTB |= BIT(PB3)

  12. #define temp_l PORTB &=~BIT(PB3)

  13. #define temp_o DDRB |= BIT(PB3)

  14. #define temp_i DDRB &=~BIT(PB3)


  15. //LCD1602液晶显示(数据线端口)

  16. #define rs_h PORTB |= BIT(PB0)//数据/命令选择

  17. #define rs_l PORTB &=~BIT(PB0)

  18. #define rw_h PORTB |= BIT(PB1)//读/写选择

  19. #define rw_l PORTB &=~BIT(PB1)

  20. #define en_h PORTB |= BIT(PB2)//使能信号

  21. #define en_l PORTB &=~BIT(PB2)


  22. //温度18b20(变量定义)

  23. unsigned char dat1=0x00;//保存读出的温度 L

  24. unsigned char dat2=0x00;//保存读出的温度 H

  25. unsigned long int dat=0;//保存读出的温度 XS

  26. unsigned char flag=0;//错误标志位

  27. //按键定义

  28. unsigned char key1=0;

  29. unsigned char key2=0;

  30. //unsigned char key3=0;

  31. //unsigned char key4=0;

  32. //返回值变量

  33. unsigned char keyvalue=0;

  34. //温度H

  35. unsigned char tempH=30;

  36. //温度L

  37. unsigned char tempL=20;


  38. //**********************************************************************//

  39. //*************************      IO 端口定义      **********************//

  40. //**********************************************************************//


  41. void IO_init(void)

  42. {          

  43.          DDRA = 0XFF;

  44.          DDRB = 0XF0;

  45.          DDRC = 0XFF;

  46.          DDRD = 0XFF; 

  47.         PORTA = 0X00;

  48.         PORTB = 0X00;

  49.         PORTC = 0XFF;

  50.         PORTD = 0XFF;

  51. }


  52. //**********************************************************************//

  53. //*************************      延时函数         **********************//

  54. //**********************************************************************//


  55. void delayms(uint z)          //8M晶振下,延时1ms

  56. {

  57.          uint x,y;

  58.          for(x=z;x>0;x--)

  59.                   for(y=1333;y>0;y--);

  60. }


  61. //**********************************************************************//

  62. //***************************      18B20        ************************//

  63. //**********************************************************************//


  64. void Ds18b20_reset(void)//DS18B20初始化

  65. {

  66.         uint count;

  67.         temp_o;

  68.         temp_l;

  69.         for(count=700;count>0;count--);//延时480us

  70.         temp_h;

  71.         temp_i;//不须配置PORT内部上拉电阻,MCU输入输出自动切换

  72.         while((tmp==0x08));//&&(i>0)) i--;

  73.         for(count=700;count>0;count--);//延时480us

  74. }

  75. void Ds18b20_write(uchar dat)//向DS18B20写一个字节

  76. {

  77.         uchar count;

  78.         uchar i;

  79.         temp_o;

  80.         for(i=8;i>0;i--)

  81.         {

  82.                 temp_l;

  83.                 for(count=2;count>0;count--);

  84.                 //temp_h;//不能有此语句

  85.                 if(dat&0x01==0x01)

  86.                         temp_h;

  87.                 else

  88.                         temp_l;

  89.                 for(count=120;count>0;count--);//延时60us

  90.                 temp_h;

  91.                 dat>>=1;        

  92.         }        

  93. }

  94. uchar Ds18b20_read(void)//从DS18B20读一个字节

  95. {

  96.         uchar i,datt;

  97.         uchar count;

  98.         for(i=8;i>0;i--)

  99.         {

  100.                 datt>>=1;

  101.                 temp_o;

  102.                 temp_l;

  103.                 for(count=2;count>0;count--);

  104.                 temp_h;//此语句必须有,参考datasheet的P15

  105.                 for(count=1;count>0;count--);

  106.                 temp_i;

  107.                 if(tmp==0x08)

  108.                         datt|=0x80;

  109.                 for(count=120;count>0;count--);        //延时60us

  110.         }

  111.         return datt;

  112. }

  113. void temp_Read(void)//温度读取

  114. {

  115.          Ds18b20_reset();//DS18B20初始化

  116.         Ds18b20_write(0xcc);//跳过ROM

  117.         Ds18b20_write(0x44);//发送温度转换命令

  118.         delayms(1000);//延时1s,等待温度转换完成

  119.         Ds18b20_reset();//DS18B20初始化

  120.         Ds18b20_write(0xcc);//跳过ROM

  121.         Ds18b20_write(0xbe);//发送读温度寄存器命令

  122.         dat1=Ds18b20_read();//读温度值的低字节

  123.         dat2=Ds18b20_read();//读温度值的高字节

  124. }

  125. void temp_display(void)//温度显示

  126. {

  127.         if(dat2>=240)//dat2温度值的高字节为1时为负温度

  128.         {

  129.                 dat=(~(dat2*256+dat1)+1)*0.625;//负温度:取反加一,保留一位小数

  130.                 flag=1;

  131.         }

  132.         else

  133.         {

  134.                 dat=(dat2*256+dat1)*0.625;

  135.                 flag=0;

  136.         }

  137.         if(flag==1)//负温度显示

  138.         {

  139.                  LCD_write_str(0,0," 18B20 ");

  140.                 LCD_write_str(3,1,"Temp:");

  141.                 LCD_write_str(8,1,"-");// 符号“- ”

  142.                 LCD_write_char(9,1,0x30+dat/1000);

  143.                 LCD_write_char(10,1,0x30+dat%1000/100);

  144.                 LCD_write_char(11,1,0x30+dat%100/10);

  145.                 LCD_write_str (12,1,".");// 符号“. ”

  146.                 LCD_write_char(13,1,0x30+dat%10);        

  147.         }

  148.         if(flag==0)//正温度显示

  149.         {           

  150.                 LCD_write_str(0,0," 18B20 ");

  151.                 LCD_write_str(3,1,"Temp:");

  152.                 LCD_write_str(8,1," ");// 符号“+ ”

  153.                 LCD_write_char(9,1,0x30+dat/1000);

  154.                 LCD_write_char(10,1,0x30+dat%1000/100);

  155.                 LCD_write_char(11,1,0x30+dat%100/10);

  156.                 LCD_write_str (12,1,".");// 符号“. ”

  157.                 LCD_write_char(13,1,0x30+dat%10);

  158.         }        

  159. }

  160. void tempH_Setting(void)//最高温度设置显示

  161. {

  162.          LCD_write_str(0,0," temp(H)Setting ");

  163.         LCD_write_char(6,1,0x30+tempH%1000/100);

  164.         LCD_write_char(7,1,0x30+tempH%100/10);

  165.         LCD_write_char(8,1,0x30+tempH%10);

  166. }

  167. void tempL_Setting(void)//最低温度设置显示

  168. {

  169.          LCD_write_str(0,0," temp(L)Setting ");

  170.         LCD_write_char(6,1,0x30+tempL%1000/100);

  171.         LCD_write_char(7,1,0x30+tempL%100/10);

  172.         LCD_write_char(8,1,0x30+tempL%10);

  173. }

  174. void temp_police(void)//温度报警

  175. {

  176.         if(dat/10>=tempH)//最高检测温度>=设定温度:灯亮

  177.         {

  178.                  PORTC&=~BIT(7);

[1] [2] [3]
关键字:LCD1602  温度检测  显示程序  ATmega16 引用地址:分享:LCD1602温度检测显示程序(ATmega16)

上一篇:AVR单片机串口USART与PC通讯实例,讲解原理和程序
下一篇:atmega128 AD 转换

推荐阅读

国庆假期的最后一天,几乎被人遗忘的“下周回国”贾跃亭又出大事了。 去年年底拯救法拉第未来于危难之中的恒大健康一纸公告揭开了两家公司之间的惊天裂痕。原来,它投资法拉第未来的 8 亿美元在今年 7 月已经被彻底“烧光”(这笔资金 5 月份才刚刚支付),而这家电动车公司依然“狮子大开口”,要求恒大健康再掏 7 亿美元。 恒大健康认为,贾跃...
据华尔街日报报道,多年来,投资者一直在期待第一代Apple 5G iPhone的到来,市场预期,苹果 将在美国时间 13 日发表最新搭载 5G 的 iPhone 12 系列,强势进军 5G 市场。根据此前的爆料, iPhone 12 系列将有四个支持5G的新型号,也许还有其他一些硬件公告。但是,最令人关注的问题却没有得到解答,特别是新手机是否会像2014年iPhone 6那样...
ROHM开发出充电控制IC“BD71631QWZ”,支持新型二次电池等低电压充电~非常适用于搭载二次电池的可穿戴设备和小而薄的物联网设备等应用~全球知名半导体制造商ROHM(总部位于日本京都市)开发出一款充电控制 IC“BD71631QWZ”,该产品支持搭载二次电池的无线耳机等可穿戴设备以及智能显示器等小而薄的物联网设备的低电压充电。新产品通过提高IC内部的电路稳...

史海拾趣

问答坊 | AI 解惑

温度传感器的设计

亲爱的兄弟姐妹们,谁有<温度传感器的设计>的大学毕业论文????大家帮帮忙啊!!!!!!!!!!!!!谢谢.了!@!!!!!!…

查看全部问答∨

matlab第三课

数组与矩阵运算 这是今天讨论的重点!…

查看全部问答∨

下班回家后,不弄技术,你能做什么?

嗨, 本来想看点电视节目的,关注关注国家大事什么的............... 但是还是习惯看看单片机论坛,查查资料什么的 ............ 我这陋习真难改...........…

查看全部问答∨

一道汇编题?

25. 内存地址是0000H,若有4KB的存储空间,其内存的最终地址是(  ). A.400H        B.FFFH         C.4FFH      D.1000H 答案是什么?为什么?请高手 ...…

查看全部问答∨

北京佳能诚聘c/c++嵌入式开发人员!

公司:佳能 职位:研发工程师 语言:c/c++ 平台:WINCE 经验:3年以上 地点:北京 有意向者,请速联系 msn:mygy2006@hotmail.com 13910500391…

查看全部问答∨

keil3上memory window 无法显示的问题

前两天你在网上下了个700多M的keil3来用!好不容易装好了发现memory window 里没法显示内存数据! 看了半天发现是字体的问题,memory window 的字体默认的是1295711,一般编译框里字体是10或0,但是没办法修改!今天弄了一天都没办法,字体太小, ...…

查看全部问答∨

wince4.2如何调用软键盘

我装了wince4.2 再装了EVC4.0 后来装了STANDARD_SDK.msi 写了个简单的hello程序 想调用SIP 头文件包含了#include "sipapi.h" 工程里添加了连接coredll.lib,调用SipShowIM(SIPF_ON); 怎么就是编译不过去 提示如下 Mystest.obj : error LNK2019 ...…

查看全部问答∨

ARM入门

我刚开始上班,好多东西都不懂,经理把板子给我了.让我自己弄. 问其他同事,他们都说忙,好郁闷呀! 主机,ARM开发板,uC OS/II,ADS1.2集成开发环境,JTAG仿真器.都有了. 我下一步该做什么. 是不是安装uC OS/II,然后在上面编程序. 我以前从来没有接触 ...…

查看全部问答∨

STM32的UART竟然不支持7Bit传输...

STM32 只能设置8,9位的方式。LPC ARM可以支持5,6,7,8位。工控中常用的 9600,E,7,1 就用不了吗?…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved