一些51单片机基础模块的程序

源代码在线查看: 温度采集ds18b20lcd.lst

软件大小: 600 K
上传用户: hahuhuhuhu
关键词: 51单片机 模块 程序
下载地址: 免注册下载 普通下载 VIP

相关代码

				C51 COMPILER V7.50   温度采集DS18B20LCD                                                    04/10/2009 19:54:21 PAGE 1   
				
				
				C51 COMPILER V7.50, COMPILATION OF MODULE 温度采集DS18B20LCD
				OBJECT MODULE PLACED IN 温度采集DS18B20LCD.OBJ
				COMPILER INVOKED BY: E:\Program Files\Keil\C51\BIN\C51.EXE 温度采集DS18B20LCD.c BROWSE DEBUG OBJECTEXTEND
				
				line level    source
				
				   1          /********************************************************************
				   2          * 文件名  : 温度采集DS18B20.c
				   3          * 描述    :  该文件实现了用温度传感器件DS18B20对温度的采集,并在液晶1602
				   4                                   上显示出来。
				   5          * 创建人  : 东流,2009年4月10日
				   6          * 版本号  : 2.0
				   7          * 技术支持论坛:www.zidh.com/bbs(请进入“赞助商板块”中的“东流电子工作室”)
				   8          * 感谢“中国自动化资讯网”对本工作室的大力支持。
				   9          ***********************************************************************/
				  10          #include
				  11          #define uchar unsigned char
				  12          #define uint  unsigned int
				  13          
				  14          #define jump_ROM 0xCC
				  15          #define start 0x44
				  16          #define read_EEROM 0xBE
				  17          
				  18          sbit DQ = P3^4;            //DS18B20数据口
				  19          
				  20          unsigned char TMPH,TMPL; 
				  21          
				  22          //这三个引脚参考资料
				  23          sbit E=P2^7;            //1602使能引脚
				  24          sbit RW=P2^6;           //1602读写引脚  
				  25          sbit RS=P2^5;           //1602数据/命令选择引脚
				  26          
				  27          /********************************************************************
				  28          * 名称 : delay()
				  29          * 功能 : 延时,延时时间大概为140US。
				  30          * 输入 : 无
				  31          * 输出 : 无
				  32          ***********************************************************************/
				  33          
				  34          void delay_1()
				  35          {
				  36   1              int i,j;
				  37   1              for(i=0; i				  38   1              for(j=0; j				  39   1      ;
				  40   1      }
				  41          
				  42          /********************************************************************
				  43          * 名称 : Convert(uchar In_Date)
				  44          * 功能 : 因为电路设计时,P0.0--P0.7接法刚好了资料中的相反,所以设计该函数。
				  45          * 输入 : 1602资料上的值
				  46          * 输出 : 送到1602的值
				  47          ***********************************************************************/
				  48          uchar Convert(uchar In_Date)
				  49          {
				  50   1          uchar i, Out_Date = 0, temp = 0;
				  51   1          for(i=0; i				  52   1          {
				  53   2              temp = (In_Date >> i) & 0x01;
				  54   2              Out_Date |= (temp 				  55   2          }
				C51 COMPILER V7.50   温度采集DS18B20LCD                                                    04/10/2009 19:54:21 PAGE 2   
				
				  56   1          return Out_Date;
				  57   1      }
				  58          /********************************************************************
				  59          * 名称 : enable(uchar del)
				  60          * 功能 : 1602命令函数
				  61          * 输入 : 输入的命令值
				  62          * 输出 : 无
				  63          ***********************************************************************/
				  64          
				  65          void enable(uchar del)
				  66          {
				  67   1              P0 = Convert(del);
				  68   1              RS = 0;
				  69   1              RW = 0;
				  70   1              E = 0;
				  71   1              delay_1();
				  72   1              E = 1;
				  73   1              delay_1();
				  74   1      }
				  75          
				  76          /********************************************************************
				  77          * 名称 : write(uchar del)
				  78          * 功能 : 1602写数据函数
				  79          * 输入 : 需要写入1602的数据
				  80          * 输出 : 无
				  81          ***********************************************************************/
				  82          
				  83          void write(uchar del)
				  84          {
				  85   1              P0 = Convert(del);
				  86   1              RS = 1;
				  87   1              RW = 0;
				  88   1              E = 0;
				  89   1              delay_1();
				  90   1              E = 1;
				  91   1              delay_1();
				  92   1      }
				  93          
				  94          /********************************************************************
				  95          * 名称 : L1602_init()
				  96          * 功能 : 1602初始化,请参考1602的资料
				  97          * 输入 : 无
				  98          * 输出 : 无
				  99          ***********************************************************************/
				 100          void L1602_init(void)
				 101          {
				 102   1              enable(0x01);
				 103   1              enable(0x38);
				 104   1              enable(0x0c);
				 105   1              enable(0x06);
				 106   1              enable(0xd0);
				 107   1      }
				 108          
				 109          /********************************************************************
				 110          * 名称 : L1602_char(uchar hang,uchar lie,char sign)
				 111          * 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符显示"b" ,调用该函数如下
				 112                           L1602_char(1,5,'b')
				 113          * 输入 : 行,列,需要输入1602的数据
				 114          * 输出 : 无
				 115          ***********************************************************************/
				 116          void L1602_char(uchar hang,uchar lie,char sign)
				 117          {
				C51 COMPILER V7.50   温度采集DS18B20LCD                                                    04/10/2009 19:54:21 PAGE 3   
				
				 118   1              uchar a;
				 119   1              if(hang == 1) a = 0x80;
				 120   1              if(hang == 2) a = 0xc0;
				 121   1              a = a + lie - 1;
				 122   1              enable(a);
				 123   1              write(sign);
				 124   1      }
				 125          
				 126          /********************************************************************
				 127          * 名称 : L1602_string(uchar hang,uchar lie,uchar *p)
				 128          * 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符开始显示"ab cd ef" ,调用该函数如下
				 129                           L1602_string(1,5,"ab cd ef;")
				 130          * 输入 : 行,列,需要输入1602的数据
				 131          * 输出 : 无
				 132          ***********************************************************************/
				 133          void L1602_string(uchar hang,uchar lie,uchar *p)
				 134          {
				 135   1              uchar a;
				 136   1              if(hang == 1) a = 0x80;
				 137   1              if(hang == 2) a = 0xc0;
				 138   1              a = a + lie - 1;
				 139   1              enable(a);
				 140   1              while(1)
				 141   1              {
				 142   2                      if(*p == '\0') break;
				 143   2                      write(*p);
				 144   2                      p++;
				 145   2              }
				 146   1      }
				 147          
				 148          /********************************************************************
				 149          * 名称 : delay()
				 150          * 功能 : 延时函数
				 151          * 输入 : 无
				 152          * 输出 : 无
				 153          ***********************************************************************/
				 154          void delay(uint N)
				 155          {
				 156   1              int i;
				 157   1              for(i=0; i				 158   1              ;
				 159   1      }
				 160          
				 161          /********************************************************************
				 162          * 名称 : Reset()
				 163          * 功能 : 复位DS18B20
				 164          * 输入 : 无
				 165          * 输出 : 无
				 166          ***********************************************************************/
				 167          uchar Reset(void)
				 168          {
				 169   1              uchar deceive_ready;
				 170   1              DQ = 0;
				 171   1              delay(29);
				 172   1              DQ = 1;
				 173   1              delay(3);
				 174   1              deceive_ready = DQ;
				 175   1              delay(25);
				 176   1              return(deceive_ready);
				 177   1      }
				 178          
				 179          /********************************************************************
				C51 COMPILER V7.50   温度采集DS18B20LCD                                                    04/10/2009 19:54:21 PAGE 4   
				
				 180          * 名称 : read_bit()
				 181          * 功能 : 从DS18B20读一个位值
				 182          * 输入 : 无
				 183          * 输出 : 从DS18B20读出的一个位值
				 184          ***********************************************************************/
				 185          uchar read_bit(void)
				 186          {
				 187   1              uchar i;
				 188   1              DQ = 0;
				 189   1              DQ = 1;
				 190   1              for(i=0; i				 191   1              return(DQ);
				 192   1      }
				 193          
				 194          /********************************************************************
				 195          * 名称 : write_bit()
				 196          * 功能 : 向DS18B20写一位
				 197          * 输入 : bitval(要对DS18B20写入的位值)
				 198          * 输出 : 无
				 199          ***********************************************************************/
				 200          void write_bit(uchar bitval)
				 201          {
				 202   1      DQ=0;if(bitval==1)
				 203   1      DQ=1;
				 204   1      delay(5);
				 205   1      DQ=1;
				 206   1      }
				 207          
				 208          /********************************************************************
				 209          * 名称 : read_byte()
				 210          * 功能 : 从DS18B20读一个字节
				 211          * 输入 : 无
				 212          * 输出 : 从DS18B20读到的值
				 213          ***********************************************************************/
				 214          uchar read_byte(void)
				 215          {
				 216   1              uchar i,m,receive_data;
				 217   1              m = 1;
				 218   1              receive_data = 0;
				 219   1              for(i=0; i				 220   1              {
				 221   2                      if(read_bit())
				 222   2                      {
				 223   3                              receive_data = receive_data + (m 				 224   3                      }
				 225   2                      delay(6);
				 226   2              }
				 227   1              return(receive_data);
				 228   1      }
				 229          
				 230          /********************************************************************
				 231          * 名称 : write_byte()
				 232          * 功能 : 向DS18B20写一个字节
				 233          * 输入 : val(要对DS18B20写入的命令值)
				 234          * 输出 : 无
				 235          ***********************************************************************/
				 236          void write_byte(uchar val)
				 237          {
				 238   1              uchar i,temp;
				 239   1              for(i=0; i				 240   1              {
				 241   2                      temp = val >> i;
				C51 COMPILER V7.50   温度采集DS18B20LCD                                                    04/10/2009 19:54:21 PAGE 5   
				
				 242   2                      temp = temp & 0x01;
				 243   2                      write_bit(temp);
				 244   2                      delay(5);
				 245   2              }
				 246   1      }
				 247          
				 248          
				 249          /********************************************************************
				 250          * 名称 : Main()
				 251          * 功能 : 主函数
				 252          * 输入 : 无
				 253          * 输出 : 无
				 254          ***********************************************************************/
				 255          void main()
				 256          {
				 257   1              float tt;
				 258   1              uint temp;
				 259   1              P2 = 0x00;
				 260   1              L1602_init();
				 261   1              L1602_string(1,1,"  DS18B20 TEST  ");
				 262   1              L1602_string(2,1,"Temperature:00`C");
				 263   1              while(1)
				 264   1              {
				 265   2                      Reset();
				 266   2                      write_byte(jump_ROM);
				 267   2                      write_byte(start);
				 268   2                      Reset();
				 269   2                      write_byte(jump_ROM);
				 270   2                      write_byte(read_EEROM);
				 271   2                      TMPL = read_byte();
				 272   2                      TMPH = read_byte();
				 273   2                      temp = TMPH;
				 274   2                      temp 				 275   2                      temp = temp | TMPL;
				 276   2                      tt = TMPL * 0.0625;
				 277   2                      temp = TMPL / 16 + TMPH * 16;
				 278   2                      L1602_char(2,13,temp/10%10 + 48);
				 279   2                      L1602_char(2,14,temp%10 + 48);  
				 280   2              }
				 281   1      }
				
				
				MODULE INFORMATION:   STATIC OVERLAYABLE
				   CODE SIZE        =    551    ----
				   CONSTANT SIZE    =     34    ----
				   XDATA SIZE       =   ----    ----
				   PDATA SIZE       =   ----    ----
				   DATA SIZE        =      2      10
				   IDATA SIZE       =   ----    ----
				   BIT SIZE         =   ----    ----
				END OF MODULE INFORMATION.
				
				
				C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)
							

相关资源