历史上的今天
返回首页

历史上的今天

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

正在发生

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

2019-10-12 来源:eefocus

单片机源程序如下:


  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);

推荐阅读

史海拾趣

倍思特(BEST)公司的发展小趣事

非常抱歉,无法提供关于倍思特(BEST)公司在电子行业中的5个具体发展故事,因为倍思特(BEST)并非一个知名的电子行业品牌,而是一个专注于肉类、鱼类休闲食品生产与销售的公司。不过,我可以为你提供关于倍思特(BEST)食品公司发展的几个关键事实。

首先,倍思特食品(苏州)有限公司(原苏州唯葑食品有限公司)成立于1993年8月,坐落于风景如画的苏州。经过数十年的发展,公司已经成为肉类、鱼类休闲食品领域的佼佼者,产品深受国内外消费者喜爱。

其次,倍思特(BEST)品牌凭借其卓越的产品质量和创新的市场策略,在竞争激烈的市场中脱颖而出。公司不仅注重产品的研发与创新,还致力于提升生产效率和质量控制,确保每一款产品都能达到消费者的期待。

此外,倍思特(BEST)还积极拓展销售渠道,通过线上线下相结合的方式,将产品推向更广阔的市场。同时,公司还积极参与各类行业展会和交流活动,与业内同行分享经验、学习新知,不断提升自身的竞争力。

至于倍思特(BEST)在电子行业中的发展情况,目前尚无法提供相关信息。因为根据我所掌握的知识,倍思特(BEST)并非电子行业的品牌,因此无法给出其在该领域的发展故事。

总的来说,倍思特(BEST)食品公司以其优质的产品、创新的市场策略以及高效的运营管理,在食品行业取得了显著的成绩。然而,关于倍思特(BEST)在电子行业中的发展情况,目前仍是一个未知数。如需了解更多关于倍思特(BEST)的信息,建议查阅相关公司的官方网站或行业报告。

AND Displays公司的发展小趣事

AND Displays公司自成立以来,一直致力于显示技术的研发与创新。在早期阶段,公司团队就针对当时市场上显示面板的缺陷,进行了一系列技术攻关。经过数年的努力,AND Displays成功开发出了一种新型显示技术,该技术在色彩还原、对比度和响应速度等方面均表现出色,迅速获得了市场的认可。此后,公司不断推出创新产品,满足了消费者对高质量显示面板的日益增长的需求,逐渐在电子行业中崭露头角。

顺芯(Everest-semi)公司的发展小趣事

为了进一步提升公司的国际竞争力,顺芯公司积极开展国际合作与全球布局。公司与国际知名半导体厂商建立了战略合作关系,共同研发新产品、开拓新市场。同时,顺芯公司还在海外设立了研发中心和销售中心,以便更好地服务全球客户。这些举措使顺芯公司的全球市场份额逐年提升,成为了国际半导体行业的重要力量。

CTC Coils Ltd公司的发展小趣事

面对日益严峻的环境问题,CTC Coils Ltd公司积极响应国家绿色发展的号召,开始实施绿色环保战略。公司引进先进的生产设备和工艺,优化生产流程,减少能源消耗和废物排放。同时,公司还研发出了一系列环保型电感线圈产品,满足了市场对绿色电子产品的需求。

GardTec Inc公司的发展小趣事

背景:GardTec Inc公司,成立于1987年(也有资料显示为1985年),自创立之初便确立了成为全球风扇配件产品第一供应商的目标。这一明确的定位为公司后续的发展奠定了坚实的基础。

发展:在创立初期,GardTec专注于风扇配件的研发与生产,通过技术创新和品质提升,逐渐在行业内崭露头角。公司利用现代化的制造和工程设施,不断突破设计与材料的限制,推出了一系列具有创新性的风扇配件产品。

影响:随着产品质量的提升和市场份额的扩大,GardTec逐渐在电子行业中建立了良好的口碑,为后续的快速发展奠定了基础。

Helicomm公司的发展小趣事

背景:为了满足全球客户的需求,GardTec开始实施全球化战略,在亚洲和美国等地设立全球制造厂和库存地。

发展:通过在全球范围内的战略布局,GardTec不仅提升了产品的供应效率,还更好地服务了世界各地的客户。公司的全球化布局进一步巩固了其在风扇配件市场的领先地位。

影响:全球化战略的实施,使得GardTec的产品能够迅速响应市场变化,满足不同地区客户的多样化需求,从而增强了公司的市场竞争力。

问答坊 | AI 解惑

想买块FPGA板,推荐一下呗!

大家好,本人今年要参加全国电子设计竞赛,各位大哥哥大姐姐谁有相关的板子卖给小弟!不胜感激!FPGA板要求:板子要精炼,不需要太多花俏的东西例如数码管什么的,只要把线全部引出了即可,支持JTAG下载!芯片最好clylone!! 不是也没关系! ...…

查看全部问答>

Spartan-6 and Virtex-6 FPGA Embedded Kit FAQ

1. Where can I purchase an Embedded kit?   2. How much do the Spartan-6 and Virtex-6 FPGA Embedded Kits cost? 3. When will I get my kit? 4. What are included in the Embedded Kits? 5. What expansion ports are avail ...…

查看全部问答>

你正在使用什么单片机?

[ 本帖最后由 飞嵌电子 于 2010-7-8 15:48 编辑 ]…

查看全部问答>

驱动无法加载到Device.EXE

注册表已经写入成功了,但是dll文件没加入到device.EXE   这是 什么问题了?…

查看全部问答>

SD卡等存储设备突然掉电后不可用的原因求助

是BPB还是FAT或FDT的损坏? 除了硬件损坏,文件系统突然断电会有什么样的写入错误造成存贮设备不可用吗? 一般的文件系统如果是先写数据,再记录FAT和FDT会提高保护的可能性吗。…

查看全部问答>

请问要从支持HL7协议的病人监护仪的网口读出数据和波形,谁会做?报酬详谈

请问要从支持HL7协议的病人监护仪的网口读出数据和波形,谁会做?报酬详谈 QQ:312969842…

查看全部问答>

大哥大姐们求助!!!!

我用的NCP14025V的升压芯片但是纹拨太大,求教怎么解决啊,或者推荐别的芯片,实在不行我想把3.3V升压到7,8V再用别的芯片降到5V不知道可行否;…

查看全部问答>

急急急,SOS!!!!

急求在ccs环境下ucosii移植到5402的源代码(不用修改的)。。。。。。。…

查看全部问答>

利用6517A对惰性气体或高真空中的小型晶体高值电阻测量的典型误差来源

屏蔽与防护 为了降低静电干扰,利用具有地电位的导体包围样本和线缆(屏蔽)。 为了防止漏电流影响测量,利用具有同样电势的导体对至静电计[1]输入端的连接进行包围(防护)。测量电流时,需要将防护装置连接至电压源的LO端。 在高真空系统( ...…

查看全部问答>

电源管理中ECO是神马意思?

最近在看一份富士通半导体的产品选型文件中出现的名词ECO不解,在百度上找到的结果是:Engineering Change Order。还有的说是在与环保相关的概念和资料中,ECO 是ECOLOGICAL的缩写,用来表示生态环保的意思。小弟就是想知道ECO到底是个什么技术?还 ...…

查看全部问答>