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

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

QQ登錄

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

搜索
查看: 3109|回復(fù): 1
收起左側(cè)

基于51單片機(jī)的US-100(超聲波模塊)1602顯示程序

[復(fù)制鏈接]
ID:289073 發(fā)表于 2018-3-8 10:37 | 顯示全部樓層 |閱讀模式
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define nops {_nop_();_nop_();_nop_();_nop_();}
  4. /******************************引腳及變量的定義****************************/
  5. sbit RS = P2^0;  //寄存器選擇位
  6. sbit RW = P2^1;  //讀取選擇位
  7. sbit E = P2^2;   //使能信號(hào)位
  8. sbit BF = P0^7;  //忙碌信號(hào)位
  9. unsigned char code Tab[] = {"0123456789"};
  10. unsigned char code string[] = {"range:2cm--4.5m"};
  11. char part,ge,shi,bai;
  12. char idata GLengthLoh[2];    //接收緩沖區(qū)
  13. bit success_flag;      //定義測(cè)試成功標(biāo)志位
  14. /*********************************************************/
  15. /*********函數(shù)名稱(chēng):delay1ms(void)      ******************/
  16. /*********函數(shù)功能:延時(shí)1毫秒           ******************/
  17. /*********函數(shù)參數(shù):void                ******************/
  18. /*********************************************************/
  19. void delay1ms(void)   //誤差 -0.651041666667us
  20. {
  21.     char a,b;
  22.     for(b=102;b>0;b--)
  23.         for(a=3;a>0;a--);
  24. }         
  25. /*********************************************************/
  26. /*********函數(shù)名稱(chēng):delaynms(char n)    ******************/
  27. /*********函數(shù)功能:延時(shí)n個(gè)1毫秒        ******************/
  28. /*********函數(shù)參數(shù):n                   ******************/
  29. /*********************************************************/
  30. void delaynms(char n)
  31. {
  32.     char a;
  33.         for(a = 0;a > n;a--)
  34.             delay1ms();
  35. }
  36. /*********************************************************/
  37. /*********函數(shù)名稱(chēng):BusyTest(void)      ******************/
  38. /*********函數(shù)功能:判斷液晶模塊忙碌狀態(tài)******************/
  39. /*********函數(shù)參數(shù):返回值:result  ******************/
  40. /*********************************************************/
  41. unsigned char BusyTest()
  42. {
  43.     bit result;         
  44.         RS = 0;                  
  45.         RW = 1;                  //RS為低電平,RW為高電平時(shí),可以讀狀態(tài)
  46.         E = 1;                  //使能為高電平時(shí)可讀取信息
  47.         nops;                  //延時(shí)40us,給硬件反應(yīng)時(shí)間
  48.         result = BF;     //將忙碌標(biāo)志位電平賦給result
  49.         E = 0;                  //使能1到0:執(zhí)行指令
  50.         return result;
  51. }
  52. /*********************************************************/
  53. /*********函數(shù)名稱(chēng):WriteInstruction(char dictate)*******/
  54. /*********函數(shù)功能:將模式設(shè)置指令或顯示地址寫(xiě)入液晶模塊**/
  55. /*********函數(shù)參數(shù):dictate             ******************/
  56. /*********************************************************/
  57. void WriteInstruction(char dictate)
  58. {
  59.     while(BusyTest() == 1);         //如果忙碌標(biāo)志位忙碌則等待
  60.         RS = 0;
  61.         RW = 0;                                 //RS/RW位同時(shí)為低電平時(shí)可寫(xiě)入指令
  62.         E = 0;                                 //使能0到1:寫(xiě)入指令
  63.         nops;
  64.         P0 = dictate;                    //將數(shù)據(jù)送入P0口,寫(xiě)入數(shù)據(jù)或地址
  65.         nops;
  66.         E = 1;                                 //使能0到1:寫(xiě)入指令
  67.         nops;
  68.         E = 0;                                 //使能1到0:執(zhí)行指令
  69. }
  70. /*********************************************************/
  71. /*********函數(shù)名稱(chēng):WriteAddress(char x)          *******/
  72. /*********函數(shù)功能:指定字符顯示的實(shí)際地址     ***********/
  73. /*********函數(shù)參數(shù):x                   ******************/
  74. /*********************************************************/
  75. void WriteAddress(char x)
  76. {
  77.     WriteInstruction(x|0x80);        //80H+地址碼
  78. }
  79. /*********************************************************/
  80. /*********函數(shù)名稱(chēng):WriteData(char y)             *******/
  81. /*********函數(shù)功能:將數(shù)據(jù)(字符的標(biāo)準(zhǔn)ASCII碼)寫(xiě)入液晶模塊*/
  82. /*********函數(shù)參數(shù):y                   ******************/
  83. /*********************************************************/
  84. void WriteData(char y)
  85. {
  86.     while(BusyTest() == 1);          //如果忙碌標(biāo)志位忙碌則等待
  87.         RS = 1;
  88.         RW = 0;                                  //RS為高電平,RW為低電平時(shí),可以寫(xiě)入數(shù)據(jù)
  89.         E = 0;
  90.         P0 = y;
  91.         nops;
  92.         E = 1;
  93.         nops;
  94.         E = 0;
  95. }
  96. /*********************************************************/
  97. /*********函數(shù)名稱(chēng):LCDInit(void)                  *******/
  98. /*********函數(shù)功能:液晶模塊初始化        ****************/
  99. /*********函數(shù)參數(shù):void                ******************/
  100. /*********************************************************/
  101. void LCDInit(void)
  102. {
  103.     delaynms(15);    //延時(shí)15毫秒,首次寫(xiě)入液晶指令應(yīng)給反應(yīng)時(shí)間
  104.         WriteInstruction(0x38);        //顯示模式設(shè)置:16×2顯示,5×7點(diǎn)陣,8位數(shù)據(jù)接口
  105.         delaynms(5);        //延時(shí)5秒,反應(yīng)時(shí)間
  106.     WriteInstruction(0x38);
  107.         delaynms(5);        //延時(shí)5秒,反應(yīng)時(shí)間
  108.         WriteInstruction(0x38);
  109.         delaynms(5);        //連續(xù)三次,確保初始化成功
  110.         WriteInstruction(0x0c);   //顯示模式設(shè)置:顯示開(kāi),無(wú)光標(biāo),光標(biāo)不閃爍
  111.         delaynms(5);
  112.         WriteInstruction(0x06);        //顯示模式設(shè)置:顯示光標(biāo)右移,屏幕不移動(dòng)
  113.         delaynms(5);
  114.         WriteInstruction(0x01);   //清屏
  115.         delaynms(5);
  116. }
  117. /*********************************************************/
  118. /*********函數(shù)名稱(chēng):UART_Send(char dat)            *******/
  119. /*********函數(shù)功能:串口發(fā)送函數(shù)          ****************/
  120. /*********函數(shù)參數(shù):dat                 ******************/
  121. /*********************************************************/
  122. void UART_Send(char dat)
  123. {
  124.     TI = 0;            // 清發(fā)送標(biāo)志
  125.     SBUF = dat;        //如果TI為0等待
  126.     while (!TI);        //等待發(fā)送數(shù)據(jù)
  127. }
  128. /*********************************************************/
  129. /*********函數(shù)名稱(chēng):UART_Init()            ***************/
  130. /*********函數(shù)功能:串口初始化函數(shù)        ****************/
  131. /*********函數(shù)參數(shù):無(wú)                  ******************/
  132. /*********************************************************/
  133. void UART_Init()
  134. {   
  135.     TH1 = 0xFD;
  136.     TL1 = 0xFD;
  137.     TMOD = 0x21;            //設(shè)置定時(shí)器1為模式2;定時(shí)器0為模式1      
  138.     TH0 =(65536-2500)/256;  //約2.50MS定時(shí)器初值
  139.     TL0 =(65536-2500)%256;  //約2.50MS定時(shí)器初值
  140.     ET0 = 1;
  141.     TR0 = 1;                //啟動(dòng)定時(shí)器
  142.     TR1 = 1;                //啟動(dòng)定時(shí)器           SM0  SM1
  143.     SM0 = 0;                //串口通信模式設(shè)置     0      0 = 0
  144.     SM1 = 1;                                //     0      1 = 1
  145.                                             //     1      0 = 2
  146.                                             //     1      1 = 3
  147.     REN = 1;       //串口允許接收數(shù)據(jù)
  148.     ES = 1;        //開(kāi)串中斷
  149.     EA = 1;
  150. }
  151. /*********************************************************/
  152. /*********函數(shù)名稱(chēng):UART_ISR(void)         ***************/
  153. /*********函數(shù)功能:串口中斷函數(shù)          ****************/
  154. /*********函數(shù)參數(shù):void                ******************/
  155. /*********************************************************/
  156. void UART_ISR(void) interrupt 4
  157. {
  158.     char temp,k;
  159.     ES = 0;             //關(guān)中斷            
  160.     if(RI)
  161.     {
  162.         RI = 0;         //清接收標(biāo)志
  163.         temp = SBUF;
  164.         GLengthLoh[k] = temp;
  165.         k++;
  166.         if(k == 2) //k=數(shù)據(jù)長(zhǎng)度
  167.         k = 0;
  168.     }   
  169.     ES = 1;      //開(kāi)中斷
  170. }
  171. /*********************************************************/
  172. /*********函數(shù)名稱(chēng):timer0()               ***************/
  173. /*********函數(shù)功能:定時(shí)器函數(shù)            ****************/
  174. /*********函數(shù)參數(shù):void                ******************/
  175. /*********************************************************/
  176. timer0() interrupt 1         // 定時(shí)器0中斷是1號(hào)
  177. {
  178.     TH0 =(65536-2500)/256; //約2.50MS定時(shí)器初值
  179.     TL0 =(65536-2500)%256; //約2.50MS定時(shí)器初值    TH0 = 0xef;    TL0 = 0x94;    //寫(xiě)入定時(shí)器0初始值
  180. }
  181. /*********************************************************/
  182. /*********函數(shù)名稱(chēng):conversion(int8 temp_data)     *******/
  183. /*********函數(shù)功能:數(shù)據(jù)轉(zhuǎn)換              ****************/
  184. /*********函數(shù)參數(shù):temp_data           ******************/
  185. /*********************************************************/
  186. void conversion(int temp_data)
  187. {
  188.     char part_data,ge_data,shi_data,bai_data;
  189.         bai_data = temp_data / 1000;
  190.         shi_data = (temp_data % 1000) / 100;
  191.         ge_data = (temp_data % 100) / 10;
  192.         part_data = temp_data % 10;
  193.         EA = 0;
  194.         bai = bai_data;
  195.         shi = shi_data;
  196.         ge = ge_data;
  197.         part = part_data;
  198.         EA = 1;
  199. }
  200. /*********************************************************/
  201. /*********函數(shù)名稱(chēng):main(void)                      *******/
  202. /*********函數(shù)功能:主函數(shù)                ****************/
  203. /*********函數(shù)參數(shù):void                 ******************/
  204. /*********************************************************/
  205. void main(void)
  206. {
  207.     int k;
  208.         long PreLength;                                          
  209.         LCDInit();                                           //調(diào)用液晶初始化函數(shù)
  210.         delaynms(10);
  211.     UART_Init();
  212.         PreLength = 0;
  213.         k = 0;
  214.         while(1)
  215.         {
  216.              WriteAddress(0x01);
  217.                  while(string[k] != '\0')
  218.                  {
  219.                       WriteData(string[k]);
  220.                           k++;
  221.                  }
  222.              UART_Send(0X55);
  223.                  PreLength = GLengthLoh[0] * 256 + GLengthLoh[1] - 5;
  224.          conversion(PreLength);
  225.              WriteAddress(0x41);           //從第2行第6列開(kāi)始顯示
  226.                  WriteData('J');                   //將特定的字符常量寫(xiě)入LCD
  227.                  WriteData('U');
  228.                  WriteData('L');
  229.                  WriteData('I');
  230.                  WriteData(':');
  231.                  if(PreLength <= 4500 && PreLength >= 20)
  232.                  {
  233.                      WriteData(Tab[bai]);           //將百位數(shù)字的字符常量寫(xiě)入LCD
  234.                      WriteData(Tab[shi]);           //將十位數(shù)字的字符常量寫(xiě)入LCD
  235.                      WriteData(Tab[ge]);           //將個(gè)位數(shù)字的字符常量寫(xiě)入LCD
  236.                             WriteData('.');
  237.                           WriteData(Tab[part]);
  238.                  }
  239.                  else
  240.                  {
  241.                      WriteData('-');         
  242.                      WriteData('-');
  243.                      WriteData('-');         
  244.                             WriteData('-');
  245.                           WriteData('-');
  246.                  }
  247.                  WriteData(' ');
  248.                  WriteData('c');
  249.                  WriteData('m');
  250.                  
  251.         }
  252. }
