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

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

QQ登錄

只需一步,快速開(kāi)始

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

帶溫度補(bǔ)償?shù)某暡▎纹瑱C(jī)控制程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
單片機(jī)控制超聲波電路原理圖如下:


單片機(jī)源程序如下:
  1. #include <reg52.H>                //器件配置文件
  2. #include <intrins.h>
  3. #include "ds18b20.h"
  4. sbit  RX = P1^5;
  5. sbit  TX = P1^4;
  6. sbit  BEEP = P3^4;
  7. sbit LCM_RW = P3^6; //定義LCD引腳
  8. sbit LCM_RS = P3^7;
  9. sbit LCM_E  = P3^5;
  10. #define LCM_Data P2


  11. #define Busy    0x80 //用于檢測(cè)LCM狀態(tài)字中的Busy標(biāo)識(shí)

  12. void LCMInit(void);
  13. void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);
  14. void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);
  15. void Delay5Ms(void);
  16. void Delay400Ms(void);
  17. void Decode(unsigned char ScanCode);
  18. void WriteDataLCM(unsigned char WDLCM);
  19. void WriteCommandLCM(unsigned char WCLCM,BuysC);

  20. unsigned char ReadDataLCM(void);
  21. unsigned char ReadStatusLCM(void);

  22. unsigned char code Cls[] =      {"                "};
  23. unsigned char code ASCII[16] =    {'0','1','2','3','4','5','6','7','8','9','.','-','M','C',' '};

  24. static unsigned char DisNum = 0; //顯示用指針                                  
  25.        unsigned int  time=0;
  26.            unsigned long S=0;
  27.            bit      flag =0;
  28.            unsigned char disbuff[4]           ={ 0,0,0,0,};


  29. //寫(xiě)數(shù)據(jù)
  30. void WriteDataLCM(unsigned char WDLCM)
  31. {
  32.         ReadStatusLCM(); //檢測(cè)忙
  33.         LCM_Data = WDLCM;
  34.         LCM_RS = 1;
  35.         LCM_RW = 0;
  36.         LCM_E = 0; //若晶振速度太高可以在這后加小的延時(shí)
  37.         LCM_E = 0; //延時(shí)
  38.         LCM_E = 1;
  39. }

  40. //寫(xiě)指令
  41. void WriteCommandLCM(unsigned char WCLCM,BuysC) //BuysC為0時(shí)忽略忙檢測(cè)
  42. {
  43.         if (BuysC) ReadStatusLCM(); //根據(jù)需要檢測(cè)忙
  44.         LCM_Data = WCLCM;
  45.         LCM_RS = 0;
  46.         LCM_RW = 0;       
  47.         LCM_E = 0;
  48.         LCM_E = 0;
  49.         LCM_E = 1;       
  50. }

  51. //讀數(shù)據(jù)
  52. unsigned char ReadDataLCM(void)
  53. {
  54.         LCM_RS = 1;
  55.         LCM_RW = 1;
  56.         LCM_E = 0;
  57.         LCM_E = 0;
  58.         LCM_E = 1;
  59.         return(LCM_Data);
  60. }

  61. //讀狀態(tài)
  62. unsigned char ReadStatusLCM(void)
  63. {
  64.         LCM_Data = 0xFF;
  65.         LCM_RS = 0;
  66.         LCM_RW = 1;
  67.         LCM_E = 0;
  68.         LCM_E = 0;
  69.         LCM_E = 1;
  70.         while (LCM_Data & Busy); //檢測(cè)忙信號(hào)
  71.         return(LCM_Data);
  72. }

  73. void LCMInit(void) //LCM初始化
  74. {
  75.         LCM_Data = 0;
  76.         WriteCommandLCM(0x38,0); //三次顯示模式設(shè)置,不檢測(cè)忙信號(hào)
  77.         Delay5Ms();
  78.         WriteCommandLCM(0x38,0);
  79.         Delay5Ms();
  80.         WriteCommandLCM(0x38,0);
  81.         Delay5Ms();

  82.         WriteCommandLCM(0x38,1); //顯示模式設(shè)置,開(kāi)始要求每次檢測(cè)忙信號(hào)
  83.         WriteCommandLCM(0x08,1); //關(guān)閉顯示
  84.         WriteCommandLCM(0x01,1); //顯示清屏
  85.         WriteCommandLCM(0x06,1); // 顯示光標(biāo)移動(dòng)設(shè)置
  86.         WriteCommandLCM(0x0F,1); // 顯示開(kāi)及光標(biāo)設(shè)置
  87. }

  88. //按指定位置顯示一個(gè)字符
  89. void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
  90. {
  91.         Y &= 0x1;
  92.         X &= 0xF; //限制X不能大于15,Y不能大于1
  93.         if (Y) X |= 0x40; //當(dāng)要顯示第二行時(shí)地址碼+0x40;
  94.         X |= 0x80; //算出指令碼
  95.         WriteCommandLCM(X, 1); //發(fā)命令字
  96.         WriteDataLCM(DData); //發(fā)數(shù)據(jù)
  97. }

  98. //按指定位置顯示一串字符
  99. void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)
  100. {
  101.         unsigned char ListLength;

  102.   ListLength = 0;
  103.         Y &= 0x1;
  104.         X &= 0xF; //限制X不能大于15,Y不能大于1
  105.         while (DData[ListLength]>0x19) //若到達(dá)字串尾則退出
  106.                 {
  107.                         if (X <= 0xF) //X坐標(biāo)應(yīng)小于0xF
  108.                                 {
  109.                                         DisplayOneChar(X, Y, DData[ListLength]); //顯示單個(gè)字符
  110.                                         ListLength++;
  111.                                         X++;
  112.                                 }
  113.                 }
  114. }

  115. //5ms延時(shí)
  116. void Delay5Ms(void)
  117. {
  118.         unsigned int TempCyc = 5552;
  119.         while(TempCyc--);
  120. }

  121. //400ms延時(shí)
  122. void Delay400Ms(void)
  123. {
  124.         unsigned char TempCycA = 5;
  125.         unsigned int TempCycB;
  126.         while(TempCycA--)
  127.                 {
  128.                         TempCycB=7269;
  129.                         while(TempCycB--);
  130.                 };
  131. }
  132. /********************************************************/
  133.     void Conut(void)
  134.         {
  135.                 int TEMP;
  136.          time=TH0*256+TL0;
  137.          TH0=0;
  138.          TL0=0;
  139.          TEMP=ReadTemperature();
  140.          S=(time/2.0*(331.45+0.61*TEMP/10))/1000.0;     //算出來(lái)是MM
  141.          if((S>=7000)||flag==1) //超出測(cè)量范圍顯示“-”
  142.          {         
  143.           flag=0;
  144.          
  145.           DisplayOneChar(0, 0, ASCII[11]);
  146.           DisplayOneChar(1, 0, ASCII[10]);        //顯示點(diǎn)
  147.           DisplayOneChar(2, 0, ASCII[11]);
  148.           DisplayOneChar(3, 0, ASCII[11]);
  149.           DisplayOneChar(4, 0, ASCII[11]);
  150.           DisplayOneChar(5, 0, ASCII[12]);        //顯示M
  151.          }
  152.          else
  153.          {
  154.                  if(S<1000)
  155.                          BEEP=1;
  156.                  else
  157.                         BEEP=0;
  158.                
  159.           disbuff[0]=S/1000;
  160.           disbuff[1]=S/100%10;
  161.           disbuff[2]=S/10%10;
  162.           disbuff[3]=S%10;
  163.           DisplayOneChar(0, 0, ASCII[disbuff[0]]);
  164.           DisplayOneChar(1, 0, ASCII[10]);        //顯示點(diǎn)
  165.           DisplayOneChar(2, 0, ASCII[disbuff[1]]);
  166.           DisplayOneChar(3, 0, ASCII[disbuff[2]]);
  167.           DisplayOneChar(4, 0, ASCII[disbuff[3]]);
  168.           DisplayOneChar(5, 0, ASCII[12]);        //顯示M
  169.                  
  170.       DisplayOneChar(6, 0, ASCII[14]);
  171.       DisplayOneChar(7, 0, ASCII[TEMP/100]);
  172.       DisplayOneChar(8, 0, ASCII[(TEMP/10)%10]);
  173.       DisplayOneChar(9, 0, ASCII[10]);
  174.       DisplayOneChar(10, 0, ASCII[TEMP%10]);
  175.       DisplayOneChar(11, 0, ASCII[13]);                 
  176.          }
  177.          
  178.          
  179.         }
  180. /********************************************************/
  181.      void zd0() interrupt 1                  //T0中斷用來(lái)計(jì)數(shù)器溢出,超過(guò)測(cè)距范圍
  182.   {
  183.     flag=1;                                                         //中斷溢出標(biāo)志
  184.         RX=0;
  185.   }
  186. /********************************************************/
  187.      void  StartModule()                          //啟動(dòng)模塊
  188.   {
  189.           TX=1;                                             //啟動(dòng)一次模塊
  190.           _nop_();
  191.           _nop_();
  192.           _nop_();
  193.           _nop_();
  194.           _nop_();
  195.           _nop_();
  196.           _nop_();
  197.           _nop_();
  198.           _nop_();
  199.           _nop_();
  200.           _nop_();
  201.           _nop_();
  202.           _nop_();
  203.           _nop_();
  204.           _nop_();
  205.           _nop_();
  206.           _nop_();
  207.           _nop_();
  208.           _nop_();
  209.           _nop_();
  210.           _nop_();
  211.           TX=0;
  212.   }
  213. void Timer_Count(void)
  214. {
  215.                  TR0=1;                            //開(kāi)啟計(jì)數(shù)
  216.              while(RX);                        //當(dāng)RX為1計(jì)數(shù)并等待
  217.              TR0=0;                                //關(guān)閉計(jì)數(shù)
  218.          Conut();                        //計(jì)算

  219. }

  220. /********************************************************/
  221. void delayms(unsigned int ms)
  222. {
  223.         unsigned char i=100,j;
  224.         for(;ms;ms--)
  225.         {
  226.                 while(--i)
  227.                 {
  228.                         j=10;
  229.                         while(--j);
  230.                 }
  231.         }
  232. }
  233. /*********************************************************/
  234. void main(void)
  235. {
  236.     unsigned int valA;
  237.         //unsigned char TempCyc;
  238.         BEEP=0;
  239.         Delay400Ms(); //啟動(dòng)等待,等LCM講入工作狀態(tài)
  240.         LCMInit(); //LCM初始化
  241.         Delay5Ms(); //延時(shí)片刻(可不要)
  242.         ReadDataLCM();//測(cè)試用句無(wú)意義
  243.         DisplayListChar(0, 1, Cls);       
  244.          TMOD=0x01;                   //設(shè)T0為方式1,GATE=1;
  245.          TH0=0;
  246.          TL0=0;         
  247.          ET0=1;             //允許T0中斷
  248.          EA=1;                           //開(kāi)啟總中斷                       
  249.        
  250.         while(1)
  251.           {
  252.                 delayms(60);
  253.                 RX=1;
  254.             StartModule();
  255.         for(valA=7510;valA>0;valA--)
  256.             {
  257.                if(RX==1)
  258.                    {
  259.            Timer_Count();
  260.                    }
  261.              }
  262.           }
  263. }
