📄 51
字号:
C51 COMPILER V8.02 PCF8591 04/08/2010 23:02:02 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE PCF8591
OBJECT MODULE PLACED IN PCF8591.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE PCF8591.c BROWSE DEBUG OBJECTEXTEND
line level source
1
2 // 硬件配置
3 //晶震: 12M
4 //功能:AD 采样输入 频率输入
5
6 //AD采样输入:
7 //频率输入:
8 //创建:
9 //#include <reg51.h> //51头文件库
10
11 //#include <reg52.h>
12 #include <AT89X52.H>
13 #include <intrins.h> //
14 sbit SCL=P1^2; // 将p1.2口模拟时钟口
15 sbit SDA=P1^3; // 将p1.3口模拟数据口
16 sbit POUT = P3^1;
17 sbit PIN =P2^3;
18 bit askflag;
19 #define uchar unsigned char
20 #define uint unsigned int
21
22 #define disdata P0 //显示数据码输出口
23 sbit LCD_RS = P2^0;
24 sbit LCD_RW = P2^1;
25 sbit LCD_EN = P2^2;
26 sbit P14 = P1^5;
27
28 uint data dis[5]={0x00,0x00,0x00,0x00};
29 //定义3个显示数据单元和1个数据存储单元
30
31 //uchar code dis4[] = {"1- . V 2- . V"};
32 uchar code dis4[] = {"voltage: . V"};
33 uchar code dis5[] = {"frequency: "};
34 //uchar code dis5[] = {"3- . V 4- . V"};
35
36
37 #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_
-();_nop_();_nop_();_nop_();_nop_();_nop_();};
38
39 bit bdata SystemError; //从机错误标志位
40
41 /*********************** PCF8591专用变量定义 ***********************/
42
43 #define PCF8591_WRITE 0x90
44 #define PCF8591_READ 0x91
45 #define NUM 4 //接收和发送缓存区的深度
46 uchar idata receivebuf[NUM]; //数据接收缓冲区
47
48
49 unsigned int freq; //频率值
50 unsigned char freq2;
51 unsigned long x;
52 unsigned int sec_bit;
53 unsigned char ov_flage; //计数溢出标志位
54
C51 COMPILER V8.02 PCF8591 04/08/2010 23:02:02 PAGE 2
55
56
57
58 void lcd_flash(void);
59
60 /*******************************************************************/
61 /* */
62 /* 延时函数 */
63 /* */
64 /*******************************************************************/
65
66 void delay(int ms)
67 {
68 1 while(ms--)
69 1 {
70 2 uchar i;
71 2 for(i=0;i<250;i++)
72 2 {
73 3 _nop_();
74 3 _nop_();
75 3 _nop_();
76 3 _nop_();
77 3 _nop_();
78 3 _nop_();
79 3 _nop_();
80 3 _nop_();
81 3 _nop_();
82 3 _nop_();
83 3 _nop_();
84 3 _nop_();
85 3 }
86 2 }
87 1 }
88
89 /*******************************************************************/
90 /* */
91 /*检查LCD忙状态 */
92 /*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。 */
93 /* */
94 /*******************************************************************/
95
96 bit lcd_busy()
97 {
98 1 bit result;
99 1 LCD_RS = 0;
100 1 LCD_RW = 1;
101 1 LCD_EN = 1;
102 1 delayNOP();
103 1 result = (bit)(P0&0x80);
104 1 LCD_EN = 0;
105 1 return(result);
106 1 }
107
108 /*******************************************************************/
109 /* */
110 /*写指令数据到LCD */
111 /*RS=L,RW=L,E=高脉冲,D0-D7=指令码。 */
112 /* */
113 /*******************************************************************/
114
115 void lcd_wcmd(uchar cmd)
116
C51 COMPILER V8.02 PCF8591 04/08/2010 23:02:02 PAGE 3
117 {
118 1 while(lcd_busy());
119 1 LCD_RS = 0;
120 1 LCD_RW = 0;
121 1 LCD_EN = 0;
122 1 _nop_();
123 1 _nop_();
124 1 _nop_();
125 1 _nop_();
126 1 P0 = cmd;
127 1 delayNOP();
128 1 LCD_EN = 1;
129 1 delayNOP();
130 1 LCD_EN = 0;
131 1 }
132
133 /*******************************************************************/
134 /* */
135 /*写显示数据到LCD */
136 /*RS=H,RW=L,E=高脉冲,D0-D7=数据。 */
137 /* */
138 /*******************************************************************/
139
140 void lcd_wdat(uchar dat)
141 {
142 1 while(lcd_busy());
143 1 LCD_RS = 1;
144 1 LCD_RW = 0;
145 1 LCD_EN = 0;
146 1 P0 = dat;
147 1 delayNOP();
148 1 LCD_EN = 1;
149 1 delayNOP();
150 1 LCD_EN = 0;
151 1 }
152
153 /*******************************************************************/
154 /* */
155 /* LCD初始化设定 */
156 /* */
157 /*******************************************************************/
158
159 void lcd_init()
160 {
161 1 delay(15);
162 1 lcd_wcmd(0x38); //16*2显示,5*7点阵,8位数据
163 1 delay(5);
164 1 lcd_wcmd(0x38);
165 1 delay(5);
166 1 lcd_wcmd(0x38);
167 1 delay(5);
168 1
169 1 lcd_wcmd(0x0c); //显示开,关光标
170 1 delay(5);
171 1 lcd_wcmd(0x06); //移动光标
172 1 delay(5);
173 1 lcd_wcmd(0x01); //清除LCD的显示内容
174 1 delay(5);
175 1 }
176
177 /*******************************************************************/
178 /* */
C51 COMPILER V8.02 PCF8591 04/08/2010 23:02:02 PAGE 4
179 /* 设定显示位置 */
180 /* */
181 /*******************************************************************/
182
183 void lcd_pos(uchar pos)
184 {
185 1 lcd_wcmd(pos | 0x80); //数据指针=80+地址变量
186 1 }
187
188 /******************************************************************/
189 /* */
190 /* 数据处理与显示 */
191 /* 将采集到的数据进行16进制转换为ASCLL码。 */
192 /* */
193 /******************************************************************/
194
195 show_value(uchar ad_data)
196
197 {
198 1 dis[2]=ad_data/51; //AD值转换为3为BCD码,最大为5.00V。
199 1 dis[2]=dis[2]+0x30; //转换为ACSII码
200 1 dis[3]=ad_data%51; //余数暂存
201 1 dis[3]=dis[3]*10; //计算小数第一位
202 1 dis[1]=dis[3]/51;
203 1 dis[1]=dis[1]+0x30; //转换为ACSII码
204 1 dis[3]=dis[3]%51;
205 1 dis[3]=dis[3]*10; //计算小数第二位
206 1 dis[0]=dis[3]/51; //
207 1 dis[0]=dis[0]+0x30; //转换为ACSII码
208 1 }
209 //-------------------------------------------------------------------
210 // 函数名称: iic_start()
211 // 函数功能: 启动I2C总线子程序
212 //-------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -