课程设计报告-多用户电子式电能表的设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计报告-多用户电子式电能表的设计
课程设计报告
课程名称:单片机在矿山监控中的应用设计课题名称:多用户电子式电能表的设计
姓名_学号_
专业电气工程及其自动化班级_09-1 _
2012 年 1 月 6 日
目录
一、设计任务 (5)
1、设计目的
5
2、设计要求
6
二、硬件设计 (6)
1、设计总体框图 (6)
2、设计参数 (7)
4、光电隔离电路 (12)
5、C8051F360单片机部分管脚及参数
14
6、器件选择 (15)
7、设计原理图 (19)
三、软件设计 (23)
1、主程序框图 (23)
2、显示用户及相应电能子程序框图.. 23
3、查询键盘程序框图 (24)
4、送LED显示子程序框图框图 (24)
5、中断子程序框图 (25)
6、24C16读程序框图 (26)
7、24C16写程序框图 (26)
四、程序清单 (27)
五、总结 (29)
多用户电子式电能表的设计
石信亮
摘要:本文介绍了一种以单片机C8051F360为核心,采用专用电能计量芯片AD7755设计的单相多用户电子式电能表,并提供了其硬件和软件设计结构简单,价格便宜,适合一户一表使用。

该电能表可实现电能计量、数码管显示、,时间校正及时,功耗低,掉电后自动存储数据等功能。

关键词:电能表;单片机;硬件设计;软件设计
0引言
随着我国经济的飞速发展,各行各业对电的需求越来越大,不同时间用电量不均衡的现象也日益严重。

为缓解我国日趋尖锐的电力供需矛盾,调节负荷曲线,改善用电量不均衡的现象,全面实行峰、平、谷分时电价制度,“削峰填谷”,提高全国的用电效率,合理利用电力资源,国内部分省市的电力部门已开始逐步推出了多费率
电能表,对用户的用电量分时计费。

电能表自诞生至今已有100多年的历史,随着电力系统及其相关产业的发展以及电能管理系统的不断完善,电能表的结构和性能也经历了不断更新、优化的发展过程:由最初的感应电能表,发展到后来的感应系脉冲电能表,直至现在的纯电子式电能表。

感应系电能表是利用处于交变磁场的金属圆盘中的感应电流与有关磁场形成力的原理制成的。

感应系脉冲电能表仍采用感应系电能表的测量机构作为工作元件,由光电传感器完成电能脉冲转换,然后经电子电路对脉冲进行处理,从而实现对电能的测量。

纯电子式电能表的原理是采用电子电路来实现电能计量,所以电子式电能表的共同特点是采用乘法器,根据所依托的乘法器为模拟的还是数字的分为模拟乘法器型电子电能表和数字乘法器型电子电能表。

本文给基于C8051F360 单片机的一种新型单相多用户电能表设计,采用 AD7755电能计量芯片,电能计量准确。

该电能表具有分时段计量,八段数码管显示,时间校正及时,功耗低,掉电后自动存储数据的特点。

一、设计任务
1、设计目的
通过计算机编程实现多用户电子式数码显示电能表的功能。

本次设计用户数为八户,即实现八位用户循环显示电能量。

同时,基于E2PROM 24C16芯片实现单片机的掉电数据保护,基于74HC165芯片实现单片机的清零。

2、设计要求
基于AD7755芯片实现电能脉冲的发生;应用单片机C8051F360编制程序完成脉冲的读取、计数、计算、存储、送显示等功能;应用74HC164及八段译码显示器完成数据的显示;应用74HC165及键盘控制对脉冲清零;应用E2PROM 24C16完成数据的定时写入以防停电时数据丢失。

二、硬件设计
1、设计总体框图
2、 设计参数 基准电压: 220V ±10% 基准电流:I b =5A 最大电流:Imax=4Ib=20A 计量精度:1%
最小电流:Imin=2%Ib=0.1A 脉冲数:1000/kw.h 3﹑ AD7755相关参数计算
电能变换电路采用AD7755芯片(I b =5A,C=1000KW/h ),工作时AD7755芯片将电流采样信号和电压采样信号送入缓冲放大器,经模拟乘法器相乘,再经V/F 转换器转换将电压信号转换为脉冲信号,AD7755芯片的快速脉冲输出为1000脉冲/KWh ,与用户使用电能相对
线
线路