復(fù)制代碼

所有資料51hei提供下載:
超聲波_LCD_51_溫度補(bǔ)償.7z (2.64 MB, 下載次數(shù): 22)


評(píng)分

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

查看全部評(píng)分

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 99在线播放 | 成人av一区二区三区 | 国产精产国品一二三产区视频 | 成人高清在线 | 亚洲精品高清视频 | 国产电影一区二区 | 日日操夜夜操天天操 | 久久一区精品 | 午夜精品久久久久久久 | 99久久99| 亚洲视频免费 | 欧美成人精品一区 | 精品国产一区二区三区在线观看 | av中文字幕在线播放 | 亚洲男人天堂网 | 久久香蕉网 | 久久精品亚洲精品国产欧美 | 久久久青草婷婷精品综合日韩 | 亚洲444kkkk在线观看最新 | 国产伦精品一区二区三区照片91 | 免费黄色特级片 | 中文字幕第一页在线 | 国产一区亚洲 | 欧美一级做a爰片免费视频 国产美女特级嫩嫩嫩bbb片 | 成人午夜免费福利视频 | 亚洲 欧美 综合 | 亚洲国产成人av好男人在线观看 | 欧美一级视频免费看 | 久久久久久国产精品免费免费 | 97精品视频在线观看 | 亚洲精品在线观看视频 | 亚洲电影第1页 | 亚洲乱码一区二区三区在线观看 | 成人精品系列 | 日韩欧美综合在线视频 | 久久久久久精 | 国产精品亚洲一区 | 久久久久一区 | 99色在线视频 | 99视频精品 | 欧美国产日韩在线观看 |