久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 超聲波測距Proteus仿真,帶lcd顯示,功能簡單,單片機程序也簡單 [打印本頁]

作者: ZFYBB    時間: 2019-7-2 09:53
標題: 超聲波測距Proteus仿真,帶lcd顯示,功能簡單,單片機程序也簡單
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
#include<reg52.h>
#include<intrins.h>
#define uint  unsigned int
#define uchar unsigned char
#define NOP() {_nop_();_nop_();_nop_();_nop_();}
//------LCD引腳-----
sbit lcd_rs=P0^6;
sbit lcd_en=P0^7;
//------超聲波引腳-------
sbit Tx=P3^3;  //觸發控制信號輸入
sbit Rx=P3^2;  //回響信號輸出
uchar xuehao[]={"ID:1606050220"};
uchar xingming[]={"NAME:zhoujikai"};
uchar code table[]={" Distance Test:"};  //LCD第一行顯示
uchar temp_dis[]= {"    000.0 cm"};    //LCD第二行
long int t,distance;
uchar cache[4]={0,0,0,0};
//--------延時-------
void delay(uint ms)
{
uint t;
while(ms--)
  for(t=0;t<120;t++);
}
void write_com(uchar com);//init_lcd()函數需要用到,所以先提前聲明
//************LCD1602初始化函數************************
void init_lcd()
{
write_com(0x38);    //設置16*2顯示,5*7點陣,8位數據接口
write_com(0x08);    //寫一個字符后地址指針加1
write_com(0x01);    //顯示清零,數據指針清零
write_com(0x06);    //寫一個字符后地址指針加1
write_com(0x0c);    //關顯示,光標不顯示不閃爍
}

//************LCD1602寫指令函數************************
void write_com(uchar com)   //lcd1602寫指令:rs低電平,rw低電平,en從高電平變為低電平
{
delay(5);
lcd_rs = 0;      // 選擇寫指令
lcd_en = 0;      // 將使能端置0
P2 = com;      // 將要寫的命令送到數據總線上
delay(5);      // 延時5ms,待數據穩定
lcd_en = 1;      // 由于初始化已將lcd_en置為0,使能端給一個高脈沖,
delay(5);      // 延時5ms,待數據穩定
lcd_en = 0;      // 將使能端置0以完成脈沖
}

//************LCD1602寫數據函數************************
void write_data(uchar date)//lcd1602寫數據:rs高電平,rw低電平,en從高電平變低電平
{
delay(5);
lcd_rs = 1;      // 選擇寫數據
lcd_en = 0;      // 將使能端置0
P2 = date;      // 將要寫的數據送到數據總線上
delay(5);      // 延時5ms,待數據穩定
lcd_en = 1;      // 由于初始化已將lcd_en置為0,使能端給一個高脈沖,
delay(5);      // 延時5ms,待數據穩定
lcd_en = 0;      // 將使能端置0以完成脈沖
}
//************LCD1602顯示函數******************
void lcd1602_display(uchar *q,uchar *p)//*通過指針p和q分別指向兩個數組的第一個數,然后進行數組掃描顯示,一次性顯示兩行字符
{
write_com(0x80);      // 現將數據指針定位到第一行第一個字處
while(*q!='\0')
{
  write_data(*q);
  q++;
  delay(1);
}
write_com(0xc0);    // 現將數據指針定位到第二行第一個字處
while(*p!='\0')
{
  write_data(*p);
  p++;
  delay(1);
}
}
//************LCD1602顯示歡迎函數******************
void welcome()        //掃描顯示學號加姓名,幾秒延時后結束
{
init_lcd();
lcd1602_display(xuehao,xingming);
delay(2000);   
}
void HC05_Init()                          //超聲波模塊初始化函數
{
Tx=1;      //觸發脈沖
NOP();NOP();NOP();NOP();
Tx=0;
distance=0.172*t;   //距離計算
}
void distance_convert(long int dat)             //距離計算函數
{
cache[0]=dat/1000;
cache[1]=dat/100%10;
cache[2]=dat/10%10;
cache[3]=dat%10;
temp_dis[4]=cache[0]+'0';
temp_dis[5]=cache[1]+'0';
temp_dis[6]=cache[2]+'0';
temp_dis[8]=cache[3]+'0';
}
//------------主程序-----------
void main()
{

      
        welcome();
        
        init_lcd();
        delay(5);
TMOD=0x09;        //定時器T0工作方式1  GATE0=1
EA=1;   //開總中斷
TR0=1;   //啟動定時器
EX0=1;   //開外部中斷
IT0=1;   //設置為下降沿中斷方式
while(1)
{
  HC05_Init();
  distance_convert(distance);
  lcd1602_display(table,temp_dis);  
  
}
}
//外部中斷0
void int0() interrupt 0
{
t=(TH0*256+TL0); //計算高電平持續的時間,上升沿到來時候開始計時,下降沿到來進入外部中斷,關閉計時器,停止計時
TH0=0;
TL0=0;
}


代碼很簡單,lcd顯示屏直接修改程序就能顯示

全部資料51hei下載地址:
超聲波測距二代2.rar (31.12 KB, 下載次數: 208)


作者: szzxl10    時間: 2019-7-12 12:31
謝謝分享
作者: 2471567497    時間: 2020-6-27 21:54
樓主,你這個protues是哪個版本的?

作者: 阿pi秋    時間: 2020-6-30 17:17
博主,為什么在proteus里找不到SR04
作者: lskwj    時間: 2021-4-29 18:13
樓主牛逼,竟然仿真出來了
作者: 阿達偉大阿薩    時間: 2022-4-10 14:44
Proteus仿真需要用8.8版本來打開,里面有程序,如圖2





歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 精品一区二区三区在线观看 | 午夜看看 | 国产探花视频在线观看 | 手机av网站| 中文字幕日韩一区 | 亚洲激情一区 | 欧美精品亚洲精品 | 免费av在线 | 久草视| 国产三级久久 | 欧美日韩网站 | 成人三级在线 | hdxxxxhd100% | 日本少妇久久 | 黄色大片av | 中文字幕在线一区二区三区 | 欧美激情久久久 | 天天躁日日躁bbbbb | 欧美精品三区 | 亚洲精品成人 | 亚洲日本中文字幕 | 在线一区二区三区四区 | 色涩av | 日韩少妇视频 | 天天射天天舔 | 精品国产一区二区三 | 欧美激情视频网站 | 国产永久精品 | 国产在线麻豆精品观看 | 日日夜夜天天干 | 中文天堂网 | 香蕉久久a毛片 | 日本韩国三级 | 婷婷97 | 亚洲欧美一区二区三区四区 | 欧美激情小视频 | 中文字幕少妇 | 日韩精品一区二区在线 | 国产欧美日韩在线视频 | 亚洲精品影院 | 在线观看国产免费视频 |