launchpad超声波测距(摘自91MCU)
- 格式:docx
- 大小:20.64 KB
- 文档页数:10
基于单片机的超声波测距仪设计超声波测距仪是一种利用超声波测量距离的装置,具有测量速度快、精度高、非接触等特点,在机器人导航、自动控制、无损检测等领域得到了广泛的应用。
随着单片机技术的不断发展,基于单片机的超声波测距仪设计成为了可能,具有体积小、成本低、易于集成等优点。
本文将介绍一种基于单片机的超声波测距仪的设计与实现方法。
超声波测距仪的工作原理是利用超声波的传输特性来实现距离的测量。
超声波发射器发出超声波,超声波在空气中传播,遇到障碍物或被测物体后反射回来,被超声波接收器接收。
根据超声波的传播速度和传播时间,可以计算出超声波发射器与被测物体之间的距离。
一般来说,超声波的传播速度为340m/s,因此,距离计算公式为:距离 =传播速度×时间 / 2。
本设计选用STM32F103C8T6单片机作为主控制器,该单片机具有高性能、低功耗、丰富的外设接口等特点,满足系统的要求。
超声波测距仪的硬件部分包括超声波发射器、超声波接收器、单片机控制器和显示模块。
具体设计方案如下:(1)超声波发射器:采用HC-SR04模块,该模块集成了超声波发射器和接收器,输出脉冲宽度为5ms,驱动电压为5V。
(2)超声波接收器:同样采用HC-SR04模块,接收反射回来的超声波信号,并将其转换为电信号输出。
(3)单片机控制器:选用STM32F103C8T6单片机,接收超声波接收器输出的电信号,通过计算得到距离值,并将其输出到显示模块。
(4)显示模块:采用液晶显示屏,用于显示测量得到的距离值。
(1)初始化模块:对单片机、HC-SR04模块和液晶显示屏进行初始化。
(2)超声波发射模块:通过单片机控制HC-SR04模块发射超声波,并开始计时。
(3)超声波接收模块:接收反射回来的超声波信号,并输出到单片机。
(4)距离计算模块:根据超声波的传播速度和传播时间,计算出超声波发射器与被测物体之间的距离,并将其存储在单片机的存储器中。
(5)显示模块:将计算得到的距离值输出到液晶显示屏上。
超声波测距模块原理
超声波测距模块是一种常见的测距设备,它利用超声波的特性来实现距离的测量。
超声波是一种机械波,它的频率高于人类听觉的上限,通常被定义为20kHz 以上的声波。
超声波测距模块通常由发射器和接收器两部分组成,通过发射超声波并测量其返回时间来计算距离。
超声波测距模块的原理非常简单,首先是发射器发出超声波脉冲,然后接收器接收到超声波的回波。
利用超声波在空气中的传播速度是已知的,我们可以通过测量超声波发射和接收的时间差来计算距离。
具体的计算公式如下:距离 = (发射和接收时间差×声速) / 2。
其中,发射和接收时间差是以秒为单位的时间,声速是超声波在空气中的传播速度,通常为340m/s。
超声波测距模块的工作原理可以分为发射和接收两个过程。
在发射过程中,发射器会产生一系列超声波脉冲,并将其发射出去。
而在接收过程中,接收器会不断地监听回波,并记录下超声波发射和接收的时间差。
通过这一过程,超声波测距模块可以快速、准确地测量目标物体与传感器之间的距离。
超声波测距模块在实际应用中具有广泛的用途,例如在智能车辆中用于避障、在工业自动化中用于定位、在智能家居中用于安防等。
由于其简单、稳定、准确的特点,超声波测距模块已经成为许多电子设备中不可或缺的部分。
总的来说,超声波测距模块利用超声波的发射和接收原理,通过测量超声波的传播时间来实现距离的测量。
它具有测量精度高、响应速度快、结构简单等优点,因此在许多领域得到了广泛的应用。
希望本文对超声波测距模块的原理有所帮助,谢谢阅读!。
华中师范大学武汉传媒学院传媒技术学院课程设计报告华中师范大学武汉传媒学院传媒技术学院电子信息工程2011仅发布百度文库,版权所有.一、设计题目及原理超声波测距仪超声波测距仪是利用反射的原理测量距离的,被测距离一端为超声波传感器,另一端必须有能反射超声波的物体。
测量距离时,将超声波传感器对准反射物发射超声波,并开始计时,超声波在空气中传播到达障碍物后被反射回来,传感器接收到反射脉冲后立即停止计时,然后根据超声波的传播速度和计时时间就能计算出两端的距离。
测量距离D为式中c——超声波的传播速度;——超声波发射到接收所需时间的一半,也就是单程传播时间。
由上式可风,距离的测量精度主要取决于计时精度和传播速度两方面。
计时精度由单片机定时器决定,定时时间为机器周期与计数次数的乘积,可选用12MHz的晶振,使机器周期为精确的1µs,不会产生累积误差,使定时间达到1µs。
超声波的传播速度c并不是固定不变的,传播速度受空气密度、温度和气体分子成分的影响,关系式为式中γ——气体定压热容与定容热容的比值,空气为1.40R——气体普适常数,为8.314kg/molT——气体势力学温度,与摄氏温度的关系是T=273K+tM——气体相对分子质量,空气为28.8×10-3kg/mol——0℃时的声波速度,为331.4m/s由上式可见,超声波在空气中传播时,受温度影响最大,由表达式可计算出波速与温度的关系,如表2.1所示。
温度越高,传播速度越快,而且不同温度下传播速度差别非常大,例如0℃时的速度为332m/s,30℃时的速度为350m/s,相差18m/s。
因此,需要较高的测量精度时,进行温度补偿是最有效的措施。
对测量精度要求不高时,可认为超声波在空气中的传播速度为340m/s。
超声波传播速度与温度关系表二、设计框图超声波测距仪系统结构如下图所示。
它主要由单片机、超声波发射及接收电路、超声波传感器、温度传感器、键盘、LED显示电路及电源电路组成。
超声波测距程序详解根据上节课的内容,我们知道超声波模块具有很强的方向性,并且传播过程是直线传播,根据该特点,我们从“空心大萝卜运用题”推导出了超声波测距的计算公式为:•距离=时间×速度=时间(μs)×0.017(cm/μs)好了现在来编程,在上述公式中,我们仅需要确定“时间”,就可以获得测量点与实际物体的距离,那么时间怎么算?让我们先来回顾一下我们之前介绍的超声波模块的知识:•超声波测距的基本原理:通过超声波发射装置发出超声波,根据接收器接到超声波时的时间差就可以知道距离了。
超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时;•由于触到被测物体后返回,故其实际的返回时间应除以2后,才能计算出正确的时间。
•模块的四个输出引脚及功能分别为:▪VCC:超声波模块电源供电端,接阿板的+5V;▪GND:接阿板的GND;▪Trig:控制端,输入10us的触发脉冲信号后,超声波模块向外发射超声波;▪Echo:接收端,超声波发射时,该脚同时变为高电平,待超声波接收器收到到反射波后,变为低电平,通过测量该高电平的时间,即可算出测量点到当前位置的距离。
让我们再来回顾一下测量脉冲时间的阿板函数——pulseIn():pulseIn()函数:作用:用于测量脉冲持续时间格式:pulseIn(pin,HIGH/LOW,timeout)•pin:要测量的引脚;•HIGH/LOW:当选择HIGH时,引脚脉冲由低电平变为高电平时,计时器开始计时,当引脚由高电平变为低电平时,计时器停止计时;若选择LOW时,引脚脉冲由高电平变为低电平时,计时器开始及时,当引脚由低电平变为高电平时,计时器停止计时。
从而可以得到脉冲宽度;•Timeout:可选项,在该时间内若无变化,则返回测量时长为零;返回值:返回测量时长,单位为μs(微秒)。
超声波测距百度图片搜索有很多太阳风暴2015/4/15 22:59:04C9、D1、D2、C10组成的倍压检波电路取出反射回来的检测脉冲信号送至IC5进行处理。
IC5、IC6、IC7、IC8、IC9组成信号比较、测量、计数和显示电路,即比较和测量从发出的检测脉冲和该脉冲被反射回来的时间差。
它是超声波测距电路的核心,下面分析其工作原理。
由Ra、Rb、IC5组成信号比较器。
其中Vrf = (Rb x Vcc)/(Ra + Rb) = (47KΩx 9V)/(1MΩ+ 47KΩ) = 0.4V所以当A点(IC5的反相端)过来的脉冲信号电压高于0.4V时,B点电压将由高电平"1"到低电平"0"。
同时注意到在IC5的同相端接有电容C11和二极管D3,这是用来防止误检测而设置的。
在实际测量时,在测距仪的周围会有部分发出的超声波直接进入接收头而形成误检测。
为避免这种情况发生,这里用D3直接引入检测脉冲来适当提高IC5比较器的门限转换电压,并且这个电压由C11保持一段时间,这样在超声波发射器发出检测脉冲时,由于D3的作用使IC5的门限转换电压也随之被提高,并且由于C11的放电保持作用,可防止这时由于检测脉冲自身的干扰而形成的误检测。
由以上可知,当测量距离小到一定程度时,由于D3及C11的防误检测作用,其近距离测量会受到影响。
图示参数的最小测量距离在40cm左右。
减小C11的容量,在环境温度为20 时可做到30cm测量最短距离。
此时其放电时间为 1.75ms。
IC6组成R-S触发器构成时间测量电路。
可以看出,在发出检测脉冲时(A 端为高电平),D端输出高电平,当收到反射回来的检测脉冲时,C端由高变低,此时D端变为低电平,故输出端D的高电平时间即为测试脉冲往返时间。
计数和显示电路由IC6、IC7、IC8、IC9组成,IC7组成计数电路脉冲发生器,原理图如下。
其工作频率f = 1/(2.2 x C x R)。
本科自主创新设计题目: 基于MSP430_launchpad超声波测距系统姓名孙尚威学院电子工程学院专业电子信息科学与技术班级 02学号 49班内序号 04指导教师赵同刚2021年5月目录第1章绪论............................................................................................. 错误!未定义书签。
项目简介 .............................................................................................. 错误!未定义书签。
项目功能目标 ...................................................................................... 错误!未定义书签。
第2章超声波测距原理......................................................................... 错误!未定义书签。
超声波简介 .......................................................................................... 错误!未定义书签。
超声波测距原理 .................................................................................. 错误!未定义书签。
第3章方案论证..................................................................................... 错误!未定义书签。
超声波测距原理解读超声波测距技术是一种常见的非接触式测量方法,通过发射超声波并接收其反射信号来测量目标物体的距离。
本文将对超声波测距的原理进行解读。
一、超声波的发射与接收超声波是指频率高于20kHz的声波。
超声波测距一般采用压电式传感器进行发送与接收。
传感器通过施加电压使得压电晶体变形,进而产生超声波信号。
当超声波碰触到目标物体时,一部分能量将被反射回传感器,传感器再将接收到的信号转换为电信号进行处理。
二、超声波的传播与延时超声波在空气中的传播速度约为340m/s,该速度取决于空气中的密度和温度。
在测距过程中,测量仪器通过计算从发射到接收之间的时间延时,进而确定目标物体与测量仪器之间的距离。
三、测距原理解析超声波测距的原理基于超声波传播的时间差。
具体来说,测量仪器通过发送超声波信号,并记录下发射时刻。
当超声波遇到目标物体后被反射回传感器,传感器记录下接收到反射信号的时刻。
通过计算发射与接收的时间差,乘以超声波在空气中的传播速度,即可得到目标物体与测量仪器之间的距离。
超声波测距技术具有以下几个特点:1. 非接触式测量:超声波测距不需要与目标物体接触,避免了可能产生的物理损伤。
2. 高精度测量:超声波测距具有较高的测量精度,可以达到毫米级别。
3. 安全可靠:超声波属于无害的声波频率范围,不会对人体和物体造成损害。
4. 能够测量多种物体:超声波能够穿透大部分固体材料,对于金属、塑料、液体等各种材料都有良好的测量效果。
超声波测距技术被广泛应用于工业领域,包括物体检测、液位测量、距离校准等。
它在机器人导航、自动驾驶等领域也发挥重要作用。
总结起来,超声波测距技术通过发送和接收超声波信号,利用信号的传播时间差来测量目标物体与测量仪器之间的距离。
该技术具有高精度、非接触式测量和安全可靠等特点,已广泛应用于各个领域。
随着科技的不断进步,相信超声波测距技术将在未来发展出更多的应用和突破。
1 绪论超声测距是一种利用单片机控制超声波的轮流发射,并且通过单片机记录和读取发射超声波和接收回波的时间差,进而计算出测量的距离。
由于超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量,如测距仪和物理定位仪等都可以通过超声波来实现。
利用超声波检测往往比较迅速、方便、计算简单、易于做到实时控制,并且在测量精度方面达到很高的要求。
目前超声波测距已得到广泛应用,国内一般使用专用集成电路根据超声波测距原理设计各种测距仪器,但是专用集成电路的成本较高、功能单一。
而以单片机为核心的测距仪器可以实现预置、多端口检测、显示、报警等多种功能,并且成本低、精度高、操作简单、工作稳定可靠。
本文主要论述了利用5l系列单片机实现超声波测距的原理以及实现的方法。
该智能距离提示器主要是利用超声波探测传感器发送超声波来测试相对应的距离。
工作时,超声波发生器不断的发出一系列连续的脉冲,并给单片机提供一个短脉冲。
超声波遇障碍物反射回来一个反射波,这个反射波被超声波接收器收到,也向单片机提供一个短脉冲。
最后由单片机装置对接受信号依据时间差进行处理,自动计算出该智能距离提示器离障碍物之间的距离。
该超声波智能距离提示器具有硬件结构简单、工作可靠、测量误差小、方便等特点。
因此它不仅可以单单用作距离测量,还可以放在其它检测系统中。
随着科学技术的快速发展,超声波将在测距仪中的应用越来越广。
这是一个正在蓬勃发展而又有无限前景的技术及产业领域。
超声波测距是一种极有潜力的测距方法,近距范围内超声测距有其不受光线影响,结构简单,成本低等特点。
超声波测量的另一个突出优点是:环境介质可以为空气,液体或固体,适用范围广泛。
更重要的是超声波检测降低了劳动强度,避免工人在恶劣工作环境下(高,低温,强辐射等)受到伤害,还大大提高了测量精度,可靠性高;另外,超声波测距还可以应用到其他的功能系统中,例如在机器人避障系统;移动机器人避障的超声测距系统,智能机器人管家和简易智能电动车自动避障系统;自动刹车系统和倒车雷达系统,液位测量系统中超声波测距也有其重要的应用。
原文标题:用LaunchPad做了一个超声波测距,带5110驱动(ZT)本文来自|:/9mcubbs/forum.php?mod=viewthread&tid=963929#include<msp430g2553.h>#include"header.h"charflag_time = 0;long TIME0 = 0, TIME1 = 0; //存放时间的函数longL_juli = 0;long l = 0;charge,shi,bai,qian;//时钟初始化voidCLK_Init(void){if (CALBC1_8MHZ ==0xFF || CALDCO_8MHZ == 0xFF){while(1); // If calibration constants erased// do not load, trap CPU!!}BCSCTL1 = CALBC1_8MHZ; // Set rangeDCOCTL = CALDCO_8MHZ; // Set DCO step + modulation */BCSCTL2 |= 0X02; //SMCLK为DCO的2分频,4M}//端口初始化voidGPIO_Init(void){P1DIR |= 0xf0;P2DIR |= 0x03;//P2.3作为捕获输入P2SEL |= 0x08;P2DIR |= 0x04; //P2.2作为触发端,设为输出P2OUT &= 0xfb; //P2.2输出低电平P1IES = 0x08; //P1.3为下降沿触发中断P1IE = 0x08; //P1.3中断允许P1IFG = 0x00; //清除中断标志}//定时器TIME1_A3初始化函数void TIME1_A3_Init(void){TA1CTL |= TASSEL1 + MC_2; //SMCLK作为时钟源,连续计数模式TA1CCTL0 |= CM_3 + CCIS_1 + SCS + CAP + CCIE; //上升沿与下降沿都捕获,//输入源为CCI0B,同步捕获模式,使能中断}//主函数int main(void){WDTCTL = WDTPW + WDTHOLD; //关闭看门狗定时器CLK_Init();GPIO_Init();TIME1_A3_Init();LCD5110_Init();LCD5110_Clear_All();LCD5110_SET_XY(0, 1);Write_String(table1);LCD5110_BL_H;_EINT(); //中断使能while(1){LPM0;_NOP();}}//定时器Timer1_A CCR0中断服务函数#pragma vector = TIMER1_A0_VECTOR__interrupt void TIMER1_A0__ISR(void){if (flag_time == 0){P2OUT &= ~0x04; //P2.2输出低电平TIME0 = TA1CCR0;flag_time ++;}else{TIME1 = TA1CCR0;flag_time = 0;if (TIME1 > TIME0){TIME1 = TIME1 - TIME0;}else{TIME1 = TIME1 + (65535 - TIME0);}l = TIME1*170;L_juli = l/4000;ge = L_juli % 10 + 48;shi = (L_juli/10) % 10 + 48;bai = (L_juli/100) % 10 + 48;qian = (L_juli/1000) % 10 + 48;LCD5110_Clear(4);LCD5110_SET_XY(0, 4);Write_Char(qian);Write_Char(bai);Write_Char(shi);Write_Char(ge);}}//P1口中断服务函数#pragma vector = PORT1_VECTOR__interrupt void P1_ISR(void){switch (P1IFG){case 0x01:P1IFG &= ~0x01;break;case 0x02:P1IFG &= ~0x02;break;case 0x04:P1IFG &= ~0x04;break;case 0xF8:P2OUT |= 0x04; //P2.2输出高电平P1IFG &= ~0x08;break;case 0x10:P1IFG &= ~0x10;break;case 0x20:P1IFG &= ~0x20;break;case 0x40:P1IFG &= ~0x40;break;case 0x80:P1IFG &= ~0x80;break;default :P1IFG = 0x00;break;}}/********************************************//*显示部分自己修改即可*//********************************************/header.h#ifndef _HEADER_H#define _HEADER_H/************************************************************LCD函数声明************************************************************/#define LCD5110_CE_H P1OUT |= 0x80 //5110片选P1.7置位#define LCD5110_CE_L P1OUT &= 0x7f //5110片选P1.7复位#define LCD5110_DC_H P1OUT |= 0x40 //5110数据命令选择端P1.6置位#define LCD5110_DC_L P1OUT &= 0xbf //5110数据命令选择端P1.6复位#define LCD5110_DIN_H P1OUT |= 0x20 //5110数据输入端P1.5置位#define LCD5110_DIN_L P1OUT &= 0xdf //5110数据输入端P1.5复位#define LCD5110_CLK_H P1OUT |= 0x10 //5110数据命令选择端P1.4置位#define LCD5110_CLK_L P1OUT &= 0xef //5110数据命令选择端P1.4复位#define LCD5110_BL_H P2OUT |= 0x02 //5110背光控制端P2.1置位#define LCD5110_BL_L P2OUT &= 0xfd //5110背光控制端P2.1复位#define LCD5110_RES_H P2OUT |= 0x01 //5110背光控制端P2.0置位#define LCD5110_RES_L P2OUT &= 0xfe //5110背光控制端P2.0复位#define LCD_CMD 0x00#define LCD_DATA 0xffextern void DELAYms(unsigned int time); //延时ms函数extern void LCD5110_SET_XY(char x, char y); //写坐标函数extern void LCD5110_Init(void); //屏幕初始化extern void LCD5110_Clear(unsigned char L); //清除指定行extern void LCD5110_Clear_All(void); //清除全屏extern void Write_Char(char c); //写一个ASCII字符extern void Write_String(const char *p); //写字符串/*************************************************************ASCII字符库8*6*************************************************************///const char ASCII_8X6[92][6];#endif55110.c#include<msp430g2553.h>#include<string.h>#include"header.h"/*************************************************************ASCII字符库8*6*************************************************************/const char ASCII_8X6[92][6]={{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // sp{ 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00 }, // !{ 0x00, 0x00, 0x07, 0x00, 0x07, 0x00 }, // "{ 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14 }, // #{ 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12 }, // ${ 0x00, 0x62, 0x64, 0x08, 0x13, 0x23 }, // %{ 0x00, 0x36, 0x49, 0x55, 0x22, 0x50 }, // &{ 0x00, 0x00, 0x05, 0x03, 0x00, 0x00 }, // '{ 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00 }, // ({ 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00 }, // ){ 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14 }, // *{ 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00 }, // , { 0x00, 0x08, 0x08, 0x08, 0x08, 0x08 }, // - { 0x00, 0x00, 0x60, 0x60, 0x00, 0x00 }, // . { 0x00, 0x20, 0x10, 0x08, 0x04, 0x02 }, // / { 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E }, // 0 { 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00 }, // 1 { 0x00, 0x42, 0x61, 0x51, 0x49, 0x46 }, // 2 { 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31 }, // 3 { 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10 }, // 4 { 0x00, 0x27, 0x45, 0x45, 0x45, 0x39 }, // 5 { 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30 }, // 6 { 0x00, 0x01, 0x71, 0x09, 0x05, 0x03 }, // 7 { 0x00, 0x36, 0x49, 0x49, 0x49, 0x36 }, // 8 { 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E }, // 9 { 0x00, 0x00, 0x36, 0x36, 0x00, 0x00 }, // : { 0x00, 0x00, 0x56, 0x36, 0x00, 0x00 }, // ; { 0x00, 0x08, 0x14, 0x22, 0x41, 0x00 }, // < { 0x00, 0x14, 0x14, 0x14, 0x14, 0x14 }, // = { 0x00, 0x00, 0x41, 0x22, 0x14, 0x08 }, // > { 0x00, 0x02, 0x01, 0x51, 0x09, 0x06 }, // ? { 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E }, // @ { 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C }, // A { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36 }, // B { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22 }, // C { 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C }, // D { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41 }, // E { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01 }, // F { 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A }, // G { 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F }, // H { 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00 }, // I { 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01 }, // J { 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41 }, // K { 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40 }, // L { 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F }, // M { 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F }, // N { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E }, // O { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06 }, // P { 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E }, // Q { 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46 }, // R { 0x00, 0x46, 0x49, 0x49, 0x49, 0x31 }, // S { 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01 }, // T { 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F }, // U { 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F }, // V{ 0x00, 0x63, 0x14, 0x08, 0x14, 0x63 }, // X{ 0x00, 0x07, 0x08, 0x70, 0x08, 0x07 }, // Y{ 0x00, 0x61, 0x51, 0x49, 0x45, 0x43 }, // Z{ 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00 }, // [{ 0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55 }, // 55{ 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00 }, // ]{ 0x00, 0x04, 0x02, 0x01, 0x02, 0x04 }, // ^{ 0x00, 0x40, 0x40, 0x40, 0x40, 0x40 }, // _{ 0x00, 0x00, 0x01, 0x02, 0x04, 0x00 }, // '{ 0x00, 0x20, 0x54, 0x54, 0x54, 0x78 }, // a{ 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38 }, // b{ 0x00, 0x38, 0x44, 0x44, 0x44, 0x20 }, // c{ 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F }, // d{ 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02 }, // f{ 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C }, // g{ 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78 }, // h { 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00 }, // i{ 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00 }, // j { 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00 }, // k{ 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00 }, // l{ 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78 }, // m{ 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78 }, // n{ 0x00, 0x38, 0x44, 0x44, 0x44, 0x38 }, // o{ 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18 }, // p{ 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC }, // q{ 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08 }, // r{ 0x00, 0x48, 0x54, 0x54, 0x54, 0x20 }, // s{ 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20 }, // t{ 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C }, // u{ 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C }, // v{ 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C }, // w{ 0x00, 0x44, 0x28, 0x10, 0x28, 0x44 }, // x{ 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C }, // y{ 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44 }, // z{ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14 } // horiz lines };voidDELAYms(unsigned int time){unsignedinti,n;for (n = time; n > 0; n --){for (i = 4000; i> 0; i --){_NOP();}}}//写1字节数据或命令函数void LCD5110_WriteByte(char WriteData, char Cmd_Data){unsignedinti;LCD5110_CE_L;if (Cmd_Data){LCD5110_DC_H;}elseLCD5110_DC_L;for (i = 0; i< 8; i ++){if (WriteData& 0x80){LCD5110_DIN_H;}elseLCD5110_DIN_L;WriteData<<= 1;LCD5110_CLK_L;_NOP();LCD5110_CLK_H;}LCD5110_DC_H;LCD5110_CE_H;LCD5110_DIN_H;//P1IFG = 0X00;}//写入坐标地址void LCD5110_SET_XY(char x, char y){LCD5110_WriteByte(0x40|y, 0); //设置y轴的坐标,y的范围为0~5LCD5110_WriteByte(0x80|x, 0); //设置x轴的坐标,x的范围为0~83 }//液晶屏初始化void LCD5110_Init(void){LCD5110_RES_L;DELAYms(10);LCD5110_RES_H;LCD5110_WriteByte(0x21, 0); //功能设置为拓展指令集LCD5110_WriteByte(0xc6, 0); //设置液晶偏置电压LCD5110_WriteByte(0x06, 0); //温度校正LCD5110_WriteByte(0x13, 0); //偏置为1:48LCD5110_WriteByte(0x20, 0); //功能设置为基本指令集LCD5110_WriteByte(0x0c, 0); //设置显示模式为普通模式}//清除指定行void LCD5110_Clear(unsigned char L){chari = 0;if (L < 6){LCD5110_SET_XY(0, L);for (i = 0; i< 84; i ++){LCD5110_WriteByte(0x00, LCD_DATA);}}}//整个屏幕清除void LCD5110_Clear_All(void){unsigned char i;for (i = 0; i< 6; i ++){LCD5110_Clear(i);}}//写一个字符的函数voidWrite_Char(char c){unsigned char i;unsigned char j;i = c - 0x20;for (j = 0; j < 6; j ++){LCD5110_WriteByte(ASCII_8X6[i][j], LCD_DATA);}}voidWrite_String(const char *p){unsigned char i;for (i = 0; i<strlen(p); i ++){Write_Char(p[i]);}}。