资源简介

超声波测距+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


评论

共有 条评论