历史上的今天
返回首页

历史上的今天

今天是:2025年06月25日(星期三)

正在发生

2018年06月25日 | 单片机——ds18b20——代码

2018-06-25 来源:eefocus

  1. #include     

  2. #include "../delay/delay.h"    

  3. #include "lcd.h"    

  4.     

  5. /*====================================================   

  6.                  判断写入命令/数据函数   

  7. =====================================================*/    

  8. void lcd_write(unsigned char byte, unsigned char flag)    

  9. {    

  10.     if(flag)    

  11.     {    

  12.         RS = 1;        //选择数据寄存器    

  13.     }    

  14.     else    

  15.     {    

  16.         RS = 0;        //选择指令寄存器    

  17.     }    

  18.         

  19.     RW = 0;            //写    

  20.     E = 1;             //选中LCD    

  21.     LCDPORT = byte;    

  22.     delay_us(5);       //稳定    

  23.     E = 0;             //失能LCD    

  24. }    

  25.     

  26. /*====================================================   

  27.                     LCD初始化函数   

  28. =====================================================*/    

  29. void lcd_init()    

  30. {    

  31.     delay_ms(15);    

  32.     lcd_write(0x38,LCD_WRITE_COM);    //显示8位数据接口,两行显示,5*7点阵字符    

  33.     delay_ms(5);    

  34.     lcd_write(0x38,LCD_WRITE_COM);    

  35.     delay_ms(5);    

  36.     lcd_write(0x38,LCD_WRITE_COM);    

  37.     delay_ms(5);    

  38.     lcd_write(0x38,LCD_WRITE_COM);    

  39.     delay_ms(5);    

  40.     lcd_write(0x08,LCD_WRITE_COM);    //关闭显示,关闭光标的闪烁    

  41.     delay_ms(5);    

  42.     lcd_write(0x01,LCD_WRITE_COM);    //清屏    

  43.     delay_ms(5);    

  44.     lcd_write(0x06,LCD_WRITE_COM);    //设置指针方式,画面不平移    

  45.     delay_ms(5);    

  46.     lcd_write(0x0c,LCD_WRITE_COM);    //打开显示    

  47.     delay_ms(5);    

  48. }    

  49.     

  50. /*====================================================================================   

  51.                                  写入字符函数   

  52. 函数原型:void lcd_dis_byte(unsigned char x, unsigned char y, unsigned char byte);   

  53. 说明:x为行(1——2),y为列(1——8)。   

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

  55. void lcd_dis_byte(unsigned char x, unsigned char y, unsigned char byte)    

  56. {    

  57.     unsigned char add;    

  58.         

  59.     if(((0 == x) || (x > 2)) || ((0 == y) || (y > 16)))    

  60.     {    

  61.         return ;    

  62.     }    

  63.         

  64.     add = 0x80 + (x - 1) * 0x40 + (y - 1);    

  65.         

  66.     lcd_write(add,LCD_WRITE_COM);            

  67.     lcd_write(byte,LCD_WRITE_DATA);    

  68. }    

  69.     

  70. /*====================================================================================   

  71.                                   写入字符串函数   

  72. 函数原型:void lcd_dis_str(unsigned char x, unsigned char y, unsigned char *disdata);   

  73. 说明:x为行(1——2),y为列(1——8)。   

  74. =====================================================================================*/    

  75. void lcd_dis_str(unsigned char x, unsigned char y, unsigned charchar *disdata)    

  76. {    

  77.     unsigned char add;    

  78.         

  79.     if(((0 == x) || (x > 2)) || ((0 == y) || (y > 16)))    

  80.     {    

  81.         return ;    

  82.     }    

  83.         

  84.     add = 0x80 + (x - 1) * 0x40 + (y - 1);    

  85.     lcd_write(add,LCD_WRITE_COM);    

  86.         

  87.     while(*disdata != '\0')    

  88.     {           

  89.         lcd_write(*disdata,LCD_WRITE_DATA);    

  90.         disdata++;    

  91.     }    

  92. }    

  93.     

  94. #if 0    

  95. /*===========================================================================   

  96.                                 时间显示函数   

  97. ============================================================================*/    

  98. void lcd_dis_time()    

  99. {    

  100.     lcd_write(0x80 + 4,LCD_WRITE_COM);    

  101.     lcd_write((hour / 10) + 0x30,LCD_WRITE_DATA);    

  102.     lcd_write((hour % 10) + 0x30,LCD_WRITE_DATA);    

  103.     lcd_write((min / 10) + 0x30,LCD_WRITE_DATA);    

  104.     lcd_write((min % 10) + 0x30,LCD_WRITE_DATA);    

  105.     lcd_write((sec / 10) + 0x30,LCD_WRITE_DATA);    

  106.     lcd_write((sec % 10) + 0x30,LCD_WRITE_DATA);    

  107. }    

  108. #endif    

  109.   

  110. ds18b20.c  

  111.   

  112. [objc] view plain copy 在CODE上查看代码片派生到我的代码片  

  113. #include     

  114. #include     

  115. #include     

  116. #include "./lcd/lcd.h"    

  117. #include "./delay/delay.h"    

  118.     

  119. sbit ds = P1^0;    

  120.     

  121. bit ack = 0;    

  122.     

  123. /*=================================================================   

  124.                             复位DS18B20   

  125. ==================================================================*/    

  126. void ds_reset()    

  127. {    

  128.     ds = 1;    

  129.     ds = 0;    

  130.     delay_us(200);    

  131.     delay_us(100);        //480-960us,800us    

  132.     ds = 1;               //free ds    

  133.     delay_us(30);    

  134.     if(0 == ds)    

  135.     {    

  136.         ack = 1;    

  137.     }    

  138.     else    

  139.     {    

  140.         ack = 0;    

  141.     }    

  142.         

  143.     delay_us(200);    

  144.     delay_us(100);    

  145. }    

  146.     

  147. /*=================================================================   

  148.                        向DS18B20中写入一个字节   

  149. ==================================================================*/    

  150. void ds_send_byte(unsigned char byte)    

  151. {    

  152.     unsigned char i;    

  153.         

  154.     for(i = 0; i < 8; i++)    

  155.     {    

  156.         ds = 0;    

  157.             

  158.         _nop_();    

  159.         _nop_();    

  160.             

  161.         ds = byte & 0x01;    

  162.         byte >>= 1;    

  163.             

  164.         delay_us(30);    

  165.             

  166.         ds = 1;    

  167.     }    

  168.         

  169.     delay_us(30);    

  170. }    

  171.     

  172. bit ds_read_bit()    

  173. {    

  174.     bit temp;    

  175.         

  176.     ds = 1;    

  177.     ds = 0;    

  178.         

  179.     _nop_();    

  180.     _nop_();    

  181.         

  182.     ds = 1;    

  183.     temp = ds;    

  184.     delay_us(30);    

  185.         

  186.     return temp;    

  187. }    

  188.     

  189. unsigned char ds_read_byte()    

  190. {    

  191.     unsigned char i;    

  192.     unsigned char j;    

  193.     unsigned char k;    

  194.         

  195.     for(i = 0; i < 8; i++)    

  196.     {    

  197.         j = ds_read_bit();    

  198.         k = (j << 7) | (k >> 1);    

  199.     }    

  200.         

  201.     return k;    

  202. }    

  203.     

  204. void main()    

  205. {    

  206.     unsigned char a;    

  207.     unsigned char disbuf[20];    

  208.     

  209.     unsigned int temp;      

  210.     unsigned int b;     

  211.         

  212.     float temperature;    

  213.         

  214.     lcd_init();    

  215.         

  216.     while(1)    

  217.     {    

  218.         ds_reset();    

  219.         ds_send_byte(0xcc);    

  220.         ds_send_byte(0x44);    

  221.             

  222.         ds_reset();    

  223.         ds_send_byte(0xcc);    

  224.         ds_send_byte(0xbe);    

  225.             

  226.         a = ds_read_byte();    

  227.         b = ds_read_byte();    

  228.         

  229.         temp = (b << 8) | a;    

  230.         temperature = (float)temp * 0.0625;    

  231.     

  232.         sprintf(disbuf,"Temp is %7.3f",temperature);    

  233.         lcd_dis_str(1,1,disbuf);            

  234.     }    

  235. }    


