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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1878|回復: 1
打印 上一主題 下一主題
收起左側

超聲波測距12864顯示程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:309016 發表于 2018-4-21 14:11 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
單片機源程序如下:
  1. /******************************************************************************/
  2. /*  Name:  LCD12864(St7920/St7921)+超聲波測距模塊+STC89C52                    */
  3. /*  HC-SR04 超聲波測距模塊 DEMO 程序                                                                              */
  4. /*  晶振:11.0592M                                                            */
  5. /*  程序編寫:文軒電子
  6. /*  接線:模塊TRIG接 P1.2  ECH0 接P1.1                                                                                  */
  7. /*      RS(CS)    接  P3.3;                                                                                                       */
  8. /*      RW(SID)   接  P3.4;                                                                                              */
  9. /*      E(SCLK)   接  P3.5;                                                                                                  */
  10. /*      PSB       接  GND 串行模式                                                                                      */
  11. /******************************************************************************/
  12.     #include   <AT89X51.H>
  13.         #include   <intrins.h>        
  14. //引腳定義
  15.     sbit     RX    =  P1 ^ 1;
  16.     sbit     TX    =  P1 ^ 2;
  17.     sbit     CS    =  P3 ^ 3;        //片選 高電平有效 單片LCD使用時可固定高電平
  18.     sbit     SID   =  P3 ^ 4;        //數據
  19.     sbit     SCLK  =  P3 ^ 5;        //時鐘

  20. //Function Definition 函數聲明
  21. void Delay(int num);
  22. void Init_DS18B20(void);
  23. unsigned char ReadOneChar(void);
  24. void WriteOneChar(unsigned char dat);
  25. unsigned int ReadTemperature(void);
  26. void clock_out(unsigned char dd);
  27. unsigned char clock_in(void);
  28. unsigned char read_clock(unsigned char ord);
  29. void write_clock(unsigned char ord, unsigned char dd);
  30. void Disp(void);
  31. void id_case1_key(void);
  32. void id_case2_key(void);
  33. void Set_time(unsigned char sel,bit sel_1);
  34. void Timer0_Init(void);
  35. void Init_1302(void);
  36. void Set_Bell(unsigned char sel, bit sel_1);
  37. void Bell(void);
  38. //12864
  39. void Write_char(bit start, unsigned char ddata);
  40. void Send_byte(unsigned char bbyte);
  41. void Delaynms(unsigned int di);
  42. void Lcd_init(void);
  43. void Disp_img(unsigned char *img);
  44. void LCD_Write_string(unsigned char X,unsigned char Y,unsigned char *s);
  45. void LCD_set_xy( unsigned char x, unsigned char y );
  46. unsigned char code num[]={"0123456789 :.-"};
  47. unsigned char code waves[]={"超聲波測距系統"};
  48. unsigned char code znwk[] ={"智能微控工作室"};
  49. unsigned char code CM[] =  {"M"};
  50. unsigned int  time=0;
  51.          long S=0;
  52.          bit  flag =0;
  53. unsigned char disbuff[4]           ={ 0,0,0,0,};
  54. unsigned char code logo[]={  
  55. /*--  調入了一幅圖像:logo.bmp  -- */
  56. /*--  寬度x高度=128x64 歡迎使用本產品LOGO --*/
  57. /*--  調入了一幅圖像:C:\Documents and Settings\lwd\桌面\新建文件夾\X.bmp  --*/
  58. /*--  寬度x高度=128x64  --*/
  59. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  60. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  61. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  62. 0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,
  63. 0x00,0x00,0x00,0xE0,0x00,0x00,0x0C,0x00,0x00,0x40,0x70,0x00,0x00,0x00,0x80,0x00,
  64. 0x00,0x00,0x00,0xE0,0x00,0x00,0x1E,0x00,0x00,0x60,0x70,0x00,0x00,0x0F,0xE0,0x00,
  65. 0x00,0x00,0x01,0xC0,0x00,0x60,0x3C,0x00,0x00,0xE0,0x60,0x00,0x1F,0xFF,0xE0,0x00,
  66. 0x00,0x00,0x03,0x80,0x00,0x70,0x70,0x40,0x00,0xE0,0x7E,0x00,0x1F,0xE0,0xC0,0x00,
  67. 0x00,0x00,0x03,0x00,0x00,0x73,0xC3,0xF0,0x01,0xC3,0xFC,0x00,0x38,0xE1,0xC0,0x00,
  68. 0x00,0x03,0xC6,0x3C,0x00,0x33,0x9F,0xF0,0x03,0x8F,0xC0,0x00,0x30,0xC1,0xC0,0x00,
  69. 0x00,0x3F,0xEF,0xFE,0x00,0x03,0x1C,0xE0,0x07,0x01,0xCC,0x00,0x31,0xF1,0x80,0x00,
  70. 0x00,0x79,0xDF,0xBC,0x00,0x06,0x18,0xC0,0x0E,0x01,0xFE,0x00,0x77,0xF9,0x80,0x00,
  71. 0x00,0x01,0xB0,0x30,0x01,0xC6,0x19,0xC0,0x1E,0x7F,0xDE,0x00,0x6F,0x83,0x80,0x00,
  72. 0x00,0x23,0xAC,0x60,0x0F,0xE6,0xF1,0x80,0x3E,0x7B,0x38,0x00,0x61,0x83,0x00,0x00,
  73. 0x00,0x37,0x0E,0x00,0x0F,0xC7,0xB7,0x80,0xEC,0x63,0x30,0x00,0xE3,0x03,0x00,0x00,
  74. 0x00,0x3E,0x0E,0x00,0x01,0x8F,0x37,0x01,0xCC,0x6F,0xF0,0x00,0xC7,0xF7,0x00,0x00,
  75. 0x00,0x1E,0x0C,0x00,0x03,0x1E,0x66,0x03,0x0C,0x7F,0x00,0x01,0xFF,0xE6,0x00,0x00,
  76. 0x00,0x1E,0x1C,0x00,0x03,0x1C,0x60,0x02,0x19,0xAC,0x00,0x01,0x96,0x06,0x00,0x00,
  77. 0x00,0x3E,0x3E,0x00,0x03,0x18,0x60,0x00,0x19,0xFC,0x00,0x03,0x86,0x0E,0x00,0x00,
  78. 0x00,0x7E,0x36,0x00,0x03,0x00,0xC0,0x00,0x38,0x78,0x00,0x03,0x06,0x0C,0x00,0x00,
  79. 0x00,0xE6,0x67,0x00,0x03,0x00,0xC0,0x00,0x30,0x78,0x00,0x06,0x0C,0x0C,0x00,0x00,
  80. 0x01,0xC6,0xC3,0x80,0x7F,0xF0,0xC0,0x00,0x30,0xFE,0x00,0x0E,0x0C,0x1C,0x00,0x00,
  81. 0x03,0x81,0x83,0xC0,0x78,0xFF,0x80,0x00,0x61,0xCF,0x80,0x1C,0x08,0x18,0x00,0x00,
  82. 0x06,0x07,0x03,0xE0,0x00,0x1F,0xFF,0xE0,0x67,0x07,0xE0,0x38,0x18,0xF8,0x00,0x00,
  83. 0x08,0x0E,0x01,0xF8,0x00,0x07,0xFF,0x80,0xCE,0x03,0xF8,0x60,0x00,0x70,0x00,0x00,
  84. 0x00,0x18,0x01,0xF8,0x00,0x01,0xFC,0x00,0xC0,0x01,0xFC,0xC0,0x00,0x70,0x00,0x00,
  85. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,
  86. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  87. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  88. 0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  89. 0x00,0x00,0x06,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  90. 0x00,0x00,0x07,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  91. 0x00,0x00,0x06,0x00,0x00,0x00,0x0C,0xE0,0x00,0x01,0xE0,0x00,0x00,0x00,0x00,0x00,
  92. 0x00,0x00,0x0E,0x00,0x00,0x00,0x3F,0xE0,0x00,0xFF,0xF0,0x00,0x38,0x00,0xE0,0x00,
  93. 0x00,0x00,0x0C,0x00,0x00,0x0F,0xFF,0x80,0x00,0xF8,0xF0,0x00,0x38,0x00,0xE0,0x00,
  94. 0x00,0x00,0x0C,0xF0,0x00,0x0F,0xC7,0x00,0x00,0x60,0xE0,0x00,0x38,0x00,0xE0,0x00,
  95. 0x00,0x00,0x1F,0xF0,0x00,0x01,0x8E,0x00,0x00,0x60,0xC0,0x00,0x70,0x01,0xC0,0x00,
  96. 0x00,0x07,0xFF,0x80,0x00,0x01,0x8C,0x00,0x00,0xE1,0x80,0x00,0x70,0x01,0xC0,0x00,
  97. 0x00,0x07,0xF8,0x00,0x00,0x01,0x98,0x00,0x00,0xDF,0xC0,0x00,0x70,0x01,0xC0,0x00,
  98. 0x00,0x00,0x78,0x00,0x00,0x01,0xBF,0xE0,0x00,0xFF,0x00,0x00,0x60,0x01,0x80,0x00,
  99. 0x00,0x00,0xFC,0x00,0x00,0x7F,0xFF,0xE0,0x00,0xC0,0x00,0x00,0xE0,0x03,0x80,0x00,
  100. 0x00,0x01,0xFE,0x00,0x00,0x7F,0xF8,0x00,0x00,0x00,0x00,0x00,0xC0,0x03,0x00,0x00,
  101. 0x00,0x03,0xB7,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x3C,0x00,0xC0,0x03,0x00,0x00,
  102. 0x00,0x07,0x67,0x00,0x00,0x60,0x00,0x00,0x03,0x9F,0xFE,0x00,0x80,0x02,0x00,0x00,
  103. 0x00,0x0E,0x63,0x80,0x00,0xE0,0x00,0x01,0xFF,0xCF,0x1E,0x01,0x80,0x06,0x00,0x00,
  104. 0x00,0x1C,0xE1,0xE0,0x00,0xC0,0x00,0x00,0xE3,0x9C,0x38,0x01,0x80,0x06,0x00,0x00,
  105. 0x00,0x38,0xC1,0xF8,0x01,0xC0,0x00,0x00,0xC3,0x18,0x30,0x00,0x00,0x00,0x00,0x00,
  106. 0x00,0xE0,0xFC,0xFE,0x03,0x80,0x00,0x01,0xC7,0x18,0x60,0x00,0x00,0x00,0x00,0x00,
  107. 0x01,0xDF,0xF8,0xFE,0x03,0x00,0x00,0x01,0x8E,0x1B,0xE0,0x07,0x00,0x1C,0x00,0x00,
  108. 0x07,0x07,0x80,0x00,0x07,0x00,0x00,0x01,0xFF,0x3F,0xE0,0x07,0x00,0x1C,0x00,0x00,
  109. 0x0C,0x03,0x80,0x00,0x0E,0x00,0x00,0x01,0xF0,0x38,0x00,0x0F,0x00,0x3C,0x00,0x00,
  110. 0x00,0x03,0x00,0x00,0x1C,0x00,0x00,0x01,0x00,0x20,0x00,0x06,0x00,0x18,0x00,0x00,
  111. 0x00,0x03,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  112. 0x00,0x03,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  113. 0x00,0x02,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  114. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  115. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  116. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  117. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  118. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  119. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  120. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  121. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  122. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  123. };

  124. /******************************************************************************/
  125. void Lcd_init(void)        //初始化LCD
  126. {
  127.         Delaynms(10); //啟動等待,等LCM講入工作狀態
  128.           CS=1;
  129.           Write_char(0,0x30);  //8 位介面,基本指令集
  130.           Write_char(0,0x0c);  //顯示打開,光標關,反白關
  131.           Write_char(0,0x01);  //清屏,將DDRAM的地址計數器歸零  
  132. }

  133. /******************************************************************************/
  134. void Write_char(bit start, unsigned char ddata) //寫指令或數據
  135. {
  136.         unsigned char start_data,Hdata,Ldata;
  137.           if(start==0)
  138.                 start_data=0xf8;         //寫指令
  139.     else   
  140.             start_data=0xfa;  //寫數據

  141.           Hdata=ddata&0xf0;                  //取高四位
  142.           Ldata=(ddata<<4)&0xf0;  //取低四位
  143.           Send_byte(start_data);          //發送起始信號
  144.           Delaynms(5); //延時是必須的
  145.           Send_byte(Hdata);              //發送高四位
  146.           Delaynms(1);  //延時是必須的
  147.           Send_byte(Ldata);                  //發送低四位
  148.           Delaynms(1);  //延時是必須的
  149. }

  150. /******************************************************************************/
  151. void Send_byte(unsigned char bbyte) //發送一個字節
  152. {
  153.         unsigned char i;
  154.          for(i=0;i<8;i++)
  155.            {
  156.                    SID=bbyte&0x80; //取出最高位
  157.                  SCLK=1;
  158.                    SCLK=0;
  159.                    bbyte<<=1; //左移
  160.            }  
  161. }

  162. /******************************************************************************/
  163. void Delaynms(unsigned int di) //延時
  164. {
  165.         unsigned int da,db;
  166.          for(da=0;da<di;da++)
  167.                    for(db=0;db<10;db++);
  168. }

  169. /******************************************************************************/
  170. void Disp_img(unsigned char  *img)        //圖形方式12864顯示字模221 橫向取膜
  171. {
  172.         unsigned char i,j;
  173.         unsigned int k = 0;

  174.         Write_char(0,0x36); //圖形方式
  175.         for(i=0;i<32;i++)
  176.           {
  177.                 Write_char(0,0x80+i);
  178.                 Write_char(0,0x80);
  179.             for(j=0;j<16;j++)
  180.                 {
  181.                         Write_char(1,img[k++]);
  182.                 }
  183.           }

  184.          for(i=0;i<32;i++)
  185.           {
  186.                 Write_char(0,0x80+i);
  187.                 Write_char(0,0x88);
  188.             for(j=0;j<16;j++)
  189.                 {
  190.                         Write_char(1,img[k++]);
  191.                   }
  192.         }
  193. }
  194.         
  195. /******************************************************************************/
  196. void Clr_Scr(void)//清屏函數
  197. {
  198.         Write_char(0,0x01);
  199. }

  200. /******************************************************************************/
  201. void LCD_set_xy( unsigned char x, unsigned char y )
  202. {        //設置LCD顯示的起始位置,X為行,Y為列
  203.     unsigned char address;
  204.         switch(x)
  205.         {
  206.                 case 0: address = 0x80 + y; break;   
  207.             case 1: address = 0x80 + y; break;
  208.                 case 2: address = 0x90 + y; break;
  209.                     case 3: address = 0x88 + y; break;
  210.                 case 4: address = 0x98 + y; break;
  211.                 default:address = 0x80 + y; break;
  212.         }
  213.     Write_char(0, address);
  214. }

  215. /******************************************************************************/
  216. void LCD_Write_string(unsigned char X,unsigned char Y,unsigned char *s)
  217. {        //        中英文字符串顯示函數
  218.         LCD_set_xy( X, Y );

  219.     while (*s)
  220.     {
  221.                 Write_char( 1, *s );
  222.             s ++;
  223.                 Delaynms(1);
  224.         }
  225. }

  226. /******************************************************************************/
  227. void LCD_Write_number(unsigned char s)//        數字顯示函數
  228. {        
  229.         Write_char(1,num[s]);
  230.         Delaynms(1);
  231. }
  232. /******************************************************************************/
  233. void Lcd_Mark2(void)
  234. {
  235.         Clr_Scr();//清屏
  236.         LCD_Write_string(1,0,znwk);//
  237.         LCD_Write_string(2,0,waves);//        
  238.         LCD_Write_string(3,7,CM);//        
  239. }

  240. /********************************************************/
  241.     void Conut(void)
  242.         {
  243.            time=TH0*256+TL0;
  244.            TH0=0;
  245.            TL0=0;
  246.            S=time*1.87/100;       //算出來是CM          11。0592M晶振
  247.            if(flag==1)                      //超出測量
  248.           {         
  249.            flag=0;
  250.            LCD_set_xy( 3, 4 );
  251.            LCD_Write_number(13);
  252.            LCD_Write_number(12);
  253.            LCD_set_xy( 3, 5 );
  254.            LCD_Write_number(13);
  255.            LCD_Write_number(13);
  256.          
  257.            }
  258.          else
  259.           {
  260.            disbuff[1]=S%1000/100;
  261.            disbuff[2]=S%1000%100/10;
  262.            disbuff[3]=S%1000%10 %10;
  263.            LCD_set_xy( 3, 4 );
  264.            LCD_Write_number(disbuff[1]);
  265.            LCD_Write_number(12);
  266.            LCD_set_xy( 3, 5 );
  267.            LCD_Write_number(disbuff[2]);
  268.            LCD_Write_number(disbuff[3]);
  269.           }
  270.         }
  271. /********************************************************/
  272. void delayms(unsigned int ms)
  273. {
  274.         unsigned char i=100,j;
  275.         for(;ms;ms--)
  276.         {
  277.                 while(--i)
  278.                 {
  279.                         j=10;
  280.                         while(--j);
  281.                 }
  282.         }
  283. }
  284. /********************************************************/
  285.      void zd0() interrupt 1                  //T0中斷用來計數器溢出,超過測距范圍
  286.   {
  287.     flag=1;                                                         //中斷溢出標志
  288.   }
  289. /********************************************************/
  290.    void  StartModule()                          //T1中斷用來掃描數碼管和計800MS啟動模塊
  291.   {
  292.           TX=1;                                         //800MS  啟動一次模塊
  293.           _nop_();
  294.           _nop_();
  295.           _nop_();
  296.           _nop_();
  297.           _nop_();
  298.           _nop_();
  299.           _nop_();
  300.           _nop_();
  301.           _nop_();
  302.           _nop_();
  303.           _nop_();
  304.           _nop_();
  305.           _nop_();
  306.           _nop_();
  307.           _nop_();
  308.           _nop_();
  309.           _nop_();
  310.           _nop_();
  311.           _nop_();
  312.           _nop_();
  313.           _nop_();
  314.           TX=0;
  315.   }
  316. /********************************************************/
  317. void main(void)
  318. {  
  319.     TMOD=0x01;                   //設T0為方式1,GATE=1
  320.         TH0=0;
  321.         TL0=0;
  322.         TR0=1;

  323.         Lcd_init();       //設置液晶顯示器
  324.         Clr_Scr();        //清屏        
  325.         Disp_img(logo);          //顯示歡迎使用本產品LOGO
  326.         Delaynms(1000);
  327.         Lcd_init();       //從圖形顯示狀態下返回
  328.     Lcd_Mark2();


  329.         while(1)
  330.         {
  331.          StartModule();         
  332.                                          //計算
  333.          while(!RX);                //當RX為零時等待
  334.          TR0=1;                            //開啟計數
  335.          while(RX);                        //當RX為1計數并等待
  336.          TR0=0;                                //關閉計數
  337.          Conut();
  338.          delayms(80);                //80MS

  339.         }

  340. }              
