⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 14-2.lst

📁 《单片机C语言编程与实例》的代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V6.20c  14_2                                                                  09/02/2001 15:14:51 PAGE 1   


C51 COMPILER V6.20c, COMPILATION OF MODULE 14_2
OBJECT MODULE PLACED IN 14-2.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 14-2.c DEBUG OBJECTEXTEND

stmt level    source

   1          #include <reg51.h>
   2          #include <intrins.h>
   3          
   4          sbit  RST   = P2^0;
   5          sbit  CLK   = P2^1;
   6          sbit  DQ    = P2^2;
   7          sbit  TSOR  = P2^3;
   8          sbit  ALERT =P2^4;
   9          sbit  RS    = P2^7;
  10          sbit  RW    = P2^6;
  11          sbit  EN    = P2^5; 
  12          /*------------------------------------------全局变量------------------------------------------------------
             --*/
  13          static unsigned char temp1,temp2;         //温度值的整数部分、小数部分
  14          static unsigned char pos,posset;          	//数字电位器电位值、设定值
  15          static unsigned char min,sec;             	//分钟、秒
  16          static unsigned char count;               	//Timer0中断计数
  17          static unsigned char minset;              	//设定的分钟数
  18          static unsigned char status1,status2;		//状态标志
  19          bit   stop,timeover;					//定时停止、结束
  20          static char line0[] ="     00:00      ";
  21          static char line1[] ="   . C         W";
  22          
  23          /*--------------------------------------------------------------------------------------------------------
             ------*/
  24          void          InitInterupt();
  25          void          KeyboardDelay();
  26          /*-------------------------------------------LCD驱动函数------------------------------------------------*/
  27          void          DelayL();
  28          void 		  DelayS();
  29          void 		  WriteCommand(unsigned char c);
  30          void 		  WriteData(unsigned char c);
  31          void 		  ShowChar(unsigned char pos,unsigned char c);
  32          void 		  ShowString(unsigned char line,char *ptr);
  33          void 		  InitLcd();
  34          /*----------------------------------------------键盘-程序-------------------------------------------------
             --*/
  35          unsigned char GetKey();
  36          /*---------------------------------------------数字温度计驱动-------------------------------------------*/
  37          void          ChangePos(bit sel,unsigned char pos1,unsigned char pos2);
  38          /*------------------------------------------温度传感器驱动----------------------------------------------*/
  39          void          Delay15();
  40          void          Delay60();
  41          void          Delay100ms();
  42          void          Write0TS();
  43          void          Write1TS();
  44          bit           ReadTS();
  45          void          ResetTS();
  46          void          WriteByteTS(unsigned char byte);
  47          unsigned char  ReadByteTS();
  48          void          InitTS();
  49          void          GetTempTS();
  50          /*-------------------------------------------------主程序-------------------------------------------------
             ---*/
  51          void main (void) {
C51 COMPILER V6.20c  14_2                                                                  09/02/2001 15:14:51 PAGE 2   

  52   1           char code str1[]  ="  Hello World!  ";
  53   1           char code str2[]  ="   2002-10-20   ";
  54   1      	 unsigned char i;
  55   1      
  56   1           SP=0x50;
  57   1      	 ALERT=0;               		//报警灯灭
  58   1      	 TSOR=1;               		//1-wire总线释放
  59   1      
  60   1           DelayL();
  61   1      	 InitLcd();            			//初始化LCD
  62   1      	 DelayL();
  63   1           ShowString(0,str1);				//启动画面
  64   1           ShowString(1,str2);
  65   1      	 for(i=0;i<15;i++)
  66   1             Delay100ms();
  67   1           InitInterupt();     				//初始化中断设置
  68   1      
  69   1           minset=10;            			//缺省定时10分钟
  70   1           posset=0;             			//缺省电位器值0
  71   1      	 min=minset;					//初始化数据
  72   1      	 pos=posset;
  73   1      	 sec=0;            
  74   1           count=0;
  75   1           P1=0xF0;
  76   1      	 status1=0;
  77   1      	 status2=0;
  78   1      	 stop=1;
  79   1      	 timeover=0;
  80   1      
  81   1           ChangePos(0,255-pos,255-pos);	   	//设置电位器
  82   1      
  83   1      	 InitTS();             			//初始化温度计
  84   1      	 while(1)						//循环显示温度值
  85   1      	 {
  86   2             GetTempTS();
  87   2      	   line1[0]=0x20;
  88   2      	   i=temp1;
  89   2      if(i>39)							//超过40摄氏度,告警灯亮
  90   2       ALERT=1;
  91   2      	   if(i>99)						//超过100摄氏度,显示温度的百位
  92   2      	   {
  93   3      	     line1[0]=0x31;    
  94   3      	     i-=100;
  95   3             }
  96   2             line1[1]=i/10+0x30; 				//显示温度的十位
  97   2      	   line1[2]=i%10+0x30; 			//显示个位
  98   2      	   line1[4]=temp2+0x30;			//显示小数位
  99   2      	   if(timeover)             		//若定时结束,则电位器缓慢复0
 100   2      	   {
 101   3         	     for(;pos>0;pos--)
 102   3      	     {
 103   4               ChangePos(0,255-pos,255-pos);	   
 104   4               _nop_();
 105   4      		 _nop_();
 106   4      	     }
 107   3      		 timeover=0;
 108   3      		 posset=0;
 109   3      	   }
 110   2             if(pos>posset)   				//若按键修改电位器位置
 111   2      	   {
 112   3      	     for(;pos>posset;pos--)			//则缓变到设定值
 113   3               {
C51 COMPILER V6.20c  14_2                                                                  09/02/2001 15:14:51 PAGE 3   

 114   4               ChangePos(0,255-pos,255-pos);	   
 115   4               _nop_();
 116   4      	     _nop_();
 117   4      	     } 
 118   3      	     ChangePos(0,255-pos,255-pos);
 119   3      	   }
 120   2      	   else if(pos<posset)   
 121   2      	   {
 122   3      	     for(;pos<posset;pos++)
 123   3               {
 124   4               ChangePos(0,255-pos,255-pos);	   
 125   4               _nop_();
 126   4      	     _nop_();
 127   4      	     } 
 128   3      	     ChangePos(0,255-pos,255-pos); 
 129   3      	   }
 130   2             i=pos;  
 131   2      	   line1[9]=0x20;					//显示电位器等级值
 132   2      	   if(i>99)
 133   2      	   {
 134   3      	     line1[9]=i/100+0x30;
 135   3               i=i%100;
 136   3      	   }
 137   2             line1[10]=i/10+0x30;
 138   2             line1[11]=i%10+0x30;
 139   2      	   ShowString(1,line1);
 140   2      	   line0[5]=min/10+0x30;			//显示时间
 141   2      	   line0[6]=min%10+0x30;
 142   2             line0[8]=sec/10+0x30;
 143   2      	   line0[9]=sec%10+0x30;
 144   2      	   ShowString(0,line0);	   
 145   2             Delay100ms();
 146   2      	 }
 147   1      }
 148          
 149          void InitInterupt()
 150          {
 151   1        TMOD=0x21;            			//初始化中断设置
 152   1        TL1=0xFD;
 153   1        TH1=0xFD;
 154   1        PX0=1;
 155   1        EA=1;                 
 156   1        ES=1;                 
 157   1        PCON=0;    
 158   1        TR1=1;
 159   1        SCON=0x50;
 160   1      
 161   1      
 162   1        TL0=0x00;             				//定时0.05m
 163   1        TH0=0x4C;  
 164   1        ET0=1;
 165   1      
 166   1        EX0=1;                
 167   1        IT0=1;
 168   1      }
 169          
 170          void KeyboardDelay()    				//按键中断延时
 171          {
 172   1       unsigned char i,j;
 173   1       i=0x40;
 174   1       j=0xFF;
 175   1       while(i--)
C51 COMPILER V6.20c  14_2                                                                  09/02/2001 15:14:51 PAGE 4   

 176   1        while(j--);
 177   1      }
 178          
 179          /*--------------------------------------------中断处理----------------------------------------------------
             --*/
 180          Int0_process() interrupt 0 using 0
 181          {
 182   1        unsigned char key;
 183   1        unsigned char keycode[]= "TP";
 184   1        unsigned char step[3]={1,2,5};
 185   1        EA=0;
 186   1        key=GetKey();             			//获得按键值
 187   1        switch(key)
 188   1        {
 189   2         case 0:
 190   2           stop=!stop;
 191   2      	 min=minset;
 192   2           sec=0;
 193   2           break;
 194   2         case 1:
 195   2         case 2:
 196   2         case 3:
 197   2           if(stop)
 198   2      	 {
 199   3       	 minset+=step[key-1];
 200   3      	 if(minset>60)
 201   3      	   minset=0;
 202   3      	 min=minset;
 203   3      	 }
 204   2           break;
 205   2         case 5:
 206   2         case 6:
 207   2         case 7:
 208   2           if(stop)
 209   2      	 {	 
 210   3       	 minset-=step[key-5];
 211   3      	 if(minset>60)
 212   3      	   minset=0;
 213   3      	 min=minset;
 214   3      	 }
 215   2           break;
 216   2         case 9:
 217   2         case 10:
 218   2         case 11:
 219   2       	 posset+=step[key-9];
 220   2           break;
 221   2         case 13:
 222   2         case 14:
 223   2         case 15:
 224   2       	 posset-=step[key-13];
 225   2           break;
 226   2         default:
 227   2           break;
 228   2        }
 229   1        TR0=!stop;
 230   1        KeyboardDelay();
 231   1        P1=0xF0;
 232   1        EA=1;
 233   1      }
 234          
 235          Timer0_process() interrupt 1 using 0
 236          {
C51 COMPILER V6.20c  14_2                                                                  09/02/2001 15:14:51 PAGE 5   

 237   1        EA=0;
 238   1        TR0=0;
 239   1        TL0=0x00;
 240   1        TH0=0x4C;
 241   1        count++;
 242   1        if(count==20)						//如果到累计定时到达1s
 243   1        {
 244   2         if(sec==0)							//定时处理
 245   2         {
 246   3           if(min==0)						//总定时到,则置结束标志
 247   3      	   timeover=1;
 248   3           else
 249   3      	 {
 250   4            min--;
 251   4            sec=59;
 252   4           }  
 253   3         }
 254   2         else
 255   2           sec--;
 256   2         count=0;
 257   2        }  
 258   1        TR0=1;
 259   1        EA=1;
 260   1      }
 261          /*--------------------------------------LCD驱动子程序--------------------------------------------------*/
 262          void DelayL()      	                    
 263          {unsigned char i,j;
 264   1       i=0xF0;
 265   1       j=0xFF;
 266   1       while(i--)
 267   1        while(j--);
 268   1      }
 269          
 270          void DelayS()         					
 271          {
 272   1       unsigned char i;
 273   1       i=0x1F;
 274   1       while(i--);
 275   1      }
 276          
 277          void WriteCommand(unsigned char c)       
 278          {
 279   1       DelayS();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -