资源简介
超声波测距+LCD显示+蜂鸣器报警的代码,没有工程;
P2^0接蜂鸣器,P1^4和P1^5接超声波传感器,P0接LCD;
代码片段和文件信息
#include “lcd.h“
void Lcd1602_Delay1ms(uint c) //延时1ms,误差 0us,该函数是在12MHZ晶振下,12分频单片机的延时。
{
uchar ab;
for (; c>0; c--)
{
for (b=199;b>0;b--)
{
for(a=1;a>0;a--);
}
}
}
//向LCD写入一个字节的命令
#ifndef LCD1602_4PINS//当没有定义这个LCD1602_4PINS时
void LcdWriteCom(uchar com)//写入命令
{
LCD1602_E = 0;//使能
LCD1602_RS = 0;//选择发送命令
LCD1602_RW = 0;//选择写入
LCD1602_DATAPINS = com;//放入命令
Lcd1602_Delay1ms(1);//等待数据稳定
LCD1602_E = 1;//写入时序
Lcd1602_Delay1ms(5);//保持时间
LCD1602_E = 0;
}
#else
void LcdWriteCom(uchar com)//写入命令
{
LCD1602_E = 0;//使能清零
LCD1602_RS = 0;//选择写入命令
LCD1602_RW = 0;//选择写入
LCD1602_DATAPINS = com;//由于4位的接线是接到P0口的高四位,所以传送高四位不用改
Lcd1602_Delay1ms(1);
LCD1602_E = 1;//写入时序
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
LCD1602_DATAPINS = com << 4;//发送低四位
Lcd1602_Delay1ms(1);
LCD1602_E = 1;//写入时序
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
}
#endif
//向LCD写入一个字节的数据
#ifndef LCD1602_4PINS
void LcdWriteData(uchar dat)//写入数据
{
LCD1602_E = 0;//使能清零
LCD1602_RS = 1;//选择输入数据
LCD1602_RW = 0;//选择写入
LCD1602_DATAPINS = dat;//写入数据
Lcd1602_Delay1ms(1);
LCD1602_E = 1;//写入时序
Lcd1602_Delay1ms(10);//保持时间
LCD1602_E = 0;
}
#else
void LcdWriteData(uchar dat)//写入数据
{
LCD1602_E = 0;//使能清零
LCD1602_RS = 1;//选择写入数据
LCD1602_RW = 0;//选择写入
LCD1602_DATAPINS = dat;//由于4位的接线是接到P0口的高四位,所以传送高四位不用改
Lcd1602_Delay1ms(1);
LCD1602_E = 1;//写入时序
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
LCD1602_DATAPINS = dat << 4;//写入低四位
Lcd1602_Delay1ms(1);
LCD1602_E = 1;//写入时序
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
}
#endif
//初始化LCD屏
#ifndef LCD1602_4PINS
void LcdInit()//LCD初始化子程序
{
LcdWriteCom(0x38);//开显示
LcdWriteCom(0x0c);//开显示不显示光标
LcdWriteCom(0x06);//写一个指针加1
LcdWriteCom(0x01);//清屏
LcdWriteCom(0x80);//设置数据指针起点
}
#else
void LcdInit()//LCD初始化子程序
{
LcdWriteCom(0x32);//将8位总线转为4位总线
LcdWriteCom(0x28);//在四位线下的初始化
LcdWriteCom(0x0c);//开显示不显示光标
LcdWriteCom(0x06);//写一个指针加1
LcdWriteCom(0x01);//清屏
LcdWriteCom(0x80);//设置数据指针起点
}
#endif
void LcdSetCursor(uchar xuchar y)//坐标显示
{
uchar addr;
if(y == 0)
addr = 0x00 + x;
else
addr = 0x40 + x;
LcdWriteCom(addr|0x80);
}
//按指定位置显示一个字符
void DisplayOneChar(uchar X uchar Y uchar DData)
{
Y &= 0x1;
X &= 0xF;//限制X不能大于15,Y不能大于1
if (Y) X |= 0x40;//当要显示第二行时地址码+0x40;
X |= 0x80;//算出指令码
LcdWriteCom(X);//发命令字
LcdWriteData(DData);//发数据
}
void LcdShowStr(uchar xuchar yuchar *str)//显示字符串
{
LcdSetCursor(xy);//当前字符的坐标
while(*str != ‘\0‘)
{
LcdWriteData(*str++);
}
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3102 2019-12-23 19:10 lcd.c
文件 1195 2019-12-24 01:27 lcd.h
文件 4752 2019-12-24 23:07 main.c
文件 2985 2019-12-23 19:14 postion.c
----------- --------- ---------- ----- ----
12034 4
- 上一篇:Verilog课程设计自动售货机
- 下一篇:最小二乘法及数据拟合建模的回归分析
相关资源
- 单片机实现密码锁(1602显示)_带设置
- 距离多普勒成像算法分析
- 基于51单片机的智能垃圾桶V4.01.docx
- 基于51单片机的温度显示报警系统
- 51单片机室温 体温测量
- 基于51单片机的ds18b20温度传感器实现
- 基于51单片机的温度报警系统
- 基于51单片机矩阵按键电子琴设计-完
- 基于51单片机的水箱水位检测系统.r
- 基于单片机的无线多路温度传输
- 51单片机点阵俄罗斯方块代码
- 51单片机Protues,仿真PT100温度传感器,
- 基于AT89C51单片机的家庭防盗报警系统
- 基于51单片机的温度报警
- 基于51单片机的智能调光台灯源码+原
- μC/OS-II在MCS-51单片机移植
- 高速运动目标的瞬时距离
- 基于stc89c52单片机的节拍音乐器设计
- 基于51单片机AD7705使用的C程序
- 两片74HC595显示4位数码程序(C51单片机
- 基于C51单片机多功能时钟系统
- 基于51单片机的10位DA芯片 TLC5615的C应
- 嵌入式系统图形界面 GUI 基于51单片机
- 基于DSP和单片机的超声波测距系统
- 51单片机控制智能恒温混水阀
- 51单片机红外收发程序
- 51单片机作为i2c从设备加密芯片+红外
- STC89C51单片机RC522读卡程序,Keil文件,
- 电子称 51单片机 1602显示 HX710AD芯片
- 51单片机驱动160160液晶显示程序
评论
共有 条评论