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

📄 psensor.lst

📁 光电传感器和蜂鸣器控制 理解ZLG7290键盘与显示控制芯片相关函数的控制和使用方法
💻 LST
字号:
C51 COMPILER V6.12  PSENSOR                                                                11/06/2008 08:56:47 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE PSENSOR
OBJECT MODULE PLACED IN .\PSensor.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE .\PSensor.c DEBUG OBJECTEXTEND

stmt level    source

   1               /*******************************************************************/ 
   2                /*                                                                         
   3                /* 深圳信息职业技术学院电子通信系                                              
   4                /*  
   5                /* 《单片机程序设计实践教程》项目例程 
   6                /*                                                       
   7                /* 第12章 基础项目. '光电传感器和嗡鸣器控制'演示程序                                                
             -                   
   8                /*                                                                         
   9                /* 功能:将厚纸片插在4个光电传感器的任一凹槽内,8个LED数码管显示相应传感器编号,
  10                /* 并用8个LED发光管显示相应的传感器数值,同时嗡鸣器发出声响
  11                /* 演示过程:将程序下载执行后,将厚纸片插在4个光电传感器的任一凹槽内即可看到演示效果 */
  12            	   /* 存在问题:无;
  13                /* 邮箱: panxn@sziit.com.cn  */ 
  14                /* 作者:潘晓宁   */ 
  15                /*                     */ 
  16                /* 修改时间: 2008/8/7                 */ 
  17                /*                                */ 
  18                /*【版权】Copyright(C)PanXiaoNing All Rights Reserved             */ 
  19                /*【声明】此程序仅用于学习与参考   
  20                /*                                                                    */ 
  21                /*******************************************************************/ 
  22          
  23          #include "I2C.h"
  24          #include "ZLG7290.h"
  25          #include  <absacc.h>
  26          #include  <intrins.h>
  27          
  28          
  29          #define  uchar  unsigned  char
  30          #define  uint  unsigned  int
  31          
  32          #define  PA8255  XBYTE[0x3ffc]        //8255端口A的地址
  33          #define  PB8255  XBYTE[0x3ffd]        //8255端口B的地址
  34          #define  PC8255  XBYTE[0x3ffe]        //8255端口C的地址
  35          #define  COM8255  XBYTE[0x3fff]       //8255命令字的地址
  36          
  37          sbit  cs138=P1^6 ;                    //74HC138的选通端口
  38          sbit  Sensor01=P1^2 ;                 //传感器1的输入端口
  39          sbit  Sensor02=P1^3 ;                 //传感器2的输入端口
  40          sbit  Sensor03=P1^4 ;                 //传感器3的输入端口
  41          sbit  Sensor04=P1^5 ;                 //传感器4的输入端口
  42          
  43          uchar Sflag1,Sflag2,Sflag3,Sflag4;    //定义4个传感器的状态储存变量
  44          
  45          void DispValue(char x, unsigned char dat);
  46          void  delay(uchar);
  47          
  48          /*********************************主函数***************************************/
  49          void  main(void)
  50          {  cs138=0;                              //选通74HC138的使能端
  51   1         COM8255=0x80;                         //8255的初始化,PA,PC口为输出
  52   1         PC8255=0x00;                          //禁止嗡鸣器发声
  53   1         PA8255=0xff;                          //所有LED灯全灭
  54   1      
C51 COMPILER V6.12  PSENSOR                                                                11/06/2008 08:56:47 PAGE 2   

  55   1         while(1)
  56   1        {
  57   2           Sflag1=(uchar)Sensor01;             //将传感器1的输入端口状态储存在指定变量中
  58   2      	 Sflag2=(uchar)Sensor02;             //将传感器2的输入端口状态储存在指定变量中
  59   2      	 Sflag3=(uchar)Sensor03;             //将传感器3的输入端口状态储存在指定变量中
  60   2      	 Sflag4=(uchar)Sensor04;             //将传感器4的输入端口状态储存在指定变量中
  61   2      
  62   2      	 if(!(Sflag1&Sflag2&Sflag3&Sflag4)) PC8255|=0x01;   //有变量为0的情况出现,允许嗡鸣器发声
  63   2          else PC8255&=0;                       //禁止嗡鸣器发声
  64   2      
  65   2          switch(Sflag1)                        //判断传感器1的输入状态
  66   2      	 {
  67   3      	    case 0:PA8255&=0x3f;                //光电信号被挡,点亮D17和D16灯
  68   3      	           DispValue(0,11);             //在数码管1,2位显示11
  69   3      			     break;
  70   3      	    case 1:PA8255|=0xc0;                //光电信号无遮挡,熄灭D17和D16灯
  71   3      		        ZLG7290_Download(0,0,0,31);  //强制熄灭数码管1
  72   3      			     ZLG7290_Download(1,0,0,31);  //强制熄灭数码管2
  73   3      	  	        break;
  74   3      		default:break;
  75   3      	 }
  76   2          switch(Sflag2)                        //判断传感器2的输入状态
  77   2      	 {
  78   3      	    case 0:PA8255&=0xcf;                //光电信号被挡,点亮D15和D14灯
  79   3      		        DispValue(2,22);             //在数码管3,4位显示22
  80   3      			     break;
  81   3      	    case 1:PA8255|=0x30;                //光电信号无遮挡,熄灭D15和D14灯
  82   3      		        ZLG7290_Download(2,0,0,31);  //强制熄灭数码管3
  83   3      			     ZLG7290_Download(3,0,0,31);  //强制熄灭数码管4
  84   3      	  	        break;
  85   3      		default:break;
  86   3      	 }
  87   2          switch(Sflag3)                        //判断传感器3的输入状态
  88   2      	 {
  89   3      	    case 0:PA8255&=0xf3;                //光电信号被挡,点亮D13和D12灯
  90   3      		        DispValue(4,33);             //在数码管5,6位显示33
  91   3         			  break;
  92   3      	    case 1:PA8255|=0x0c;                //光电信号无遮挡,熄灭D13和D12灯
  93   3      		        ZLG7290_Download(4,0,0,31);  //强制熄灭数码管5
  94   3      			     ZLG7290_Download(5,0,0,31);  //强制熄灭数码管6
  95   3      	  	        break;
  96   3      		default:break;
  97   3      	 } 
  98   2          switch(Sflag4)                        //判断传感器4的输入状态
  99   2      	 {
 100   3      	    case 0:PA8255&=0xfc;                //光电信号被挡,点亮D11和D10灯
 101   3      		        DispValue(6,44);             //在数码管7,8位显示44
 102   3         			  break;
 103   3      	    case 1:PA8255|=0x03;                //光电信号无遮挡,熄灭D11和D10灯
 104   3      		        ZLG7290_Download(6,0,0,31);  //强制熄灭数码管7
 105   3      			     ZLG7290_Download(7,0,0,31);  //强制熄灭数码管8
 106   3      	  	        break;
 107   3      		default:break;
 108   3      	  }
 109   2           delay(140);                          //延时大约140ms
 110   2         }  
 111   1      }
 112          /*********************************主函数结束************************************/
 113          
 114          void DispValue(char x, unsigned char dat)
 115          //ZLG7290的10进制字节显示函数,dat:要显示的数据,取值0~99;x:显示位置,取值0~6
 116          {
C51 COMPILER V6.12  PSENSOR                                                                11/06/2008 08:56:47 PAGE 3   

 117   1      	unsigned char d;
 118   1      	d = dat / 10;                 //取x位的10进制显示数
 119   1      	ZLG7290_Download(x,0,0,d);    //在x位不闪烁、熄灭小数点点亮数字d,此函数由项目中的ZLG7290.c规定
 120   1      	d = dat - d * 10;             //取x+1位的10进制余数的显示数
 121   1      	ZLG7290_Download(x+1,0,0,d);  //在x+1位不闪烁、熄灭小数点点亮数字d,此函数由项目中的ZLG7290.c规定
 122   1      }
 123          
 124          void  delay(uchar  x)              // 延时,系统主频为11.0592MHz
 125          {  uchar k;
 126   1         while(x--)                      //延时大约x毫秒钟
 127   1           for(k=0;k<125;k++){}
 128   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    362    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      4       3
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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