復(fù)制代碼


回復(fù)

使用道具 舉報(bào)

ID:313173 發(fā)表于 2018-7-10 20:38 | 顯示全部樓層
為什么·12到25厘米之間無(wú)顯示?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美国产中文字幕 | 国产成人91视频 | 国产精品久久9 | 亚洲精品在线免费观看视频 | 黄色三级免费 | 黄色成人国产 | 操射视频 | 青草久久免费视频 | 视频一区在线观看 | 91在线视频| 免费视频99 | 亚洲国产成人精品女人久久久 | 久久伊| 国产精品自拍视频 | 视频1区 | 国产精品一区在线观看 | 久久久久国产精品一区三寸 | 中文字幕一区二区三区四区不卡 | www网站在线观看 | 夜夜骑首页 | www.久久99 | 免费观看一级特黄欧美大片 | av网站免费在线观看 | 很黄很污的网站 | 日韩精品一区二区三区视频播放 | 91精品国产综合久久久久 | 网站国产 | 精品欧美乱码久久久久久 | 色综合久久久 | 久久久久亚洲精品 | 农村黄性色生活片 | 欧美日韩中文字幕 | 中文字幕电影在线观看 | 欧美中国少妇xxx性高请视频 | 丝袜毛片 | 日韩高清一区二区 | 久久33| 一区二区三区在线播放 | 日韩1区 | 国产精品国产三级国产aⅴ原创 | 日韩精品一区二区三区中文在线 |