电流

能转
光电
C 8051
74HC 16E 2P RO
74HC 164稳压
稳压
应。

输出的快速脉冲信号送给单片机,我们采用C8051F360单片机对方波信号进行采集和计数,P2口(8位)工作即可对8户电能脉冲进行采集与计数,本实验我们将为每户开辟1个字节的内存计数。

简单的ADE7755外围应用电路是由电流采样电路、电压采样电路、轻载调节电路、频率选择电路、高频输出和低频输出等组成。

现对各个电路进行单独分析。

下图为 AD7755性能测试电路
图2.5 AD7755性能测试电路
(1) 电流采样电路:
R2
C1
C2
AGND V1P
V1N F1
R1I
1
2
3
F1
AGND
图 2.6 电流
采样电路
使用分流器的电流采样电路如图 2.6所
示,其中F1为分流器,R1、R2为采样电阻,C1、C2为采样电容,他们为电流采样通道提供采样电压信号,采样电压信号的大小由分流器的阻值和流过其上的电流决定。

电流采样通道采用完全差动输入,V1P 为正输入端,V1N 为负输入端。

电流采样通道最大差动峰值电压应小于470mV ,电流采样通道有一个PGA ,其增益可由ADE7755
的G1和GO 来选择,见表1:
表1
G1 G0 增益 最大差动信号 0 0 1 ±470Mv 0
1
2
±235Mv
1 0 8 ±60Mv
1 1 16 ±30Mv
当使用分流器采样时,G1、G0都接高电平,增益选择16,通过分流器的峰值电压为±30mV,当设计电表为5(20)A规格时,分流器阻值选择为500uΩ,当流过分流器的电流为最大电流20A时,其采样电压为500uΩ×20A=10mV,不超过峰值电压半满度值,这样考虑能允许对电流信号和高峰值因数进行累计。

当使用互感器采样时,其电路如图2.7所示:
R2C1
C2
AGND
P
V1N
H1
R1
I
R30
2.4
R31
2.4
图 2.7 互感
器采样电路
U×I×T=1/5×F
1-4
×3600
使用互感器采样时,G1、G0都接低电平,增益选择1,电流采样通道最大差动峰值电压为±470mV,其差动信号由互感器的二次侧电流流
过电阻R30和R31产生,互感器二次侧额定电流为5mA ,当过载4倍时,二次侧电流为20mA ,其流过电阻R30和R31产生的差动信号为96mV ,远小于峰值电压半满度值(235 mV )。

R1C1和R2C2组成两个低通滤波器,衰减掉那些无用的高频分量,从而防止有用频带内的失真。

R1、R2、C1、C2阻值、容值的选取对电表的性能有很大的影响,因此取值为R1= R2=300欧,C1=C2=27nF 。

(2) 电压采样电路:
图2.8 电压采样电路
电压输入通道(V2N ,V2P )也为差分电路,V2N 引脚连接到电阻分压电路的分压点上,V2P 接地。

电压输入通道的采样信号是通过衰减线电压得到的,其中R6至R15为校验衰减网络,通过短接跳线J1至J9可将采样信号调节到需要的
R24
390K/0.25R23
390K/0.25
R9 7.5
R12
56K R13
100K R14
200K R10 15K R11 30K R8 3.9
R7 2K
R19 100K C3 1000p R4 820R5
820C4 1000p
AGND
AGND
R6 1K
R3 1AGND
J
J
J
J J
J J J J
CL
220p CL+ 3.3n
~220V
V2P
V2N
采样值上,我们设计的电能表基本电流时电压采样值为174.2 mV,为了准许分流器的容差和片内基准源8%的误差,衰减校验网络应该允许至少30%的检验范围,根据参数,其调节范围为169.8 mV –250 mV,完全满足了调节的需要。

这个衰减网络的-3dB频率是由 R4和C3决定的,R19、R23、R24确保了这一点,即使全部跳线都接通,R19、R23、R24的电阻值仍远远大于R4,R4和C3的选取要和电流采样通道的R1C1匹配,这样才能保证两个通道的相位进行恰当的匹配,消除因相位失调带来的误差影响。

