《2022年超声波测距LC显示源代码 .pdf》由会员分享,可在线阅读,更多相关《2022年超声波测距LC显示源代码 .pdf(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、/*= /HC-SRO4 超声波测距模块DEMO 程序/淘宝店铺 :创威电子= SMC1602A(16*2) 模拟口线接线方式连接线图 : - |LCM-51 | LCM-51 | LCM-51 | -| |DB0-P0.0 | DB4-P0.4 | RW-P2.5 | |DB1-P0.1 | DB5-P0.5 | RS-P2.6 | |DB2-P0.2 | DB6-P0.6 | E-P2.7 | |DB3-P0.3 | DB7-P0.7 | VLCD接 1K 电阻到 GND| - 接线:模块TRIG 接 P2.0 ECH0 接 P2.1 本程序源码只供学习参考,不得应用于商业用途,如有需要请
2、联系作者。注:STC 单片机使用 12M 或 11.0592M 晶振 ,实测使用 11.0592M =*/ #include /器件配置文件#include sbit RX = P21; sbit TX = P20; sbit LCM_RS = P26; /复位端sbit LCM_RW = P25; /写数据端sbit LCM_E = P27; /使能端#define LCM_Data P0 #define Busy 0 x80 /用于检测 LCM 状态字中的Busy 标识void LCMInit(void); void DisplayOneChar(unsigned char X, unsi
3、gned char Y , unsigned char DData); void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData); void Delay5Ms(void); void Delay400Ms(void); void Decode(unsigned char ScanCode); void WriteDataLCM(unsigned char WDLCM); void WriteCommandLCM(unsigned char WCLCM,BuysC); 名师资料总结 - -
4、-精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 7 页 - - - - - - - - - unsigned char ReadDataLCM(void); unsigned char ReadStatusLCM(void); unsigned char code mcustudio =The distance is ; unsigned char code ASCII15 = 0,1,2,3,4,5,6,7,8,9,.,-,M; static unsigned char DisNum = 0
5、; / 显示用指针unsigned int time=0; unsigned long S=0; bit flag =0; unsigned char disbuff4 = 0,0,0,0,; /写数据void WriteDataLCM(unsigned char WDLCM) ReadStatusLCM(); / 检测忙LCM_Data = WDLCM; LCM_RS = 1; LCM_RW = 0; LCM_E = 0; / 若晶振速度太高可以在这后加小的延时LCM_E = 0; / 延时LCM_E = 1; /写指令void WriteCommandLCM(unsigned char W
6、CLCM,BuysC) /BuysC为 0 时忽略忙检测 if (BuysC) ReadStatusLCM(); / 根据需要检测忙LCM_Data = WCLCM; LCM_RS = 0; LCM_RW = 0; LCM_E = 0; LCM_E = 0; LCM_E = 1; /读数据unsigned char ReadDataLCM(void) LCM_RS = 1; LCM_RW = 1; LCM_E = 0; LCM_E = 0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - -
7、 第 2 页,共 7 页 - - - - - - - - - LCM_E = 1; return(LCM_Data); /读状态unsigned char ReadStatusLCM(void) LCM_Data = 0 xFF; LCM_RS = 0; LCM_RW = 1; LCM_E = 0; LCM_E = 0; LCM_E = 1; while (LCM_Data & Busy); /检测忙信号return(LCM_Data); void LCMInit(void) /LCM初始化 LCM_Data = 0; WriteCommandLCM(0 x38,0); /三次显示模式设置,不
8、检测忙信号Delay5Ms(); WriteCommandLCM(0 x38,0); Delay5Ms(); WriteCommandLCM(0 x38,0); Delay5Ms(); WriteCommandLCM(0 x38,1); /显示模式设置 ,开始要求每次检测忙信号WriteCommandLCM(0 x08,1); /关闭显示WriteCommandLCM(0 x01,1); /显示清屏WriteCommandLCM(0 x06,1); / 显示光标移动设置WriteCommandLCM(0 x0c,1); / 显示开及光标设置 /按指定位置显示一个字符void DisplayOn
9、eChar(unsigned char X, unsigned char Y , unsigned char DData) Y &= 0 x1; X &= 0 xF; / 限制 X 不能大于 15,Y 不能大于 1 if (Y) X |= 0 x40; / 当要显示第二行时地址码+0 x40; X |= 0 x80; / 算出指令码WriteCommandLCM(X, 1); /发命令字WriteDataLCM(DData); /发数据 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第
10、 3 页,共 7 页 - - - - - - - - - /按指定位置显示一串字符void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData) unsigned char ListLength; ListLength = 0; Y &= 0 x1; X &= 0 xF; / 限制 X 不能大于 15,Y 不能大于 1 while (DDataListLength0 x19) /若到达字串尾则退出 if (X =700)|flag=1) / 超出测量范围显示“-” flag=0; Display
11、OneChar(0, 1, ASCII11); DisplayOneChar(1, 1, ASCII10); /显示点DisplayOneChar(2, 1, ASCII11); DisplayOneChar(3, 1, ASCII11); DisplayOneChar(4, 1, ASCII12); /显示 M else disbuff0=S%1000/100; disbuff1=S%1000%100/10; disbuff2=S%1000%10 %10; DisplayOneChar(6, 1, ASCIIdisbuff0); DisplayOneChar(7, 1, ASCII10);
12、/显示点DisplayOneChar(8, 1, ASCIIdisbuff1); DisplayOneChar(9, 1, ASCIIdisbuff2); DisplayOneChar(10, 1, ASCII12); /显示 M /*/ void zd0() interrupt 1 /T0 中断用来计数器溢出,超过测距范围 flag=1; /中断溢出标志 /*/ void StartModule() /启动模块 TX=1; /启动一次模块_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(
13、); _nop_(); _nop_(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 7 页 - - - - - - - - - _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); TX=0; /*/ void delayms(unsigned int ms) unsigned char i=100,j; for(;ms;ms-) while
14、(-i) j=10; while(-j); /*/ void main(void) / unsigned char TempCyc; Delay400Ms(); / 启动等待,等LCM 讲入工作状态LCMInit(); /LCM初始化Delay5Ms(); / 延时片刻 (可不要 ) DisplayListChar(0, 0, mcustudio); while(1) TMOD=0 x01; /设 T0 为方式 1,GATE=1;TH0=0; TL0=0; ET0=1; /允许 T0 中断EA=1; /开启总中断while(1) StartModule(); 名师资料总结 - - -精品资料欢
15、迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 7 页 - - - - - - - - - / DisplayOneChar(0, 1, ASCII0); while(!RX); /当 RX 为零时等待TR0=1; /开启计数while(RX); /当 RX 为 1 计数并等待TR0=0; /关闭计数Conut(); /计算delayms(80); /80MS 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 7 页 - - - - - - - - -