找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 6735|回復(fù): 6
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)超聲波測(cè)距Proteus仿真代碼,LCD1602顯示

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
超聲波測(cè)距仿真,LCD1602顯示帶程序

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機(jī)源程序如下:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uint  unsigned int
  4. #define uchar unsigned char
  5. #define NOP() {_nop_();_nop_();_nop_();_nop_();}
  6. //------LCD引腳-----
  7. sbit lcd_rs=P0^6;

  8. sbit lcd_en=P0^7;
  9. //------超聲波引腳-------
  10. sbit Tx=P3^3;                //觸發(fā)控制信號(hào)輸入
  11. sbit Rx=P3^2;                //回響信號(hào)輸出
  12. uchar xuehao[]={"   17110201138  "};
  13. uchar xingming[]={"NAME:zhaolongda"};
  14. uchar code table[]={" Distance Test:"};                //LCD第一行顯示
  15. uchar temp_dis[]= {"    000.0 cm"};                                //LCD第二行
  16. long int t,distance;
  17. uchar cache[4]={0,0,0,0};
  18. //--------延時(shí)-------
  19. void delay(uint ms)
  20. {
  21.         uint t;
  22.         while(ms--)
  23.                 for(t=0;t<30;t++);
  24. }
  25. void write_com(uchar com);//init_lcd()函數(shù)需要用到,所以先提前聲明
  26. //************LCD1602初始化函數(shù)************************
  27. void init_lcd()
  28. {
  29.         write_com(0x38);           //設(shè)置16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)接口
  30.         write_com(0x08);           //寫一個(gè)字符后地址指針加1
  31.         write_com(0x01);           //顯示清零,數(shù)據(jù)指針清零
  32.         write_com(0x06);           //寫一個(gè)字符后地址指針加1
  33.         write_com(0x0c);           //關(guān)顯示,光標(biāo)不顯示不閃爍
  34. }


  35. //************LCD1602寫指令函數(shù)************************
  36. void write_com(uchar com)   //lcd1602寫指令:rs低電平,rw低電平,en從高電平變?yōu)榈碗娖?br />
  37. {
  38.         delay(5);
  39.         lcd_rs = 0;                           // 選擇寫指令
  40.         lcd_en = 0;                           // 將使能端置0
  41.         P2 = com;                           // 將要寫的命令送到數(shù)據(jù)總線上
  42.         delay(5);                           // 延時(shí)5ms,待數(shù)據(jù)穩(wěn)定
  43.         lcd_en = 1;                           // 由于初始化已將lcd_en置為0,使能端給一個(gè)高脈沖,
  44.         delay(5);                           // 延時(shí)5ms,待數(shù)據(jù)穩(wěn)定
  45.         lcd_en = 0;                           // 將使能端置0以完成脈沖
  46. }


  47. //************LCD1602寫數(shù)據(jù)函數(shù)************************
  48. void write_data(uchar date)//lcd1602寫數(shù)據(jù):rs高電平,rw低電平,en從高電平變低電平
  49. {
  50.         delay(5);
  51.         lcd_rs = 1;                           // 選擇寫數(shù)據(jù)
  52.         lcd_en = 0;                           // 將使能端置0
  53.         P2 = date;                           // 將要寫的數(shù)據(jù)送到數(shù)據(jù)總線上
  54.         delay(5);                           // 延時(shí)5ms,待數(shù)據(jù)穩(wěn)定
  55.         lcd_en = 1;                           // 由于初始化已將lcd_en置為0,使能端給一個(gè)高脈沖,
  56.         delay(5);                           // 延時(shí)5ms,待數(shù)據(jù)穩(wěn)定
  57.         lcd_en = 0;                           // 將使能端置0以完成脈沖
  58. }

  59. //************LCD1602顯示函數(shù)******************
  60. void lcd1602_display(uchar *q,uchar *p)//*通過指針p和q分別指向兩個(gè)數(shù)組的第一個(gè)數(shù),然后進(jìn)行數(shù)組掃描顯示,一次性顯示兩行字符
  61. {
  62.         write_com(0x80);             // 現(xiàn)將數(shù)據(jù)指針定位到第一行第一個(gè)字處
  63.         while(*q!='\0')
  64.         {
  65.                 write_data(*q);
  66.                 q++;
  67.                 delay(1);       
  68.         }
  69.         write_com(0xc0);           // 現(xiàn)將數(shù)據(jù)指針定位到第二行第一個(gè)字處
  70.         while(*p!='\0')
  71.         {
  72.                 write_data(*p);
  73.                 p++;
  74.                 delay(1);       
  75.         }
  76. }

  77. //************LCD1602顯示歡迎函數(shù)******************
  78. void welcome()        //掃描顯示學(xué)號(hào)加姓名,幾秒延時(shí)后結(jié)束
  79. {       
  80.         init_lcd();
  81.         lcd1602_display(xuehao,xingming);
  82.         delay(200);          

  83. }
  84. void HC05_Init()                          //超聲波模塊初始化函數(shù)
  85. {
  86.         Tx=1;                                                //觸發(fā)脈沖
  87.         NOP();NOP();NOP();NOP();
  88.         Tx=0;
  89.         distance=0.1725*t;                        //距離計(jì)算
  90. }
  91. void distance_convert(long int dat)             //距離計(jì)算函數(shù)
  92. {
  93.         cache[0]=dat/1000;
  94.         cache[1]=dat/100%10;
  95.         cache[2]=dat/10%10;
  96.         cache[3]=dat%10;
  97.         temp_dis[4]=cache[0]+'0';
  98.         temp_dis[5]=cache[1]+'0';
  99.         temp_dis[6]=cache[2]+'0';
  100.         temp_dis[8]=cache[3]+'0';
  101. }
  102. //------------主程序-----------
  103. void main()
  104. {
  105.        
  106.       
  107.         welcome();
  108.         
  109.         init_lcd();
  110.         delay(5);
  111.         TMOD=0x09;        //定時(shí)器T0工作方式1  GATE0=1
  112.         EA=1;                        //開總中斷
  113.         TR0=1;                        //啟動(dòng)定時(shí)器
  114.         EX0=1;                        //開外部中斷
  115.         IT0=1;                        //設(shè)置為下降沿中斷方式
  116.         while(1)
  117.         {
  118.                 HC05_Init();
  119.                 distance_convert(distance);
  120.                 lcd1602_display(table,temp_dis);  
  121.                
  122.         }
  123. }
  124. //外部中斷0
  125. void int0() interrupt 0
  126. {
  127.         t=(TH0*256+TL0);        //計(jì)算高電平持續(xù)的時(shí)間,上升沿到來時(shí)候開始計(jì)時(shí),下降沿到來進(jìn)入外部中斷,關(guān)閉計(jì)時(shí)器,停止計(jì)時(shí)
  128.         TH0=0;
  129.         TL0=0;
  130. }
