《基于51单片机的US-100(超声波模块)1602显示程序(共7页).doc》由会员分享,可在线阅读,更多相关《基于51单片机的US-100(超声波模块)1602显示程序(共7页).doc(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上/*/ Name: LCD1602+US-100+STC89C52 HC-SR04 超声波测距模块串口程序 晶振:11.0592M Designed by : 庶野琴风 Date:2016/08/11 QQ: 接线:模块TRIG接 P3.1 ECH0 接P3.0 RS(CS) 接 P2.0; RW(SID) 接 P2.1; E(SCLK) 接 P2.2; BF 接 P0.7; /*/#include#include#define nops _nop_();_nop_();_nop_();_nop_();/*引脚及变量的定义*/sbit RS = P20; /寄存器选择
2、位sbit RW = P21; /读取选择位sbit E = P22; /使能信号位sbit BF = P07; /忙碌信号位unsigned char code Tab = ;unsigned char code string = range:2cm-4.5m;char part,ge,shi,bai;char idata GLengthLoh2; /接收缓冲区bit success_flag; /定义测试成功标志位/*/*函数名称:delay1ms(void) */*函数功能:延时1毫秒 */*函数参数:void */*/void delay1ms(void) /误差 -0.7us cha
3、r a,b; for(b=102;b0;b-) for(a=3;a0;a-); /*/*函数名称:delaynms(char n) */*函数功能:延时n个1毫秒 */*函数参数:n */*/void delaynms(char n) char a;for(a = 0;a n;a-) delay1ms();/*/*函数名称:BusyTest(void) */*函数功能:判断液晶模块忙碌状态*/*函数参数:返回值:result */*/unsigned char BusyTest() bit result; RS = 0; RW = 1; /RS为低电平,RW为高电平时,可以读状态E = 1;
4、/使能为高电平时可读取信息nops; /延时40us,给硬件反应时间result = BF; /将忙碌标志位电平赋给resultE = 0; /使能1到0:执行指令return result;/*/*函数名称:WriteInstruction(char dictate)*/*函数功能:将模式设置指令或显示地址写入液晶模块*/*函数参数:dictate */*/void WriteInstruction(char dictate) while(BusyTest() = 1); /如果忙碌标志位忙碌则等待RS = 0;RW = 0; /RS/RW位同时为低电平时可写入指令E = 0; /使能0到1
5、:写入指令nops;P0 = dictate; /将数据送入P0口,写入数据或地址nops;E = 1; /使能0到1:写入指令nops;E = 0; /使能1到0:执行指令/*/*函数名称:WriteAddress(char x) */*函数功能:指定字符显示的实际地址 */*函数参数:x */*/void WriteAddress(char x) WriteInstruction(x|0x80);/80H+地址码/*/*函数名称:WriteData(char y) */*函数功能:将数据(字符的标准ASCII码)写入液晶模块*/*函数参数:y */*/void WriteData(char
6、 y) while(BusyTest() = 1); /如果忙碌标志位忙碌则等待RS = 1;RW = 0; /RS为高电平,RW为低电平时,可以写入数据E = 0;P0 = y;nops;E = 1;nops;E = 0;/*/*函数名称:LCDInit(void) */*函数功能:液晶模块初始化 */*函数参数:void */*/void LCDInit(void) delaynms(15); /延时15毫秒,首次写入液晶指令应给反应时间WriteInstruction(0x38);/显示模式设置:162显示,57点阵,8位数据接口delaynms(5); /延时5秒,反应时间 Write
7、Instruction(0x38);delaynms(5); /延时5秒,反应时间WriteInstruction(0x38);delaynms(5); /连续三次,确保初始化成功WriteInstruction(0x0c); /显示模式设置:显示开,无光标,光标不闪烁delaynms(5);WriteInstruction(0x06);/显示模式设置:显示光标右移,屏幕不移动delaynms(5);WriteInstruction(0x01); /清屏delaynms(5);/*/*函数名称:UART_Send(char dat) */*函数功能:串口发送函数 */*函数参数:dat */*
8、/void UART_Send(char dat) TI = 0; / 清发送标志 SBUF = dat; /如果TI为0等待 while (!TI); /等待发送数据/*/*函数名称:UART_Init() */*函数功能:串口初始化函数 */*函数参数:无 */*/void UART_Init() TH1 = 0xFD; TL1 = 0xFD; TMOD = 0x21; /设置定时器1为模式2;定时器0为模式1 TH0 =(65536-2500)/256; /约2.50MS定时器初值 TL0 =(65536-2500)%256; /约2.50MS定时器初值 ET0 = 1; TR0 = 1
9、; /启动定时器 TR1 = 1; /启动定时器 SM0 SM1 SM0 = 0; /串口通信模式设置 0 0 = 0 SM1 = 1; / 0 1 = 1 / 1 0 = 2 / 1 1 = 3 REN = 1; /串口允许接收数据 ES = 1; /开串中断 EA = 1;/*/*函数名称:UART_ISR(void) */*函数功能:串口中断函数 */*函数参数:void */*/void UART_ISR(void) interrupt 4 char temp,k; ES = 0; /关中断 if(RI) RI = 0; /清接收标志 temp = SBUF; GLengthLohk
10、= temp; k+; if(k = 2) /k=数据长度 k = 0; ES = 1; /开中断/*/*函数名称:timer0() */*函数功能:定时器函数 */*函数参数:void */*/timer0() interrupt 1 / 定时器0中断是1号 TH0 =(65536-2500)/256; /约2.50MS定时器初值 TL0 =(65536-2500)%256; /约2.50MS定时器初值 TH0 = 0xef; TL0 = 0x94; /写入定时器0初始值/*/*函数名称:conversion(int8 temp_data) */*函数功能:数据转换 */*函数参数:temp
11、_data */*/void conversion(int temp_data) char part_data,ge_data,shi_data,bai_data;bai_data = temp_data / 1000;shi_data = (temp_data % 1000) / 100;ge_data = (temp_data % 100) / 10;part_data = temp_data % 10;EA = 0;bai = bai_data;shi = shi_data;ge = ge_data;part = part_data;EA = 1;/*/*函数名称:main(void)
12、*/*函数功能:主函数 */*函数参数:void */*/void main(void) int k;long PreLength; LCDInit(); /调用液晶初始化函数delaynms(10); UART_Init();PreLength = 0;k = 0;while(1) WriteAddress(0x01); while(stringk != 0) WriteData(stringk); k+; UART_Send(0X55); PreLength = GLengthLoh0 * 256 + GLengthLoh1 - 5; conversion(PreLength); Writ
13、eAddress(0x41); /从第2行第6列开始显示 WriteData(J); /将特定的字符常量写入LCD WriteData(U); WriteData(L); WriteData(I); WriteData(:); if(PreLength = 20) WriteData(Tabbai); /将百位数字的字符常量写入LCD WriteData(Tabshi); /将十位数字的字符常量写入LCD WriteData(Tabge); /将个位数字的字符常量写入LCD WriteData(.); WriteData(Tabpart); else WriteData(-); WriteData(-); WriteData(-); WriteData(-); WriteData(-); WriteData( ); WriteData(c); WriteData(m); 专心-专注-专业