基于单片机的激光测距仪的设计与实现论文内容摘要:
P2 口输出其特殊功能寄存器的内容。 P2 口在 FLASH 编程和校验时接收高八位地址信号和控制信号。 P3 口: P3口管脚是 8个带内部上拉电阻的双向 I/O口,可接收输出 4个 TTL 门电流。 当 P3 口写入“ 1”后,它们被内部上拉为高电平,并用作输入。 作为输入时,由于 12 外部下拉为低电平, P3口将输出电流 (ILL),也是由于上拉的缘故。 P3 口也可作为AT89C51 的一些特殊功能口: RXD(串行输入口 )。 TXD(串行输出口 )。 INT0(外部中断 0)。 INT1(外部中断 1)。 T0(记时器 0外部输入 )。 T1(记时器 1外部输入 )。 WR (外部数据存储器写选通 )。 RD (外部数据存储器读选通 )。 同时 P3 口同时为闪烁编程和编程校验接收一些控制信号。 RST:复位输入。 当振荡器复位器件时,要保持 RST脚两个机器周期的高平时间。 ALE / PROG :当访问外 部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节。 在 FLASH 编程期间,此引脚用于输入编程脉冲。 在平时, ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的 1/6。 因此它可用作对外部输出的脉冲或用于定时目的。 然而要注意的是:每当用作外部数据存储器时,将跳过一个 ALE 脉冲。 如想禁止 ALE 的输出可在 SFR8EH 地址上置 0。 此时, ALE 只有在执行 MOVX, MOVC 指令时 ALE 才起作用。 另外,该引脚被略微拉高。 如果微处理器在外部执行状态 ALE 禁止,置位无效。 PSEN:外部程序存储器的选通信号。 在 由外部程序存储器取址期间,每个机器周期PSEN 两次有效。 但在访问内部部数据存储器时,这两次有效的 PSEN 信号将不出现。 EA/VPP:当 EA保持低电平时,访问外部 ROM。 注意加密方式 1时, EA 将内部锁定为RESET。 当 EA 端保持高电平时,访问内部 ROM。 在 FLASH 编程期间,此引脚也用于施加12V 编程电源 (VPP)。 XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。 开发板配置 板子尺寸: *95*( cm) 13 1. 4 按键键盘:输入设备,可做中 断实验用。 2. 2 个 LED 灯:可做各种花样灯实验或状态显示设备。 3. 超声波传感器接口:可做超声波测距实验。 4. 24L01 无线模块:可以做无线通信,自组网实验。 5. 红外接收 IC 接口:可使用 H1838 等接收头做红外接收实验,可扩展红外遥控键盘。 6. 温度传感器 DS18B20 接口 :学习“单总线”通讯,可做温度计,温度报警装置。 7. 温湿度传感器 DHT11 接口 :可做温度计和湿度计。 8. 光敏电阻传感器接口 :可接光敏电阻,学习用 AD采集光照强度。 9. 压敏电阻传感器接口 :可接压敏传感器,学习用 AD采集压力值。 10. 以 MAX3232 为核心的串口 1:此做为串行通讯的 ,可做串行通讯实验, STC 单片机也是通过此串口 1烧写程序的。 11. 以 MAX3232 为核心的串口 2:有了第二串口,我们可以用 2个串行同时通信,可以用串口 2进行监控和调试。 12. 1602LCD 接口:可直插字符型 1602,点阵图型 12232 等。 13. 12864LCD 接口:可直插点阵图型 12864 等。 14. Nokia 5110LCD 屏接口:可接 5110 液晶和 3310 液晶。 (三种液晶共用一个 20管脚排 母,可通过跳帽选择,详见使用手册) 15. P 口扩展:板子单片机的 P口都有扩展插针引出,方便扩展。 16. 输入电源: USB 口供电与外电源供电端,选择一种就可以了。 17. 系统电源: ,既可以调试 5V单片机和 单片机。 输入电压是 5V。 18. 输出电源:五组 ,可供其它设备取电。 14 图 34 双串口原理图 本次设计用的是 NOKIA5110 屏 Nokia5110 是一款经典机型,可能由于经典的缘故,旧机器很多,所以很多 电子工程师就把旧机器的屏 幕拆下来, 自己驱动 Nokia5110, 用于开发的设备显 示,取代 LCD1602。 使用 Nokia5110 液晶的四大理由: 性价比高, LCD1602 可以显示 32 个字符,而 Nokia5110 可以显示 15 个汉 字,30 个字符。 Nokia5110 裸屏仅 元, LCD1602 一般 15 元左右, LCD 12864 一般 50~70 元。 2) 接口简单,仅四根 I/O 线即可驱动, LCD1602 需 11 根 I/O 线, LCD12864 需 12 根。 速度快,是 LCD12864 的 20 倍,是 LCD1602 的 40 倍。 Nokia5110 工作电压 ,正常显示时工作电流 200uA 以下,具有掉电模 式,适合电池供电的便携式移动设备。 编译环境 15 keil uVision2 是德国 Keil software 公司出品的 51 系列单片机 C 语言软件开发系统。 其在 C 语言上加入了单片机特有的语法,并最大程度上保留了 C 语言上的大部分的语法规则,从而大大方便了编程,也提高了人们对其的认可程度。 测试环境的可用性: include sbit led=P1^0。 void main(void) { led=1。 while(1) { led=0。 } } 图 34 keil测试 经测试该编译器可用,编译环境就搭建好了。 16 激光测距仪的关键技术 总体结构图如下: 图 41模块连接图 图 42 ISIS professional上的模拟图 17 由于 ISIS professional上没有激光的收发单元件,就以跑步机的设计为模拟图,经测试通过。 5110屏幕的线序为: sbit res = P1^4。 //复位 ,0 复位 sbit sce = P1^3。 //片选 sbit dc = P1^2。 //1 写数据, 0 写指令 sbit sdin = P1^1。 //数据 sbit sclk = P1^0。 //时钟 编写语言的设计流程 本设计包括 3 大模块,包括激光收发模块、单片机模块、 5110 显示屏模块。 由于激光收发模块的完整封装性,它提供了开灯、开始连续测量、停止连续测量、指令确认及关闭激光的命令接口, 所以在连接玩单片机后只需在编译时给出合理的编写逻辑即可。 第二个模块是 5110 屏,由于以前从没有接触过 lcd,用的都是 led,在查找了 5110的资料后对其的原理有了较为直观的了解。 第三个模块是单片机本身,在综合了网上的各种资料后,选择了 51 系列的单片机,其完全符合本设计的要求。 5110 屏显示的实现 通过指令完成了连续模式的测量实现,激光探头向单片机发送数据流,单片机截取的数据流并向 LCD 屏幕上通过函数实现 LCD 的显示,其中包括了字库的调用、坐标的设定、屏幕的初始化、及刷新等功能。 void delay(int t) { uchar i。 while (t) { for (i=0。 i125。 i++) {} } 18 } void Lcd5110WriteDta(uchar dat) { unsigned char i。 sce=0。 dc=1。 for (i=0。 i8。 i++) { if (datamp。 0x80) sdin=1。 else sdin=0。 dat=dat1。 sclk=0。 nop()。 sclk=1。 } dc=1。 sce=1。 sdin=1。 } void Lcd5110WriteCMD(uchar dat) { unsigned char i。 sce=0。 dc=0。 for (i=0。 i8。 i++) { if (datamp。 0x80) sdin=1。 else sdin=0。 dat=dat1。 sclk=0。 nop()。 sclk=1。 } dc=1。 sce=1。 sdin=1。 } /* 19 LCD_init: LCD 初始化 */ void Lcd5110Init(void) { char i。 // res=0。 // delay(10)。 // res=1。 //以上三句 不用也行 Lcd5110WriteCMD(0x21 )。 //初始化 Lcd,功能设定使用扩充指令 Lcd5110WriteCMD(0xa0 )。 //设定液晶偏置电压 //Lcd5110WriteCMD(0xc0)。 //设定液晶偏置电压 //调试用 显示全黑 Lcd5110WriteCMD(0x02 )。 //温度校正 Lcd5110WriteCMD(0x13 )。 //1:48 Lcd5110WriteCMD(0x20 )。 //使用基本指令 Lcd5110WriteCMD(0x0C )。 //设定显示模式,正常显示 for (i=0。 i84。 i++) { Y0Ram[i]=Y1Ram[i]=Y2Ram[i]=Y3Ram[i]=0。 } } /* LCD_set_XY: 设置 LCD 坐标函数 输入参数: X: 0- 83 Y: 0- 5 */ void Lcd5110SetXY(uchar X,Y) { Lcd5110WriteCMD(0x40 | Y )。 // 垂直方向 05 Lcd5110WriteCMD(0x80 | X )。 // 水平方向 083 } /* LCD_clear: LCD 清屏函数 */ void Lcd5110Clear(void) { unsigned char t。 unsigned char k。 Lcd5110SetXY(0,0)。 for (t=0。 t6。 t++) { for (k=0。 k84。 k++) Lcd5110WriteDta(0x00)。 } 20 } LCD_write_shu 是 显示 8(宽) *16(高)点阵列数字字母符号等半角类, Addr 是写入地址, Row 是第几行 对于 6*8 点阵 实际 5*7 留有空边 ,字高 8 个点 , 屏幕一共 6行 竖着 48 个点, dd 是代表字符。 void Lcd5110Write6x8AtAddr(uchar row, addr, dat) { unsigned char i。 dat=dat32。 //ascii 转换为字库偏移地址 Lcd5110SetXY(addr, row1)。 // 某行的某个地址 行 16 地址 083 for (i=0。 i6。 i++) { Lcd5110WriteDta(Ascii6x8[dat*6+i])。 } } void Lcd5110show6x8AscWithNoAddr(uchar dat)//显示一个 6*8 点阵 { uchar i。 dat=32。 for (i=0。 i6。 i++) Lcd5110WriteDta(Ascii6x8[dat*6+i])。 } void Lcd5110String6x8(uchar row , addr, uchar *p) { Lcd5110SetXY(addr, row)。 // 列,页 while (*p!=39。 \039。 ) { Lcd5110show6x8AscWithNoAddr(*p++)。 } } void Lcd5110show8x16AscAtAddr(uchar row,addr, dat) { uchar i。 dat=32。 Lcd5110SetXY(addr,row)。 for (i=0。 i8。 i++) Lcd5110WriteDta。基于单片机的激光测距仪的设计与实现论文
相关推荐
为前提的,蓄电池可接受的充电曲线,如图 1 所示。 实验表明,如果充电电流按 这条曲线变化,就可以大大缩短充电时间,并且对电池的容量和寿命也没有影响。 原则上把这条曲线称为最佳充电曲线,从而奠定了快速充电方法的研究方向。 图 最佳充电 曲线 由图 可以看出:初始充电电流很大,但是衰减很快。 主要原因是充电过程中产生了极化现象。 在密封式蓄电池充电过程中,内部产生氧气和氢气,当氧 7
错后,就直接生产 hex 文件,然后进行( proteus)软件仿真。 我们用 proteus 绘制的仿真图如下: 图 、 软件仿真 在硬件设计完成后,利用软件对其进行仿真,这样,就会减少在做硬件时的错误,做到更准确。 本次我采用 Proteus 软件仿真。 第 16 页 如图 所示,电子万年历的时间仿真图。 图 经过此次的软件仿真,仿真结果正常,可以顺利的进行硬件制作。 、硬件调试
设计 在 LCD 显示子程序中,初始化后,从 LCD 中读状态字,判断 LCD 是否忙状态,不是则可向 LCD 写控制命令,再写数据,即显示数据。 19 图 LCD显示流程图 八、 程 序清单 include include //include //include define uint unsigned int define uchar unsigned char sbit
存储 )、 ROM(用于程序存储 )、 I/O 设备 (实现串行、并行输入 /输出接口 )及时钟电路 (建立工作时序 )。 在微型计算机中,上述部件被分成若干块芯片,安装在一块称之为主板的印刷线路板上,在程序的指挥下完成计算机的基本运算操作功能。 但是在单片机中,除了时钟电路之外,其余部分一般均被集成到一块半导体芯片上,所以被称为单片机,即单芯片微型计算机。 2) 控制功能类 控制功能类硬件包括
文) 8 ~: P2 口的 8 位准双向 I/O 端口。 在访问片外存储器时,它输出高 8位地址,即 A8~A15。 在不做总线时,也可以作为普通 I/O 口使用。 在对闪 存编程和验证程序时,它输入高 8 位地址。 ~: P3 口的 8 位准双向 I/O 端口。 这 8 个引脚都具有专门的第二功能,如表 22。 表 22 P3 口各位的第二功能 P3口的各位 第二功能的名称及作用
网络。 3.光纤温度传感器采用光纤温度传感器,光纤温度传感器是近几年发展的新技术,也是工业中用的最多的光纤传感器之一。 目前研究的光纤温度传感器主要有辐射式温度传感器、半导体吸收式温度传感器、光纤温度传感器等。 虽然光纤温度传感器的精度很高,但成本较贵。 4. 超声波传感器 声波传感器所发射和接收的声波,其振动频率都超过了人耳所能听到的范围。 它是通过计算声波从发射