4、光电隔离电路
在许多应用中,许多电路链接之间需要非直接的连接,从而在提供数据的同时避免来自系统某一部分的危险电压或电流对另一部分造成破坏,造成这种破坏的可能是电源质量低劣、接地故障等各种故障。

电路隔离的主要目的是通过隔离元件把干扰的路径切断,从而达到抑制干扰的目的,保护电子设备。

在两点间避免电流流过,而允许有数据或功率传送时需要使用隔离技术。

电路隔离主要有:模拟电路的隔离、数字电路的隔离、数字电路与模拟电路之间的隔离。

所使用
的隔离方法有:脉冲变压器隔离法、继电器隔离法、光电耦合器隔离法、直流电压隔离法、A/D 转换器隔离法。

传统的光耦隔离电路虽然也能实现很高的
线性度, 不过这些电路需要的电源种类较多,
线路比较复杂, 设计成本比较高。

为了解决这些问题, 本次设计中一种新的
光电耦合结构, 由它组成的光耦隔离电路具有
很高的线性度, 且只需采用普通的光电耦合器
和简单的电路结构。

应用这个电路解决了弹载黑匣子的电压采样信号的光电隔离问题。

光电耦合器的工作原理和特性如下。

光电耦合器件是把发光器件(如发光二极管)和光敏器件(如光敏三极管)组装在一起, 通过
光线实现耦合构成电) 光 ) 电的转换器件。

当电信号送入光电耦合器的输入端时, 发光器件
将电信号转换为光信号。

光信号经光敏器件感应接收, 再还原成电信号。

图1是一种典型反相应用电路, 当输入端
有电流流过时, 发光二极管发光,使光电三极管导通, 其集电极就有电流I C 流过。

光电耦合器其主要特点为:
1) 输入、输出之间在电气上相互绝缘;
2) 信号传输是单方向的, 输出端的噪声不影响输入端;
3) 体积小、寿命长、无触点,功耗低;
4) 光电耦合器的传输特性具有非线性和随温度变化性;
图1 光电隔离电路
5、C8051F360单片机部分管脚及参数(1)由原理图知:
P2.0~P2.7分配给八个用户,作为脉冲输入端口。

P1.1和P1.0分配给LED显示部分作为时钟信号和数据输入。

P1.6和P1.3分配给24C16作为SCL和SDA 信号脚。

P1.4,P1.5和P1.2分配给74HC164作为键盘
数据输入,时钟信号和控制输入输出管脚使用此外,C8051F360功能强大,结构复杂,其余端口与本设计无关,故其分配情况不再详述。

晶振采用24.5MHz,电源使用3.3V。

(2)电源参数
220V~5V的共两套,一套给AD7755,另一套给显示模块和5V~3.3V电源。

5V~3.3V电源供给C8051F360和24C16。

220V~5V转换电路中,相关参数如下:
C1=330uf,为滤波电容;C2=0.33uf,用于抵消输入线较长时的电感效应,以防止电路产生自激震荡;C3=1uf,用于消除输出电压中的高频噪声。

6、器件选择
AD7755电能脉冲发生器的选择:
AD7755是美国AD公司生产的专用于功率/电能测量的低成本集成电路。

它的技术指标满足GB/T17215-1998标准规定的准确度等要求。

AD7755有24条引脚,以DIP和SSOP形式封装。

AD7755在电子电能表中的连接如图1所示。

管脚功能如下:
P1 DVDD,数字电路电源,5(±5%)V;P2AC/DC,
高通滤波选择脚,逻辑高,高通滤滤器使能;P3 AVDD,模拟电路电源,5(±5%)V;P4、P19 NC,未接;P5-P6 V1P-V1N,通道1(电流通道)模拟输入,最大差动输入电压为±470mV;P7-P8 V2N-V2P,通道2(电压通道)模拟输入,最大差动输入电压为±660mV; P9 RESET,复位引脚,逻辑低使ADC 和数字电路保持复位状态,清内部寄存器;P10 REFIN/OUT,电压基准脚,片上基准为5(±8%)V,可接外部基准源;P11 AGND,模拟电路参考地;P12 SCF,校准频率选择脚;P13、P14 S1、S0,数-频转换频率选择脚;P15、P16 G1、G0,通道1增益选择脚;P17 - P18 CLKIN- CLKOUT,外接时钟,钟频3.579545MHz;P20 REVP,负功率指示脚,电压信号和电流信号之间的相位差>90°时变为逻辑高;P21DGND,数字电路参考地;P22 CF,校准频率输出;P23、P24 F2、F1,低频输出。

AD7755的内部功能框图如下图:
它由模拟电路(模数转换电路、基准电路与电源电压监测电路)和数字信号处理电路两部分组成。

被测电压、电流转换为数字量后,接下来的信号处理都在数字域实现;AD7755内部的相位校正电路、高通滤波器、乘法器、低通滤波器、数字-频率转换器等都为数字电路。

AD7755内有两个以900kHz过采样速率采样的16位2阶Σ-Δ模数转换器(ADC)。

被测电流经可编程增益放大器(PGA)放大后接电流通道的ADC,并由此ADC 转换为对应的数字信号。

再经相位校正和高通滤波,进入乘法器。

乘法器的另一路输入是由电压通道ADC转换而来的、与被测电压对应的数字信号。

相乘后产生瞬时功率信号。

此信号经低通滤波器滤除其中的交流分量,提取出负载消耗的瞬时有功功率。

AD7755对这个瞬时有功功率信号
进行一段时间的累计、平均,求得平均有功功率,以较短时间对瞬时有功功率进行累计,求得与瞬时有功功率成正比的高频频率并经CF输出,用于校准或送微控制器累加计数,实现对电能的计量。

电流通道的PGA的增益受管脚G1、G0控制。

高通滤波器是否接入受管脚AC/DC控制。

逻辑高,HPF使能。

用来去除电流通道的直流偏移和由此引起的误差。

高通滤波器接入或断开造成的相移,由相位校正电路校正,使电压通道和电流通道的相位匹配。

如前所述,管脚F1、F2输出与平均有功功率成正上的电压有效值具有下列关系:
fF1=fF2=8.06×U1×U2×G×(f1-4)/U²REF
式中,U1、U2分别为电流通道和电压通道输入端的rms差动电压(V),G为电流通道的增益,选择方法见表1;UREF为基准电压值(V);f1-4为以S1、S0逻辑输入选择的频率(Hz),选择方法见表2。

表2 f1-4等选择表
表2第7列是与两个通道都输入最大电压所对应的最高输出频率(Hz)。

考虑到实际电网电压存在波动和负载电流可能超载,设计电能表时,两个模拟通道的输入电压一般都留有足够的超量程余地。

比如,取允许的最大值的一半。

表2第5列是用管脚SCF、S1、S0逻辑输入选择的转换系数,CF脚输出的频率为fCF=KfF1(2)由表2知,CF端输出的频率能高达fF1的2048倍。

7、设计原理图
①单片机整体显示图:
OSC 11OSC 02/INT 3VSS 4
SDA
5
SC L 6C LK 7VDD 8PCF 8563U13
+3.3
R 185.1K
C Y232.768KHz
C 815pf
P1.6P1.3
C 9
104/0.1uf
NC 1NC 2NC 3GND 4
SDA
5
SC L 6TES T 7VCC 8U12
AT24C 16+3.3C 7104/0.1uf
R 175.1K
R 20 5.1K
R 195.1K
+3.3
+3.3
C 730p
C 630p R 5
1K
P0.41P0.32P0.23P0.14P0.05AGND 6AV+7
R ST/C2CK 8P4.6/C 2D 9
P4.510P4.411P4.3
12
P 4.213P 4.114P 4.015P 3.716
P 3.617G N D 18V D D 19P 3.520P 3.421P 3.322P 3.223P 3.1
24
P3.0
25P2.7
26
P2.6
27
P2.5
28
P2.4
29
GND
30
VDD
31
P2.3
32
P2.2
33
P2.1
34
P2.0
35
P1.7
36P 1.6
37
P 1.538P 1.439P 1.340P 1.241G N D 42V D D 43P 1.144P 1.045P 0.746P 0.647P 0.548C 8051F 360
U14C Y111.0592M
P0.2/RXD P0.1/TXD
+3.3
+3.3
+3.3+3.3
P1.7P3.0RST/C2CK P4.6/C2D P4.5P4.4P4.3P 4.2P 4.1P 4.0P 3.7P 3.6P 3.5P 3.4P 3.3P 3.2P 3.1DA P0.4 P0.3P 1.2P 1.5P 1.4P 1.3P 1.6P 0.7P 1.1P 1.0+5
PR2 5.1K*8
排阻
C H12
C H11
C H7
C H8
C H 15
C H16
测试
测试
12345678
161514131211109
U16
SW-DIP8DAC
②八段译码显示:
C
Vin
3
A
D
J
1
+Vout
2
WY1
LM317T 稳压
C17
104/0.1uF
g f a b dp c d e
+5
g f a b dp c d e g f a b dp c d e
+5+5
C OM C OM C OM
P1.0
P1.1
A
1
B
2
C
L
K
8
/
M
R
9
Q
7
1
3
Q
6
1
2
Q
5
1
1
Q
4
1
Q
3
6
Q
2
5
Q
1
4
Q
3
U1
74HC164
+5
A
1
B
2
C
L
K
8
/
M
R
9
Q
7
1
3
Q
6
1
2
Q
5
1
1
Q
4
1
Q
3
6
Q
2
5
Q
1
4
Q
3
U6
74HC164
A
1
B
2
C
L
K
8
/
M
R
9
Q
7
1
3
Q
6
1
2
Q
5
1
1
Q
4
1
Q
3
6
Q
2
5
Q
1
4
Q
3
U2
74HC164
A
1
B
2
C
L
K
8
/
M
R
9
Q
7
1
3
Q
6
1
2
Q
5
1
1
Q
4
1
Q
3
6
Q
2
5
Q
1
4
Q
3
U7
74HC164
R6
1K
R23
390
A
1
B
2
C
L
K
8
/
M
R
9
Q
7
1
3
Q
6
1
2
Q
5
1
1
Q
4
1
Q
3
6
Q
2
5
Q
1
4
Q
3
U5
74HC164
+5
L18-L15L2L10-L8
L1L3L7
SM1SM2SM
Green R R R
R Yell o w
R22
5.1K
R21
5.1K
+5
C
B
H F D B
G E C A
SER
10
P0
11
P1
12
P2
13
P3
14
P4
3
P5
4
P6
5
P7
6
C LK1
2
C LK2
15
PL
1
Q7
9
Q7
7
U11
74HC165
123456789
PR1 5.1K*8
排阻
+5
P1.2
P1.5
P1.4
R14
5.1K
+5
G
N
D
1
D
Q
2
V
D
D
3
U21
DS18B20
+3.3
+3.3
P3.0
DS18B20
1
2
3
4
C H5
C H6
74HC1652
外接器件下
P3.0
⑤AD7755电能脉冲发生器
⑥电源
图2 两组稳压电源
三、 软件设计
1、 主程序框图
2、 显示用户及相应电能子程序框图
单片机初始化 读取E 2PROM 24C16存储值
利用定时器T0设置中断
读取P2口状态 开始 调用显示用户及相应电能子程序
向E 2PROM 中写脉冲数
循环
结束
3、 查询键盘程序框图
4、 送LED 显示子程序框图框图
开始 结
调用查询键盘程序 处理脉冲数据
调用显示程序显
八户是
否 是
将键盘状态读出一个键盘是
对相应用
键盘状态是否已全部移出

开是 否


5、 中断子程序框图

将新的脉冲状新旧脉冲状
是否有
相应用户的结
是 否开查询字
是否显是否显A

0FE 将字码的八位依

是 否 否

6、 24C16读程序框图
7、 24C16写程序框图
开发送起送写
向24C16送入一个
发送字结束
写失
将字节地址重新发将24C16里
发控应答读最后一个数据
发终
是 否
四、 程序清单
$NOMOD51
$include (c8051f360.inc)
CLK EQU P1.1;//LED 时钟 DATE EQU P1.0;//LED 数据
SCL EQU P1.6 ;24C16串行时
开发送起送写
向24C16送入一个
发送字结
写将字节地址送到
写数据到24C16发数8个字节数据接







SDA EQU P1.3 ;74HC164脉冲控制管脚
QL EQU P1.4 ;74HC165输出管脚
PL EQU P1.2 ;74HC165控制输入输出管脚
CLK165 EQU P1.5 ;74HC165脉冲控制管脚
PB0 EQU P2.0 ;P2口依次对应1-8用户
PB1 EQU P2.1
PB2 EQU P2.2
PB3 EQU P2.3
PB4 EQU P2.4
PB5 EQU P2.5
PB6 EQU P2.6
PB7 EQU P2.7
ORG 00H
LJMP MAIN ;跳转到主程序ORG 0BH
LJMP T0_INT ;跳转中断服务
程序
ORG 0100H
////////主程序///
MAIN:
LCALL CHUSHI ;对F360进行初始化
LCALL I2C_RD ;读出24C16存储的数据
MAIN1: MOV SP, #70H ;设置堆栈MOV 20H,P2 ;读取外部P2口状态
MOV TMOD,#01H ;定时器赋初值
MOV TH0,#0b1H ;利用计数器T0读取外部脉冲
MOV TL0,#0e0H ;20ms产生一次中断
SETB ET0 ;T0开中断
SETB EA ;开总中断
SETB TR0 ;T0开始计时
BEGIN:
MOV R0, #60h ;将用户一数据送到R0中
MOV R7, #1H ;当前操作户数
LOOP:MOV R6,#0H ;小数点所在的位数
MOV A,@R0 ;把用户脉冲数送到累加器A
MOV B,#10 ;除数为10
DIV AB ;相除,商存入A 中
PUSH ACC ;压栈商
MOV A,B ;把B中所存余数即个位值赋给累加器A
LCALL XS ;调用子程序显示个位
POP ACC ;出栈
MOV B,#10
DIV AB
PUSH ACC
MOV A,B
LCALL XS ;同理显示十位
POP ACC
MOV B,#10
DIV AB
PUSH ACC
MOV A,B
LCALL XS;显示百位
POP ACC
MOV B,#10
DIV AB
PUSH ACC
MOV A,B
LCALL XS;显示千位
MOV A,#10
LCALL XS;显示-
MOV A,R7
LCALL XS;显示户名
LCALL XS
LCALL XS
INC R0
INC R7
LCALL DELAY ;调用延时子程序
CJNE R7, #9, LOOP ;循环显示完8用户电量
LCALL I2C_WR ;启动
24C16写数据
LJMP BEGIN ;调用显示用户及用电量子程序
////////初始化程序//////
CHUSHI://MOV SFRPGEN,#01H
MOV SFRPAGE,#0FH
MOV P1MDIN,#0FFH
MOV P1MDOUT,#0EFH ;推挽输出
MOV XBR1,#40H ;交叉开关使能
MOV PCA0MD,#00H 关闭看门狗clear Watchdog Enablei
//MOV FLKEY,#0a5H
MOV PSCTL,#13H
MOV OSCICN,#83H ;内部振荡器允许,不分频
RET
/////////中断子程序///////
T0_INT: MOV TH0, #0b1H ;重新装入初值
MOV TL0, #0e0H
PUSH ACC ;压栈保存累加器A中数据
PUSH PSW ;压栈保存状态字
MOV A, 20H ;把之前用户状态送入累加器A中
MOV 20H, P2 ;把此时用户脉冲状态存入20H存储单元
JNB ACC.0, BJ1 ; 若ACC.0位为低电平跳转到BJ1执行,否则顺序执行
NEXT1: JNB ACC.1, BJ2 ;判断外
部脉冲的状态
NEXT2: JNB ACC.2, BJ3 ;判断外部脉冲的状态
NEXT3: JNB ACC.3, BJ4 ;判断外部脉冲的状态
NEXT4: JNB ACC.4, BJ5 ;判断外部脉冲的状态
NEXT5: JNB ACC.5, BJ6 ;判断外部脉冲的状态
NEXT6: JNB ACC.6, BJ7 ;判断外部脉冲的状态
NEXT7: JNB ACC.7, BJ8 ;判断外部脉冲的状态
JMP DONE
BJ1: JB PB0,ADD1 ;与原来外部的状态进行比较
JMP NEXT1 ;若相等则继续读外部状态
BJ2: JB PB1,ADD2 ;若不等则相应的用户的脉冲数加一
JMP NEXT2
BJ3: JB PB2,ADD3
BJ4: JB PB3,ADD4
JMP NEXT4 BJ5: JB PB4,ADD5
JMP NEXT5 BJ6: JB PB5,ADD6
JMP NEXT6 BJ7: JB PB6,ADD7
JMP NEXT7 BJ8: JB PB7,ADD8
JMP DONE ADD1: INC 60H
JMP NEXT1 ADD2: INC 61H
JMP NEXT2 ADD3: INC 62H
JMP NEXT3 ADD4: INC 63H
JMP NEXT4 ADD5: INC 64H
JMP NEXT5 ADD6: INC 65H
ADD7: INC 66H
JMP NEXT7
ADD8: INC 67H
DONE: POP PSW ;状态字恢复之前值
POP ACC ;出栈,累加器A恢复之前的值
LCALL JIANPAN ;跳转到清零子程序
RETI
////////显示子程序//////////
//----------显示子程序----------------------
XS:
MOV DPTR,#TAB ;把TAB表首地址赋给DPTR
PUSH ACC ;对累加器A中内容压栈保护
MOVC A,@A+DPTR ;查询字码表中对应的数
MOV R4,#8 ;循环次数8
INC R6 ; R6自增一
CJNE R6,#04H,XS1 ;判断R6是否等于4,等于4显示带小数点的数,不等于4跳转ANL A,#0EFH ;作逻辑与运算,显示带小数点的数
XS1:
CJNE R6,#05H,XS2 ;判断R6是否等于5,等于5显示“—”,不等于跳转
MOV A,#0FEH ;显示“—”XS2:
CJNE R6,#07H,LOOP1 ;
MOV A,45H
CPL A
LOOP1: RLC A
CLR CLK
MOV DATE,C
SETB CLK
DJNZ R4,LOOP1 ;
POP ACC
RET
/////////清零////////////
JIANPAN:
MOV 40H,R0 ;将原用户数
据存入40h单元
MOV 38H,#8 ;设置循环次数
MOV R0,#60H ;将用户一的数据送到R0中
CLR PL ;将键盘的状态读入74HC165
NOP ;指令延时NOP
SETB PL ;停止读入键盘状态
XUN:
CLR CLK165 ;将按键的状态读出,按下为0
NOP
NOP
SETB CLK165 ;移出一个键盘的状态
JB QL,DONE1 ;判断键盘是否按下
MOV @R0,#0 ;若键盘按下,将该用户脉冲清零
INC R0 ;指针移到下一户存储地址
JMP DONE2
DONE1:
INC R0
DONE2:
DJNZ 38H,XUN ;判断8户用户是否检查完毕
MOV R0,40H ; R0恢复清零之前数据
RET
//////////I2C_WR/////////////////////////
I2C_WR: LCALL START ;发起始条件
MOV A,#0A0H ;发器件地址
LCALL SENDI2C
JB F0,RETURN4 ;数据接收错误
MOV A,#0 ;发字节地址
LCALL SENDI2C
JB F0,RETURN4 ;接收数据错误
MOV R1,#60H
MOV R2,#10H
LOP1: MOV A,@R1
LCALL SENDI2C ;发一个数据
JB F0,RETURN4 ;接收数据错误
INC R1
DJNZ R2,LOP1
LCALL STP
LCALL LDELAY ;写周期延时约10ms
RETURN4: RET
/////////////////////I2C_RD//////////////////
I2C_RD: MOV R2,#10H
LCALL START ;发送起始条件
MOV A,#0A0H ;发器件地址
LCALL SENDI2C
JB F0,RETURN3 ;接收数据错误
MOV A,#0H ;发地址
LCALL SENDI2C
JB F0,RETURN3
LCALL START ;重新发送起始标志
MOV A,#0A1H ;发读操作命令
LCALL SENDI2C
JB F0,RETURN3
MOV R0,#60H
LOP2: LCALL LOADI2C
MOV @R0,A
INC R0
DJNZ R2,LOP2
INC R0
SETB
F0 ;F0=1,读最后一个数据标志
LCALL LOADI2C ;读出1个数据
MOV @R0,A
LCALL STP ;发终止条件
RETURN3: RET
/////////////I2C启动条件//////////
START: SETB SDA ;SDA从低到高,SCL为高时,24C16启动
NOP
SETB SCL
NOP
NOP
NOP
NOP
CLR SDA
NOP
NOP
NOP
NOP
CLR SCL
RET
///////////I2C终止条件///////////////
STP: CLR SDA ;SDA从高到低,SCL 为高时,24C16终止
NOP
SETB SCL
NOP
NOP
NOP
NOP
SETB SDA
NOP
NOP
NOP
NOP
RET
////////LOADI2C/////////
LOADI2C: SETB SDA ;置数据线为输入方式
MOV R5,#08H
RCV: NOP
低准备接收数据位
NOP
NOP
NOP
NOP
NOP
SETB SCL ;置高使数据线上数据有效
NOP
NOP
CLR C
JNB SDA,RCV0 ;读数据位,若为0则置0
SETB C ;读数据位,若为1则置1
RCV0: RLC A ;接收数据位放入ACC中
NOP
NOP
DJNZ R5,RCV ;没接收完继续
收完置低发应答或非应答信号
NOP
NOP
NOP
CLR SDA
JNB F0,SENDACKB ;判断继续接收数据?如需转发送应答位
SETB SDA ;发送非应答信号
SENDACKB: NOP
NOP
SETB SCL ;置高使应答有效
NOP
NOP
NOP
NOP
CLR SCL ;准备接收停止条件
CLR F0 ;清接收非应答信号
RET
///////////SENDI2C///////
SENDI2C: MOV R5,#08H
AR_LP1: RLC A
MOV SDA,C ;传送1位数据
NOP
NOP
SETB SCL ;接收数据
NOP
NOP
NOP
NOP
NOP
CLR SCL ;准备接收下一位
DJNZ
R5,AR_LP1 ;8位发送完
NOP
NOP
SETB SDA ;发送完,准备接收应答位
NOP
NOP
SETB SCL ;开始接收应答位
NOP
NOP
CLR F0 ;预先清发送数据出错标志
JNB
SDA,ACKEND ;判断正常否?正常转ACKEND
SETB F0 ;未收到,置位错误标志
ACKEND: NOP
CLR SCL ;准备下一步操作
RET
///////////////////LDELAY10ms延时//////////// LDELAY: MOV R3,#10
LDELAY1: MOV R2,#0FAH
LDELAY2: MOV 50H,#70H
DJNZ R2, LDELAY2
DJNZ R3, LDELAY1
RET
/////////////////////延时子程序/////////////////// DELAY: MOV R3,#6
DELAY1: MOV TMOD,#10 ;利用T1用查询方式进行延时
SETB
TR1 ;T 1开启定时
MOV
TH1,#3CH ;装入定时初值
MOV
TL1,#0B0H ;定时50ms
JNB
TF1,$ ;若定时时间未到,等待
CLR
TF1 ;定时时间到,对TF1位清零
DJNZ
R3,DELAY1 ;循环6次
///////TAB 数据列表///////
TAB:
DB
011h,0d7h,32h,92h,0d4h,98h,18h,0d3h,010h,90H ;0,1,2,3,4,5,6,7,8,9
END
五、总结
两个星期的课程设计结束了,从中我学到了很多东西且感悟良多。

体会到了课本联系实际学以至用设计思想实际动手能力都有所提高.初学单片机时觉得它深奥难懂枯燥无味通过课程设计我体会到了编程的灵活性并对它产生了浓厚的爱好. 另外,通过查阅各种资料,拓宽了我在单片机领域内的知识面,对诸多先进理论知识、应用技巧得到了了解。

课程设计从设计电路到调试结束我们失败很多次,也可谓是屡败屡战,可
我们并未气馁坚持到了最后。

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立考的能力。

在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说不懂一些元器件的使用方法,对单片机汇编语言掌握得不好……在老师的辛勤的指导下,最后我们顺利地完成了这次的课程设计。

这次课程设计让我的实际动手能力得到了大大的锻炼让我解决实际问题的能力得到了大大的提高并对本专业的课程布满了浓厚的兴趣及对以后的学习充满了信心决定在以后的学习生活中加强练习端正心态迎接新的挑战。

相关文档
最新文档