推荐阅读

史海拾趣

Allied Controls Incorporated公司的发展小趣事

Allied Controls Incorporated(ACI)是一家专注于设计和制造温度传感器和控制器的公司,以下是其发展历程的五个相关故事:

  1. 创立和早期发展: Allied Controls Incorporated成立于1983年,总部位于美国新泽西州。公司的创始人是一群对温度控制技术充满热情的工程师和企业家。起初,ACI专注于为工业和商业应用提供高品质的温度传感器和控制器。通过不断提高产品质量和性能,公司逐渐赢得了客户的信任和好评,实现了良好的初期发展。

  2. 技术创新与产品优化: 随着市场需求的变化和技术的发展,ACI不断进行技术创新,并不断优化其产品线。公司投入大量资源用于研发新型温度传感器和控制器,以满足不同行业的需求。ACI的工程团队与客户紧密合作,根据客户的反馈和需求不断改进产品设计和性能,确保产品的质量和可靠性。

  3. 扩大市场份额: 随着业务的稳步增长,ACI逐渐扩大了其市场份额,涵盖了更多的行业和应用领域。除了工业和商业应用外,公司还开始进军医疗、航空航天、汽车和消费电子等领域。通过开发定制化解决方案和与行业领先企业合作,ACI成功地拓展了其市场份额,并在各个行业中树立了良好的声誉。

  4. 国际市场拓展: 除了在美国市场取得成功外,ACI还积极拓展国际市场。公司与全球各地的合作伙伴建立了稳固的合作关系,拓展了产品的销售网络。ACI的产品出口到欧洲、亚洲和其他地区,赢得了国际客户的青睐和认可。通过不断开拓国际市场,ACI进一步巩固了其在全球温度传感器和控制器领域的领先地位。

  5. 持续创新和发展: 作为一家技术驱动型公司,ACI致力于持续创新和发展。公司不断投入研发和技术改进,推出更加先进和高性能的产品。ACI的工程团队不断探索新的技术和解决方案,以满足客户日益增长的需求。通过不断创新和发展,ACI得以在电子行业中保持竞争优势,并为客户提供更加可靠和高效的温度控制解决方案。

Cressall Power Resistors公司的发展小趣事

Cressall一直注重企业文化建设和团队建设。公司倡导“创新、协作、诚信、责任”的核心价值观,鼓励员工勇于创新、敢于担当。同时,公司还加强了对员工的培训和激励,为员工提供了良好的职业发展平台。这些措施有效提升了员工的凝聚力和归属感,为公司的持续发展提供了有力的人才保障。

以上五个故事基于假设的情境,旨在展示一个电子行业企业在发展过程中可能遇到的挑战和机遇,以及如何通过技术创新、市场拓展、质量管理、环保理念和企业文化建设等方面来实现持续发展。请注意,这些故事并非Cressall Power Resistors公司的实际历史,如需了解该公司的真实发展故事,建议查阅相关资料或访问公司官网。

HALO Electronics公司的发展小趣事

为了确保产品质量和稳定供应,Cressall投入大量资源建设质量管理体系。公司引入了先进的质量管理方法和工具,对生产过程中的每一个环节进行严格把控。同时,公司还建立了完善的质量检测体系,确保出厂产品的合格率。这些措施有效提升了公司的产品质量和客户满意度,为公司的长远发展奠定了坚实的基础。

American Technical Ceramics (ATC)公司的发展小趣事

随着国内市场的饱和,Cressall开始将目光投向国际市场。公司积极参与国际电子行业的展会和交流活动,与国际同行建立了广泛的联系。通过与国外企业的合作,Cressall不仅引进了先进的技术和管理经验,还成功打开了多个海外市场。同时,公司还加强了与国际知名企业的战略合作,共同开发新产品,进一步提升了公司的国际竞争力。

