Ⅰ 哪位高手有51单片机超声波模块测距LCD1602显示的电路图和C程序,跪求!!!!(超声波模块是买好的那种)
#include"reg52.h"
#include"intrins.h"
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={
'0','1','2','3','4','5','6','7','8','9'
};// 显示段码值0123456789
sbit LCD_EN=P3^4; //定义LCD使能端
sbit LCD_RS=P3^5; //定义LCD读写端
sbit la=P2^6; //数码管段先端
sbit wela=P2^7; //数码管位先端
/***********************************************/
/**********超声波检测引脚和变量定义*******************************/
sbit Trig=P2^4;// 定义HC-SR04发送端
sbit Echo=P2^5;//定义HC-SR04接收端
uint gewei='0'; //测量距离的个位
uint shiwei='0'; // 测量距离的十位
uint wei='0'; //测量距离的百位
uint qianwei='0';
uint s,time,flag;
/***********************************************/
/**********延时MS函数*******************************/
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/***********************************************/
/**********延时uS函数*******************************/
void delay_uS(uint z)
{
while(z--);
}
/**********************************************8/
/**********写命令*******************************/
void write_com(uchar com)
{
LCD_RS=0;
LCD_EN=0;
delay(5);
P0=com;
LCD_EN=1;
delay(5);
LCD_EN=0;
}
void write_data(uchar date)
{
LCD_RS=1;
LCD_EN=0;
delay(5);
P0=date;
LCD_EN=1;
delay(5);
LCD_EN=0;
}
/**********************************************/
/***********************************************/
/**********LCD1602初始化函数*******************************/
void init()
{
la=0;
wela=0;
LCD_EN=0;
write_com(0x38); //设置16X2显示,5X7点阵显示
write_com(0x0c); //开显示,不显光标
write_com(0x06); //显示一个字符后,地址指针加1且光标加1
write_com(0x01); //清屏
delay(5);
write_com(0x80+1); //从第一行0X10地址位开始显示
}
/***********************************************/
/**********计算距离函数*******************************/
void count(void)
{
time=TH0*256+TL0; //检测 所需时间
TH0=0;
TL0=0;
s=time*0.17*1.136*0.9674;// 计算距离,算出来的单位是CM
gewei=table[s%10];
shiwei=table[s/10%10];
wei=table[s/100%10];
qianwei=table[s/1000];
}
/***********************************************/
/**********T0中断函数*******************************/
void Time0() interrupt 1 //T0中断用作计数器溢出,超出测距范围
{
flag=1; //中断溢出标志
}
/***********************************************/
/**********启动模块函数*******************************/
void startmodle(void) //启动检测模块
{
uchar i;
// for(i=0;i<10;i++)
// {
Trig=1; //启动一次检测模块
delay_uS(20);
Trig=0; //停止向检测模块Trig端发送高电平
}
//}
/***********************************************/
/**********中断初始化函数*******************************/
void InterruptInit(void) //中断初始化
{
TMOD=0x01; //高T0工作方式为方式1,GATE=1
TH0=0;
TL0=0;
ET0=1; //允许T0中断
EA=1; // 开启总中断
}
/***********************************************/
/**********显示函数*******************************/
void Display(void)
{
write_com(0x80+1);
write_data(qianwei);
write_com(0x80+2);
write_data('.');
write_com(0x80+3);
write_data(wei);
write_com(0x80+4);
write_data(shiwei);
write_com(0x80+5);
write_data(gewei);
write_com(0x80+6);
write_data('M');
}
/***********************************************/
/**********主函数*******************************/
void main(void)
{
init(); //初始化LCD1602
while(1)
{
Display(); // 显示 距离,以M为单位
InterruptInit(); //中断初始化
startmodle(); // 启动检测模块
while(!Echo); //当接收为零时等待
TR0=1; //开启计数
while(Echo); //当接收为1计数并等待
TR0=0; //关闭计数
count(); //计算距离
Display(); // 显示 距离,以M为单位
delay(500); //延时80MS
}
}
Ⅱ 用单片机控制数码管显示电路图的运行原理
单片机控制数码管显示电路图的运行原理是利用人眼“视觉暂留”的原理来实现的。
1、根据科学论断,人眼视觉暂留时间是一帧也就是1/24秒,大约42毫秒时间。
2、在多个数码管显示电路中,控制上是通过扫描显示也就是分别分时给每个数码管送显示数据(段码+位码),而全部数码管的一次扫描时间不超过1/24秒。
3、要想达到稳定显示,经过试验,每个数码管数据暂留时间又不能太少,一般不少于3毫秒。因此一个单片机的扫描控制流程最多可以控制14个数码管。
4、扫描控制,一般用定时器来实现,51单片机有2个定时器,因此,最多可以同时控制28个数码管稳定显示。
Ⅲ 如何用单片机控制液晶显示器呀,怎么接线……
液晶显示器有字符型,如1602,这个液晶显示器目前是统一的,引脚和命令字都 是统一的。接线如下图所示
Ⅳ 单片机点阵595驱动芯片是什么
驱动电路。单片机点阵595驱动芯片通常指的是基于74HC595芯片设计的点阵显示模块驱动电路。74HC595是一种串行输入、并告正行输出的移位寄存器芯片,可以将串行数据袜笑悔转换为并行输出,常用于单片机驱动LED数码管、点阵升灶显示屏等应用中。点阵显示模块则是由多个LED灯组成的点阵阵列,通过将LED的亮灭控制组合可以显示各种图形和字符。单片机点阵595驱动芯片的作用就是将单片机产生的控制信号转换为点阵阵列中各个LED的亮灭控制信号,从而实现图形和字符的显示。
Ⅳ lcd1602显示流程图
lcd1602显示流程图:
LCD1602液晶显示器是广泛使用的一种字符型液晶显示模块。它是由字符型液晶显示屏(LCD)、控制驱动主电路HD44780及其扩展驱动电路HD44100,以及少量电阻、电容元件和结构件等装配在PCB板上而组成。
不同厂家生产的LCD1602芯片可能有所不同,但使用方法都是一样的。为了降低成本,绝大多数制造商都直接将裸片做到板子上。
(5)单片机显示模块电路扩展阅读:
LCD1602与单片机的连接有两种方式,一种是直接控制方式,另一种是所谓的间接控制方式。它们的区别只是所用的数据线的数量不同,其他都一样。
1、直接控制方式
LCD1602的8根数据线和3根控制线E,RS和R/W与单片机相连后即可正常工作。一般应用中只须往LCD1602中写入命令和数据,因此,可将LCD1602的R/W读/写选择控制端直接接地,这样可节省1根数据线。
VO引脚是液晶对比度调试端,通常连接一个10kΩ的电位器即可实现对比度的调整;也可采用将一个适当大小的电阻从该引脚接地的方法进行调整,不过电阻的大小应通过调试决定。
2、间接控制方式
间接控制方式也称为四线制工作方式,是利用HD44780所具有的4位数据总线的功能,将电路接口简化的一种方式。为了减少接线数量,只采用引脚DB4~DB7与单片机进行通信,先传数据或命令的高4位,再传低4位。
采用四线并口通信,可以减少对微控制器I/O的需求,当设计产品过程中单片机的I/O资源紧张时,可以考虑使用此方法。
Ⅵ 单片机中LED显示电路用三极管驱动电路怎么连接啊四个数码管。
//单片机中LED显示电路用三极管驱动电路四个数码管。可以参考一下
#include<reg52.h>
sbit led0=P3^2;
sbit led1=P3^3;
sbit led2=P3^4;
sbit led3=P3^5;
sbit ledd=P3^7;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char g,s,b,d,a;
unsigned int num;
void delay(unsigned char x)
{
unsigned char i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void display()
{
P1=table[d];
led3=0;
delay(5);
led3=1;
P1=table[b];
led2=0;
delay(5);
led2=1;
P1=table[s];
led1=0;
delay(5);
led1=1;
P1=table[g];
led0=0;
delay(5);
led0=1;
}
void ont()
{
num=0;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void main()
{
ont();
while(1)
{
if(a==20)
{
a=0;
ledd=~ledd;
num++;
d=num/1000;
b=num%1000/100;
s=num%100/10;
g=num%10;
}
display();
if(num==10000)
{
num=0;
}
} }
void time_0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
a++;
}
Ⅶ 单片机控制数码管显示电路图的运行原理是什么
原理:
数码管其实是由发光二极管组成,有共阴极和共阳极之分,对于共阳极来说,一位数码管由8个二极管组成,他们的阳极接在一起接+5v电源,而各个阴极与某个端口,如p1的8个引脚相连,当某个引脚输出低电平的时候数码管对应的二极管亮。
Ⅷ 在单片机应用系统中。LED数码管显示电路通常有什么显示方式
动态扫描。
LED灯是继电器工作状态指示灯,点亮代表继电器启动中,熄灭代表继电器关闭,LED1是伴同蜂鸣器报警的指示灯,只要数码管不处于设置时间状态,都能够用E归零键进行清零操作,数码管就会显示00:00 (此时不是对主芯片进行复位,只是对状态进行清零) 。
(8)单片机显示模块电路扩展阅读:
注意事项:
检查时若发光暗淡,说明器件已老化,发光效率太低。如果显示的笔段残缺不全,说明数码管已局部损坏。
对于型号不明、又无管脚排列图的LED数码管,用数字万用表的h距挡可完成下述测试工作:判定数码管的结构形式(共阴或共阳),识别管脚,检查全亮笔段。预先可假定某个电极为公共极,然后根据笔段发光或不发光加以验证。