找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3396|回复: 1
打印 上一主题 下一主题
收起左侧

LED和LCD显示测量温度C程序

[复制链接]
跳转到指定楼层
楼主
ID:76127 发表于 2015-4-5 01:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

  1. //说明:本程序用的延时程序部分,都是用示波器精确的测试所得的数据.
  2. #include<reg52.h>
  3. #define uchar unsigned char
  4. sbit DQ=P3^5;
  5. sbit D1=P0^1;
  6. sbit D2=P0^2;
  7. sbit D3=P0^3;
  8. ///////////////LCD1602/////
  9. sbit RS=P0^5;
  10. sbit RW=P0^6;
  11. sbit YE=P0^7;
  12. /////////////////////////////////////////////////////////////
  13. uchar code table[]={0xc0,0xf9,0xa4,0xb0,//0,1,2,3
  14.           0x99,0x92,0x82,0xf8,//4,5,6,7
  15.           0x80,0x90,0xfe};//8,9,.,段码表
  16. /////////////////////////////////////////////////////////////
  17. uchar code table1[] ={"0123456789"};
  18. uchar code table2[] ={" Temperature="};
  19. uchar code table3[] ={"  www.51hei.com "};
  20. /////////////////////////////////////////////////////////////
  21. void delay(unsigned int us)
  22. {
  23. while(us--);
  24. }
  25. ////////////////////////////////////////////
  26. void delay2()
  27.   {
  28.    RS=0;
  29.    RW=0;
  30.    YE=0;
  31.    delay(50);
  32.    YE=1;
  33.   }
  34. /***************************************************************/
  35. void reset()// DS18B20复位OK
  36. {
  37. uchar x=0;
  38. DQ=1;
  39. delay(8);
  40. DQ=0;
  41. delay(330);
  42. DQ=1;
  43. delay(100);
  44. x=DQ;
  45. delay(20);
  46. }
  47. ////////////////////////////////////////////从DS18B20读一字节
  48. uchar readbyte()
  49. {
  50. uchar i=0;
  51. uchar dat=0;
  52. for(i=8;i>0;i--)
  53. {
  54.   DQ=0;
  55.   dat>>=1;
  56.   DQ=1;
  57.   if(DQ)
  58.   dat|=0x80;
  59.   delay(27);//41us
  60. }
  61.   return(dat);
  62. }
  63. /////////////////////////////////////////////向DS18B20写一字节
  64. void writebyte(unsigned char dat)
  65. {
  66. uchar i=0;
  67. for(i=8;i>0;i--)
  68. {
  69.   DQ=0;
  70.   DQ=dat&0x01;
  71.   delay(8);
  72.   if(DQ==0)
  73.      {
  74.      delay(27);//41us
  75.      DQ=1;
  76.    }
  77.   else
  78.    {
  79.     DQ=1;
  80.     delay(27);//41us
  81.      }
  82.         dat>>=1;
  83. }
  84. }
  85. ////////////////////////////////////////////MCU读取温度值
  86. uchar readtemp()
  87. {
  88. uchar a=0;
  89. uchar b=0;
  90. reset();
  91. writebyte(0xcc);
  92. writebyte(0x44);
  93. reset();
  94. writebyte(0xcc);
  95. writebyte(0xbe);
  96. a=readbyte();
  97. b=readbyte();
  98. ////////////////////////
  99. b<<=4;
  100. b+=(a&0xf0)>>4;
  101. return(b);
  102. }
  103. //////////////////////////////////////////LED数码管显示程序
  104. void shanshi(uchar dat)
  105. {
  106. uchar a,b;
  107. a=dat/10;
  108. b=dat%10;
  109. ////////////
  110. D1=0;
  111. D2=1;
  112. P1=table[a];
  113. delay(1000);
  114. P1=0xff;
  115. delay(1000);
  116. /////////////////
  117. D1=1;
  118. D2=0;
  119.   P1=table[b];
  120. delay(1000);
  121. P1=0xff;
  122. delay(1000);
  123. }
  124. /******************LCD1602液晶显示****************************/
  125. void LCD1602(uchar dd)
  126. {
  127.    uchar e,f,i,nem,t;
  128.    e=dd/10;
  129.    f=dd%10;
  130. //////////////////////
  131.    P2=0x01; //清屏
  132.    delay2();
  133.    P2=0x38; //显示设定两行
  134.    delay2();
  135.    P2=0x0f;  //打开显示和光标
  136.    delay2();
  137.    P2=0x06;  //光标右移
  138.    delay2();
  139.    P2=0x80;  //光标回到第一行的开头
  140.    delay2();
  141. ///////////////////////
  142.    for(nem=0;nem<13;nem++)
  143.      {  
  144.     P2=table2[nem];
  145.     RS=1;
  146.     RW=0;
  147.     YE=0;
  148.       delay2();
  149.    }
  150. //////////////////////////////////////
  151.    for(t=0;t<1;t++)
  152.      {
  153.     P2=table1[e];
  154.     RS=1;
  155.     RW=0;
  156.     YE=0;
  157.     P2=0x06;  //光标右移
  158.      delay2();
  159. ////////////////////////
  160.     P2=table1[f];
  161.     RS=1;
  162.     RW=0;
  163.     YE=0;
  164.    }
  165. //////////////////////////////////////
  166.     P2=0xc0;
  167.     delay2();
  168.   for(i=0;i<16;i++)
  169.      {  
  170.     P2=0xc0;
  171.     delay2();
  172.     P2=table3[i];
  173.     RS=1;
  174.     RW=0;
  175.     YE=0;
  176.    }
  177. }
  178. ////////////////////////////////////////////主函数
  179. void main()
  180. {
  181. uchar temp;
  182. while(1)
  183. {
  184.   temp=readtemp();
  185.   shanshi(temp);
  186.    delay(10);
  187.   LCD1602(temp);
  188. }
  189. }
复制代码





分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:190929 发表于 2017-4-27 09:45 | 只看该作者
有帮助,先谢过
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表