Ⅰ 哪位高手有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距擋可完成下述測試工作:判定數碼管的結構形式(共陰或共陽),識別管腳,檢查全亮筆段。預先可假定某個電極為公共極,然後根據筆段發光或不發光加以驗證。