復制代碼



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

使用道具 舉報

沙發
ID:461428 發表于 2019-1-18 17:59 來自手機 | 只看該作者
我就是顯示不了變量數字。。。。拜讀了。。。謝謝
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩国产在线 | 欧美在线成人影院 | 美女在线一区二区 | 日韩av三区 | 欧美一区免费 | 免费观看av网站 | 91porn成人精品 | 中文字幕第三页 | 国产精品久久 | 久久久国产一区 | 日韩成人 | 91欧美激情一区二区三区成人 | 在线观看国产 | 91精品久久久久久久久久 | 97伦理电影 | 91麻豆精品国产91久久久更新资源速度超快 | 亚洲精品国产成人 | 国产精品九九九 | 日韩欧美三区 | 国产黄色大片在线观看 | 国产精品18毛片一区二区 | 国产精品无 | 中日av| 精品视频在线观看 | 毛片网络| 三级成人片| 成人乱人乱一区二区三区软件 | 国产91精品久久久久久久网曝门 | 国产日韩欧美另类 | 精品欧美激情精品一区 | 成人激情视频免费观看 | 亚洲品质自拍视频网站 | 精品国产精品国产偷麻豆 | 中文字幕乱码视频32 | a免费视频 | 天天干天天草 | 在线中文字幕亚洲 | 狠狠干美女 | 中文字幕一区二区三区四区 | 亚洲精品久久久久久久久久久久久 | 狠狠操婷婷|