📄 psensor.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 + -