標(biāo)題:
用vb上位機(jī)控制單片機(jī)測(cè)距的設(shè)計(jì)
[打印本頁(yè)]
作者:
大青衣
時(shí)間:
2018-12-30 15:56
標(biāo)題:
用vb上位機(jī)控制單片機(jī)測(cè)距的設(shè)計(jì)
上午是我第一次發(fā)帖,,竟然通過(guò)了而且還獎(jiǎng)勵(lì)了88幣,嘖嘖太美了,迫不及待的再發(fā)一個(gè)!如題也是上位機(jī)控制的單片機(jī),不過(guò)這次高級(jí)一點(diǎn):測(cè)距。
vb上位機(jī)的運(yùn)行界面:
捕獲.PNG
(26.65 KB, 下載次數(shù): 65)
下載附件
2018-12-30 15:54 上傳
也是用vb編寫(xiě)的。
捕獲2.PNG
(9.15 KB, 下載次數(shù): 60)
下載附件
2018-12-30 15:54 上傳
單片機(jī)源程序:
/*****************************************
* 項(xiàng)目: 單片VB上位機(jī)視頻教程 *
* 單片機(jī): STC89C52 *
* 晶振: 11.0592M *
* 開(kāi)發(fā): E動(dòng)力電子工作室 *
* 作者: LinHill *
* 郵箱: power_e@126.com *
******************************************/
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit Echo = P2^0; // 接Echo端
sbit Trig = P2^1; // 接Trig端
bit flag =0; // 定時(shí)器0是否溢出的標(biāo)志,1表示溢出
bit enable=0; // 用于判斷是否允許測(cè)量,1表示允許
/***********************************
函數(shù):void InitUart()
----------------------
說(shuō)明:對(duì)串口進(jìn)行初始化
參數(shù):無(wú)
返回值:無(wú)
***********************************/
void InitUart()
{
TMOD = 0x21; // 高4位(定時(shí)器1)用于串口,低4位(定時(shí)器0)用于超聲波計(jì)時(shí)
SCON = 0x50;
TH1 = 0xFD; // 波特率 9600
TL1 = 0xFD;
ES = 1; // 允許串口中斷
ET0 = 1; // 允許定時(shí)器0中斷
TR1 = 1; // 開(kāi)啟定時(shí)器1
EA = 1; // 開(kāi)啟總中斷
}
/***********************************
函數(shù):void DelayMs(uint ms)
----------------------
說(shuō)明:毫秒級(jí)程序延時(shí)
參數(shù):ms代表要延時(shí)的毫秒數(shù)
返回值:無(wú)
***********************************/
void DelayMs(uint ms)
{
uint x,y;
for(x=ms;x>0;x--)
for(y=110;y>0;y--);
}
/***********************************
函數(shù):void StartModule()
---------------------------
說(shuō)明:?jiǎn)?dòng)超聲波模塊
參數(shù):無(wú)
返回值:無(wú)
***********************************/
void StartModule()
{
Trig=1;
DelayMs(1);
Trig=0;
}
/***********************************
函數(shù):uint Conut(void)
------------------------
說(shuō)明:計(jì)算測(cè)到的距離
參數(shù):無(wú)
返回值:測(cè)得的距離
***********************************/
uint Conut(void)
{
uint time; // 用于記錄測(cè)得的時(shí)間
uint ss; // 用于記錄測(cè)得的距離
time = (TH0*256+TL0)*1.09; // 總時(shí)間
TH0=0;
TL0=0;
if(flag==1) // 如果超出測(cè)量距離,則不傳輸數(shù)據(jù)
{
flag=0;
ss=0;
}
else
{
ss=time*1.7/100; // 空氣中聲音的速度是340m/s
}
return ss;
}
/***********************************
函數(shù):void send(uint dat)
---------------------------
說(shuō)明:將測(cè)得的距離通過(guò)串口發(fā)送出去
參數(shù):dat是測(cè)得的距離
返回值:無(wú)
***********************************/
void Send(uint dat)
{
SBUF=(dat/100)+ 48; // 發(fā)送 百 位
while(!TI);
TI=0;
SBUF=(dat%100/10)+48; // 發(fā)送 十 位
while(!TI);
TI=0;
SBUF=(dat%10)+48; // 發(fā)送 個(gè) 位
while(!TI);
TI=0;
}
/***********************************
函數(shù):void main(void)
----------------------
說(shuō)明:主函數(shù)
參數(shù):無(wú)
返回值:無(wú)
***********************************/
void main(void)
{
uint ss; // 記錄測(cè)量到的距離
InitUart();
while(1)
{
if(enable==1)
{
StartModule();
while(!Echo); // 當(dāng)RX為零時(shí)等待
TR0=1; // 開(kāi)啟計(jì)數(shù)
while(Echo); // 當(dāng)RX為1計(jì)數(shù)并等待
TR0=0; // 關(guān)閉計(jì)數(shù)
ss=Conut(); // 計(jì)算
Send(ss); // 將計(jì)算的值通過(guò)串口發(fā)送出去
DelayMs(800);
}
}
}
/***********************************
函數(shù):void Inter() interrupt 4
------------------------------
說(shuō)明:串口中斷處理
參數(shù):無(wú)
返回值:無(wú)
***********************************/
void Inter() interrupt 4
{
if(RI==1)
{
RI=0;
if(SBUF == 0x01)
{
enable = 1;
}
if(SBUF == 0x02)
{
enable = 0;
}
}
}
/***********************************
函數(shù):void zd0() interrupt 1
------------------------------
說(shuō)明:T0中斷用來(lái)計(jì)數(shù)器溢出,超過(guò)測(cè)距范圍則置flag為1
參數(shù):無(wú)
返回值:無(wú)
***********************************/
void zd0() interrupt 1
{
flag=1;
}
復(fù)制代碼
所有資料51hei提供下載:
新建文件夾.zip
(44.63 KB, 下載次數(shù): 50)
2018-12-30 15:55 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
源碼都在一起。
作者:
admin
時(shí)間:
2019-1-6 16:00
好資料,51黑有你更精彩
作者:
帥鵬
時(shí)間:
2019-1-9 20:22
好資料,51有你更精彩
作者:
ys519277123
時(shí)間:
2019-1-14 11:18
好資料,51有你更精彩
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1