找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1046|回复: 0
打印 上一主题 下一主题
收起左侧

12864液晶屏显示超声波程序

[复制链接]
跳转到指定楼层
楼主
ID:535628 发表于 2019-7-30 08:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include   <reg52.h>
  2. #include   <intrins.h>

  3. /************????**************/

  4.     sbit     RX    =  P3 ^ 1; //ECH0
  5.     sbit     TX    =  P3 ^ 0;//TRIG
  6.     sbit     CS    =  P2 ^ 0;        
  7.     sbit     SID   =  P2 ^ 1;        //RW   
  8.     sbit     SCLK  =  P2 ^ 3;        //E   

  9. /*************????**************/

  10. void Lcd_init(void);
  11. void Write_char(bit start, unsigned char ddata);
  12. void Send_byte(unsigned char bbyte);
  13. void Delaynms(unsigned int di);
  14. void Clr_Scr(void);
  15. void LCD_set_xy( unsigned char x, unsigned char y );
  16. void LCD_Write_string(unsigned char X,unsigned char Y,unsigned char *s);
  17. void LCD_Write_number(unsigned char s);
  18. void Lcd_Mark2(void);
  19. void Conut(void);
  20. void delayms(unsigned int ms);
  21. void  StartModule();


  22. unsigned char code num[]={"0123456789 :.-"};

  23. unsigned char code Q[] ={"Ç°:"};
  24. unsigned char code CM[] =  {"m"};
  25. unsigned int  time=0;
  26.          long S=0;
  27.          bit  flag =0;
  28. unsigned char disbuff[4]={ 0,0,0,0,};

  29. /**************************************************************/
  30. void Lcd_init(void)         
  31. {
  32.         Delaynms(10);
  33.           CS=1;
  34.           Write_char(0,0x30);  
  35.           Write_char(0,0x0c);  
  36.           Write_char(0,0x01);   
  37. }

  38. /***************************************************************/
  39. void Write_char(bit start, unsigned char ddata)
  40. {
  41.         unsigned char start_data,Hdata,Ldata;
  42.           if(start==0)
  43.                 start_data=0xf8;        
  44.     else   
  45.             start_data=0xfa;  

  46.           Hdata=ddata&0xf0;                 
  47.           Ldata=(ddata<<4)&0xf0;  
  48.           Send_byte(start_data);         
  49.           Delaynms(5);
  50.           Send_byte(Hdata);              
  51.           Delaynms(1);  
  52.           Send_byte(Ldata);                  
  53.           Delaynms(1);  
  54. }

  55. /***************************************************************/
  56. void Send_byte(unsigned char bbyte)
  57. {
  58.         unsigned char i;
  59.         for(i=0;i<8;i++)
  60.            {
  61.                    SID=bbyte&0x80;
  62.                 SCLK=1;
  63.                    SCLK=0;
  64.                    bbyte<<=1;
  65.            }  
  66. }

  67. /***************************************************************/
  68. void Delaynms(unsigned int di)
  69. {
  70.         unsigned int da,db;
  71.         for(da=0;da<di;da++)
  72.                    for(db=0;db<10;db++);
  73. }

  74. /***************************************************************/


  75. void Clr_Scr(void)
  76. {
  77.         Write_char(0,0x01);
  78. }

  79. /****************************************************************/
  80. void LCD_set_xy( unsigned char x, unsigned char y )
  81. {        
  82.     unsigned char address;
  83.         switch(x)
  84.         {
  85.                 case 0: address = 0x80 + y; break;   
  86.             case 1: address = 0x80 + y; break;
  87.                 case 2: address = 0x90 + y; break;
  88.                     case 3: address = 0x88 + y; break;
  89.                 case 4: address = 0x98 + y; break;
  90.                 default:address = 0x80 + y; break;
  91.         }
  92.     Write_char(0, address);
  93. }

  94. /*****************************************************************/
  95. void LCD_Write_string(unsigned char X,unsigned char Y,unsigned char *s)
  96. {        
  97.         LCD_set_xy( X, Y );

  98.     while (*s)
  99.     {
  100.                 Write_char( 1, *s );
  101.             s ++;
  102.                 Delaynms(1);
  103.         }
  104. }

  105. /******************************************************************/
  106. void LCD_Write_number(unsigned char s)
  107. {        
  108.         Write_char(1,num[s]);
  109.         Delaynms(1);
  110. }
  111. /******************************************************************/
  112. void Lcd_Mark2(void)
  113. {
  114.         Clr_Scr();//??
  115.         LCD_Write_string(1,2,Q);

  116.         LCD_Write_string(1,6,CM);        
  117. }
  118. /*************************************************************************************/
  119. /*************************************************************************************/
  120.     void Conut(void)
  121.         {
  122.            time=TH0*256+TL0;
  123.            TH0=0;
  124.            TL0=0;
  125.            S=time*1.87/100;              
  126.            if(flag==1)                     
  127.           {         
  128.            flag=0;
  129.            LCD_set_xy( 1, 4 );
  130.            LCD_Write_number(13);
  131.            LCD_Write_number(12);
  132.            LCD_set_xy( 1, 5 );
  133.            LCD_Write_number(13);
  134.            LCD_Write_number(13);

  135.            }
  136.          else
  137.           {
  138.            disbuff[1]=S%1000/100;
  139.            disbuff[2]=S%1000%100/10;
  140.            disbuff[3]=S%1000%10 %10;
  141.            LCD_set_xy( 1, 4 );
  142.            LCD_Write_number(disbuff[1]);
  143.            LCD_Write_number(12);
  144.            LCD_set_xy( 1, 5 );
  145.            LCD_Write_number(disbuff[2]);
  146.            LCD_Write_number(disbuff[3]);
  147.           }
  148.         }
  149. /********************************************************/
  150. void delayms(unsigned int ms)
  151. {
  152.         unsigned char i=100,j;
  153.         for(;ms;ms--)
  154.         {
  155.                 while(--i)
  156.                 {
  157.                         j=10;
  158.                         while(--j);
  159.                 }
  160.         }
  161. }
  162. /********************************************************/
  163.      void zd0() interrupt 1                  
  164.   {
  165.     flag=1;                                                      
  166.   }
  167. /********************************************************/
  168.    void  StartModule()                          
  169.   {
  170.           TX=1;                                       
  171.           _nop_();
  172.           _nop_();
  173.           _nop_();
  174.           _nop_();
  175.           _nop_();
  176.           _nop_();
  177.           _nop_();
  178.           _nop_();
  179.           _nop_();
  180.           _nop_();
  181.           _nop_();
  182.           _nop_();
  183.           _nop_();
  184.           _nop_();
  185.           _nop_();
  186.           _nop_();
  187.           _nop_();
  188.           _nop_();
  189.           _nop_();
  190.           _nop_();
  191.           _nop_();
  192.           TX=0;
  193.   }
  194. /********************************************************/
  195. void main(void)
  196. {  
  197.     TMOD=0x01;                  
  198.         TH0=0;
  199.         TL0=0;
  200.         TR0=1;

  201.         Lcd_init();      
  202.         Clr_Scr();              



  203.     Lcd_Mark2();


  204.         while(1)
  205.         {
  206.          StartModule();         

  207.          while(!RX);               
  208.          TR0=1;                        
  209.          while(RX);                       
  210.          TR0=0;                                
  211.          Conut();
  212.          delayms(80);                //80MS

  213.         }

  214. }              
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表