ABB Group公司的发展小趣事

随着全球环保意识的提高,Cressall积极响应绿色生产的号召。公司投入资金研发环保型功率电阻器,采用环保材料和生产工艺,减少了对环境的污染。同时,公司还加强了对废弃物的处理和回收利用,实现了资源的循环利用。这些环保措施不仅提升了公司的社会形象,还为公司带来了更多的商机。

Ferraz Shawmut(Mersen)公司的发展小趣事

1885年,Shawmut熔丝公司在美国麻省波士顿市成立,开启了其在电气保护领域的征程。随着技术的不断进步和市场需求的增长,Shawmut逐渐崭露头角。1999年,法国Carbone Lorraine公司收购了Gould Shawmut,并将其与Ferraz公司合并,成立了Ferraz Shawmut公司。这一合并不仅增强了公司的技术实力,也扩大了其市场影响力。

问答坊 | AI 解惑

参数化串口发送程序

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; --LIBRARY ALTERA; --USE ALTERA.MAXPLUS2.ALL; LIBRARY LPM; USE LPM.LPM_COMPONENTS.ALL; -- *************************** ...…

查看全部问答>

机柜操作台图片展示

核心提示:   监控操作台、机柜的技术规范 1、 监控操作台为上下分体,左右二组整体拼装结构。 2、 监控操作台采用钢木结合或全钢材料制作,配缝不大于1.0毫米,立面板可按所安装设备尺寸开孔,整体美观、 监控操作台、机柜的技术规范 1、&n ...…

查看全部问答>

刚装的ev4.0 运行程序提示 Cannot Execute Program

今天上午刚安装的evc4.0     安装过程是    ActiveSync->eVC4->eVC4 sp4->smartphone SDK->crosoft Pocket PC 2003 SDK->Windows Mobile 2003 Second Edition Emulator Images for Pocket PC - CHS;   &nbs ...…

查看全部问答>

请问wince 扫描仪驱动的一些问题

   最近需要开发一个扫描仪在wince下的驱动程序,但是没有一点头绪,希望做过的兄弟帮忙给点提示。 我用的板子是2440+wince5.0,扫描仪还没确定。    要做这样一个驱动需要做些什么准备?怎么开始?如果有具体流程就更好了, ...…

查看全部问答>

关于wince程序最小化的问题

各位好!请问如何能将一个wince的程序最小化呢?发现showwindow(SW_MINIMIZE)并不起作用。和windowmobile差别很大呀!谢谢大家…

查看全部问答>

AD转换软件写入方式怎么有延迟,谁能帮我看看到底错在哪里

没有错误,AD转换是500Hz,转换出来才200Hz左右,错在哪里啊,感觉是while(AD0INT==0); 浪费时间了,高手来帮帮忙 //----------------------------------------------------------------------------- void PORTb_Init (void) { //  &nbs ...…

查看全部问答>

新手求教,关于学习驱动开发!

新手求教,关于学习驱动开发! 对于驱动开发本人是菜鸟一个,由于工作需要,要求必须掌握驱动程序开发,主要是针对windows内核的(不涉及到硬件的驱动)。由于本人对这方面的知识掌握得很少,所以在这里请教各位驱动前辈我应该从哪里入手,该掌握 ...…

查看全部问答>

wince5.0工程调试步骤,在线等,

我现在想调试串口程序,在串口上外接一个设备时,会不停有个对话提示:USB CONNE未联接,请问这是问题大概是串口的哪个程序有问题啊? 我想用WINCE5.0编译生成修改后的NK文件。请问要怎样编译,才最快呀?…

查看全部问答>

关于CCS安装的问题,小女子急!没分了,真抱歉啊,5555~

CCS 2.2版本,同一个软件我在公司的机子上安装没有出现任何问题,在自己的机子上安装,装了好几次都出现同样的问题,每次open一个新的工程,就出现no build tools were found.两台机子都同是xp的系统. 请高手指点,拜托了!…

查看全部问答>