数字指南针Word下载.docx

上传人:b****5 文档编号:18841366 上传时间:2023-01-01 格式:DOCX 页数:40 大小:178.11KB
下载 相关 举报
数字指南针Word下载.docx_第1页
第1页 / 共40页
数字指南针Word下载.docx_第2页
第2页 / 共40页
数字指南针Word下载.docx_第3页
第3页 / 共40页
数字指南针Word下载.docx_第4页
第4页 / 共40页
数字指南针Word下载.docx_第5页
第5页 / 共40页
点击查看更多>>
下载资源
资源描述

数字指南针Word下载.docx

《数字指南针Word下载.docx》由会员分享,可在线阅读,更多相关《数字指南针Word下载.docx(40页珍藏版)》请在冰豆网上搜索。

数字指南针Word下载.docx

16点阵)汉字。

与外部MCU接口可采用并行或串行方式控制,在数字指南针中采用串口驱动。

4控制程序的设计

数字指南针控制程序主要有液晶、串口等的初始化程序、硬铁校正程序、磁阻信号数字转换及方位角计算程序和串口数据发送与液晶显示程序。

4.1液晶、串口等的初始化程序

初始化程序将串口设为方式1,波特率为19200。

对中文液晶显示器的初始化主要是清显示内存、点功能设定、开显示屏、清屏等工作。

4.2硬铁校正程序

当一个铁质放在一个磁场中,会产生磁干扰,从而改变地磁场的方向。

因此在使用数字指南针时,附近的铁质材料都会对磁角产生影响。

当两轴磁传感器在水平磁场中旋转时,一个理想的、无干扰的磁输出曲线是一个以(Xb0,Yb0)为圆心的圆(见图5),此时,输出的航向会发生从Oo到360o的线性变化。

硬铁干扰产生于永久磁铁和被磁化的金属,或使用钢的平台上。

这些干扰会保持大小恒定,与指南针的相对位置固定,而与指南针指向无关,硬铁干扰在磁阻传感器的每个输出轴向加了一个定值,输出曲线图的圆心被移动了(见图6),对于运动方位角的影响则是一个周期性的误差。

要消除硬铁干扰,必须得到磁输出的圆心偏移量。

通常是将指南针和平台旋转一周,得到圆上足够的点,再通过计算得到圆心值,圆心值(Xb0,Yb0)会存在EEPROM中,每次指南针读数计算中都会减去偏移量,因此,航向计算时可以消除硬铁干扰。

在指南针运行程序中,有为求硬磁干扰时的圆心程序,在初次使用时,数字指南针需同金属平台一起慢慢旋转1周以上。

4.3磁阻信号数字转换及航向角计算程序

从磁阻传感器输出的电压信号经过200~300倍的放大后,成为0~5V的直流电压送入单片机进行A/D转换。

STC12C5410AD单片机内带8路10位A/D转换器,转换后的磁阻电压最大数字值为1024。

根据图5中已知的X方向与y方向的最大值与最小值及实时测得的2个方向的数据,就可算出运动方位角θ。

图7所示为数字指南针主程序流程图。

图7数字指南针主程序流程图

5调试及性能分析

由于磁阻传感器引脚较细密,焊接时须特别小心,元器件焊接完成后应进行硬件的加电测试。

运放器的放大量输出以正南或正北时每路的输出电压最大不超过5V(尽量接近5V)为宜。

LCD液晶显示程序调试完成后可将实时磁阻强度在LCD上直观显示出来,对后续的程序编写调试有很大的帮助。

在所有程序编写完成后可进行校正操作,其方法是打开校正开关,然后通电,将电路板放置在水平的台面上,然后慢慢地旋转2周以上,最后将校正开关关闭,指南针就能正常工作了。

通过对数字指南针的比对测试,数字指南针读数误差小于1O。

6控制源程序清单

以下是数字指南针汇编程序清单:

;

********************************************

*电子指南针演示程序*

*STC12C2052AD-12MHZ晶振*

显示缓冲单元在40H-43H,使用内存44H、45H、46H用于计算

RESETEQUP3.7;

磁感应器复位,2微秒高电平脉冲.

ADC_CONTREQU0C5H;

ADC控制

ADC_DATAEQU0C6H;

ADC结果中的最高8位

ADC_LOW2EQU0BEH;

ADC结果中的最低2位

P1M0EQU91H;

I/O设置

P1M1EQU92H;

P3M0EQU0B1H;

P3M1EQU0B2H;

ADC0HEQU30H;

0路ADC结果高2位

ADC0LEQU31H;

0路ADC结果低8位

ADC1HEQU32H;

1路ADC结果高2位

ADC1LEQU33H;

1路ADC结果低8位

DELDATAEQU34H;

100us延时参数

DISPADDDATA40H;

显示用连续8个单元(40-47),用作X方向及Y方向的磁场强度显示

DIVDATADATA50H;

除法移位控制数据用

*************************************************

LAMPBLAKEQUP1.4;

背光灯控制,=0时开,=1时关.

CSEQUP1.5;

液晶使能,=1操作,=0禁止.

SIDEQUP1.6;

液晶串行数据输入口

SCLKEQUP1.7;

液晶串行操作时钟口

LAMPEQUP1.2;

LED指示灯

*中断入口程序*

ORG0000H

LJMPSTART

ORG0003H

RETI

ORG000BH

ORG0013H

RETI

ORG001BH

ORG0023H

ORG002BH

RETI

*主程序*

START:

MOVSP,#80H

CLRCS;

液晶操作禁止

CLRLAMP

CLRRESET;

磁感应器复位,平时为低

LCALLSETUP;

LCD初始化

LCALLLOGON;

开机显示画面

MOVR0,#DISPADD;

显示数据存放单元清零

MOVR7,#08H

CLEARDISP:

MOV@R0,#08H

INCR0

DJNZR7,CLEARDISP;

LCALLDATAUP;

显示X:

0000Y:

0000

CPLLAMP

LCALLINI_RS232;

初始化串口

LCALLADC_POW_ON;

开ADC电源

LCALLSET_P10P11_OP;

设P1.0P1.1为开源输出

MOVP3M0,#00000000B;

P3.7为推挽输出

MOVP3M1,#10000000B;

MAIN:

LCALLRESETS;

磁感应器复位

MOVADC_CONTR,#11100000B;

选P1.0ADC转换口

LCALLP10_ADC_CHANNEL;

转换

MOVADC0H,B;

第0路结果保存(10位数高2位)

MOVADC0L,A;

第0路结果保存(10位数低8位)

LCALLBCDCON0

MOVADC_CONTR,#11100001B;

选P1.1ADC转换口

MOVADC1H,B;

第1路结果保存(10位数高2位)

MOVADC1L,A;

第1路结果保存(10位数低8位)

LCALLBCDCON1

LCALLDATAUP

LCALLDELAY5S

AJMPMAIN

RESETS:

SETBRESET

NOP

CLRRESET

RET

****************************************************

**

BCDCON0:

;

MOVPSW,#18h

MOVR7,#00H

MOVR6,#00H

MOVR5,B

MOVR4,A

MOVR3,#03H

MOVR2,#0E8H

LCALLDIV4BY2;

/1000

MOVDISPADD,R4;

千位数BCD

MOVA,R1

MOVR5,A

MOVA,R0

MOVR3,#00H

MOVR2,#64H

/100

MOVDISPADD+1,R4;

MOVA,R0

MOVB,#10

DIVAB

MOVDISPADD+2,A

MOVDISPADD+3,B

POPPSW

BCDCON1:

MOVPSW,#18h

MOVDISPADD+4,R4;

MOVDISPADD+5,R4;

MOVDISPADD+6,A

MOVDISPADD+7,B

POPPSW

*四字节/两字节无符号数除法程序*

R7R6R5R4/R3R2=R7R6R5R4(商)...R1R0(余数)

DIV4BY2:

MOVDIVDATA,#20H

MOVR0,#00H

MOVR1,#00H

DIVLOOP1:

MOVA,R4

RLCA

MOVA,R5

MOVA,R6

MOVR6,A

MOVA,R7

MOVR7,A

MOVR0,A

MOVR1,A

CLRC

SUBBA,R2

MOVB,A

SUBBA,R3

JCDIVLOOP2

MOVR0,B

DIVLOOP2:

CPLC

DJNZDIVDATA,DIVLOOP1

**********以下数据显示程序**************

DATAUP:

MOVA,#91H;

显示X数据

LCALLWRITE_COM

MOVR1,#DISPADD;

将X数据查出字码写入LCD

MOVDPTR,#TABLE1

MOVR2,#04H;

查4次

MOVA,#00H

MOVCLOP:

MOVA,@R1;

MOVCA,@A+DPTR

LCALLWRITE_DAT

INCR1

DJNZR2,MOVCLOP;

MOVA,#95H;

显示Y数据

MOVR1,#DISPADD+4;

将Y数据查出字码写入LCD

MOVCLOPY:

DJNZR2,MOVCLOPY;

***************开机显示画面***********************

LOGON:

MOVA,#80H;

第一行左第一个字开始

MOVDPTR,#CHINESE;

WORD16*16点阵TEST

LCALLWRITE_HZ

MOVA,#90H;

第二行左第一个字开始

MOVDPTR,#CHINESE1;

CLRLAMPBLAK;

开背光灯

LCALLDELAY5S;

显示5秒

SETBLAMPBLAK;

关背光灯

MOVDPTR,#CHINESE2;

显示x:

Y:

**********液晶初始化程序*************

SETUP:

MOVA,#01H;

CLEARDISPLAY

MOVA,#00110000B;

FUNCTIONSETTING

MOVA,#00000010B;

DDRAMSETTO'

00H'

MOVA,#00000100B;

MOVA,#00001100B;

DISPLAYON

MOVA,#00000001B;

CLEARINGSCREEN

MOVA,#10000000B;

SETDDRAMADDRESS

LCALLDELAY

************液晶串行命令写入子程序****************

写入命令字在A中

WRITE_COM:

LCALLDELAY1;

SETBCS

PUSHACC

MOVR0,#8

MOVA,#11111000B

COMM1:

RLCA

MOVSID,C

CLRSCLK

SETBSCLK

DJNZR0,COMM1

POPACC

MOVR5,A

ANLA,#0F0H

COMM2:

SETBSCLK

DJNZR0,COMM2

MOVA,R5

SWAPA

COMM3:

DJNZR0,COMM3

CLRCS

***********液晶串行数据写入子程序****************

写入数据字在A中

WRITE_DAT:

LCALLDELAY1

MOVA,#11111010B

DATA1:

DJNZR0,DATA1

DATA2:

DJNZR0,DATA2

DATA3:

DJNZR0,DATA3

**************延时子程序**********************

0.544ms

DELAY1:

MOVR7,#160;

#010H;

普通单片机用010H

D11:

MOVR6,#010H

DJNZR6,$

DJNZR7,D11

0.13s

DELAY:

MOVR1,#00H

D2:

MOVR2,#00H

DJNZR2,$

DJNZR1,D2

5.2s

DELAY5S:

MOVR3,#28H

DE5S:

DJNZR3,DE5S

DELAY1S:

MOVR3,#9

DE1S:

DJNZR3,DE1S

************16*8一行点阵字写入子程序共16个******************

WRITE_ASCII:

MOVR4,#16

DDDD:

CLRA

MOVCA,@A+DPTR

LCALLWRITE_DAT

INCDPTR

DJNZR4,DDDD

RET

************16*8点阵字写入子程序共7个******************

WRITE_ASCII7:

MOVR4,#7

DDDD7:

MOVA,@R0

INCR0

DJNZR4,DDDD7

************16*16点阵汉字写入子程序一行共7个***********

WRITE_HZ:

;

WRITE7CHINESETOLCD

DD:

CLRA

DJNZR4,DD

************16*16点阵汉字写入子程序共2个***********

WRITE_HZ2:

WRITE8CHINESETOLCD

MOVR4,#2

DD4:

DJNZR4,DD4

*****************************16*8点阵的字符代码表**********************************

TABLE1:

DB30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,3AH,3BH,3CH,3DH,3EH,20H

012345

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 法学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1