復(fù)制代碼

所有資料51hei提供下載:
超聲波測(cè)距仿真.zip (90.57 KB, 下載次數(shù): 426)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏14 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:922968 發(fā)表于 2021-5-18 13:10 | 只看該作者
程序有誤,1602讀寫命令錯(cuò)了
回復(fù)

使用道具 舉報(bào)

板凳
ID:112693 發(fā)表于 2021-10-2 18:07 | 只看該作者
下載程序中,仿真報(bào)錯(cuò)啊
回復(fù)

使用道具 舉報(bào)

地板
ID:262 發(fā)表于 2021-10-3 02:13 | 只看該作者
dragon19790000 發(fā)表于 2021-10-2 18:07
下載程序中,仿真報(bào)錯(cuò)啊

我用Proteus8.8打開,雙擊單片機(jī)重新選擇hex文件,可以運(yùn)行呢

51hei.png (26.72 KB, 下載次數(shù): 109)

51hei.png
回復(fù)

使用道具 舉報(bào)

5#
ID:838572 發(fā)表于 2021-11-29 16:55 | 只看該作者
很好的資源,準(zhǔn)備去試一試。
回復(fù)

使用道具 舉報(bào)

6#
ID:1027882 發(fā)表于 2022-5-22 01:19 | 只看該作者
剛下載,明天好好研究
回復(fù)

使用道具 舉報(bào)

7#
ID:1058494 發(fā)表于 2022-12-20 21:16 | 只看該作者
剛下載準(zhǔn)備試試看
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表