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

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

QQ登錄

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

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

關(guān)于單片機(jī)+RS485雙機(jī)通信接收機(jī)編程問(wèn)題

[復(fù)制鏈接]
ID:548414 發(fā)表于 2019-7-29 14:52 | 顯示全部樓層 |閱讀模式
如何把接受過(guò)來(lái)的AD值在從機(jī)lcd顯示呢??求指點(diǎn)!。。。!
主機(jī)單片機(jī)程序
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #include <stdio.h>

  4. #define uint unsigned int
  5. #define uchar unsigned char
  6. void delay4us()
  7. {   
  8.     _nop_();
  9.         _nop_();
  10.         _nop_();
  11.         _nop_();
  12. }

  13. sbit RS485E=P3^7;   //定義485的使能腳

  14. sbit CLK  = P3^6;          //時(shí)鐘         
  15. sbit CS   = P3^5;          //片選
  16. sbit DIN  = P3^4;          //輸入
  17. sbit DOUT = P3^3;          //輸出

  18. sbit LCD1602_E=P2^7;
  19. sbit LCD1602_RW=P2^5;
  20. sbit LCD1602_RS=P2^6;

  21. uchar disp[]="0.00V";
  22. uchar code line1[]="NOW VOL:";

  23. void delayms(uint ms){
  24.      uchar t;
  25.      while(ms--)
  26.      for(t=0;t<120;t++);
  27. }
  28. bit LCD_BUSY_CHECK(){
  29. bit result;

  30.     LCD1602_RS=0;
  31.     LCD1602_RW=1;
  32.     LCD1602_E=1;
  33.     delay4us();
  34.     result=(bit)(P0&0x80);
  35.     LCD1602_E=0;
  36.     return result;
  37. }
  38. void lcdwrc(uchar cmd)
  39. {
  40.            while(LCD_BUSY_CHECK());
  41.         LCD1602_RS=0;
  42.         LCD1602_RW=0;
  43.         LCD1602_E=0;
  44.         _nop_();_nop_();
  45.         P0=cmd;
  46.         delay4us();
  47.         LCD1602_E=1;
  48.         delay4us();
  49.         LCD1602_E=0;
  50. }

  51. void set_disp_pos(uchar pos)
  52. {
  53.     lcdwrc(pos|0x80);
  54. }

  55. void lcdwrd(uchar dat)
  56. {
  57.     while(LCD_BUSY_CHECK());
  58.         LCD1602_RS=1;
  59.         LCD1602_RW=0;
  60.         LCD1602_E=0;
  61.         P0=dat;
  62.         delay4us();
  63.         LCD1602_E=1;
  64.         delay4us();
  65.         LCD1602_E=0;
  66. }
  67. void LCD_init()
  68. {
  69.    lcdwrc(0x38);
  70.    delayms(1);
  71.    lcdwrc(0x0c);
  72.    delayms(1);
  73.    lcdwrc(0x06);
  74.    delayms(1);
  75.    lcdwrc(0x01);
  76.    delayms(1);
  77. }

  78. void SPI_Write(uchar moshi)
  79. {                         //寫(xiě)模式函數(shù)
  80.      uint i;
  81.      CS = 0;
  82.       for(i = 0; i < 8; i++){   
  83.           CLK = 0;
  84.          DIN = moshi>>7;
  85.          CLK = 1;
  86.          moshi <<= 1;
  87.     }
  88.      CLK = 0;
  89. }

  90. uint GetValue()
  91. {                     //讀取DOUT管腳,得到最終數(shù)字量函數(shù)
  92.      uint i, ans = 0;
  93.      for(i = 0; i < 12; i++){
  94.          CLK = 0;
  95.          ans <<= 1;
  96.          ans |= DOUT;
  97.          CLK = 1;
  98.     }
  99.      CLK = 0;
  100.      return ans;
  101. }

  102. uint Read_AD_Data(uchar moshi)
  103. {                             //讀取最終的數(shù)字量函數(shù)
  104.       uint i, ans;
  105.      SPI_Write(moshi);   
  106.      for(i = 0; i < 5; i++);

  107.       CLK = 1;
  108.       _nop_();
  109.      _nop_();
  110.       CLK = 0;
  111.      _nop_();
  112.       _nop_();

  113.      ans = GetValue();
  114.      CS = 1;
  115.      return ans;
  116. }


  117. void delay(unsigned char i)
  118. {
  119.         unsigned char j;
  120.         for(i; i > 0; i--)
  121.                 for(j = 200; j > 0; j--);
  122. }



  123. void main()
  124. {
  125.        uchar i;
  126.            uint j;
  127.        uint d,temp,count=50;
  128.        LCD_init();
  129.        delayms(10);

  130.        SCON = 0x50;      //REN=1允許串行接受狀態(tài),串口工作模式1                              
  131.            TMOD|= 0x20;      //定時(shí)器工作方式2                    
  132.            PCON|= 0x80;                                                         
  133.                
  134.            TH1  = 0xFD;     //baud*2  /* reload value 19200、數(shù)據(jù)位8、停止位1。效驗(yàn)位無(wú)                  
  135.            TR1  = 1;                                                            
  136.        ES   = 1;        //開(kāi)串口中斷                  
  137.            EA   = 1;        // 開(kāi)總中斷

  138.        while(1){
  139.        if(count == 50)
  140.            {                           //每50下讀取轉(zhuǎn)換值,避免數(shù)字跳動(dòng)太快
  141.            temp = Read_AD_Data(0xE4);
  142.            count = 0;

  143.        }
  144.       count++;

  145.           RS485E=1;           //RS5485E=0為接收狀態(tài)  RS5485E=1為發(fā)送狀態(tài)  // max485(半雙工通信) RE/DE定義 RE=0為接受狀態(tài)  DE=1為發(fā)送狀態(tài)(參考MAX485芯片管腳)  
  146.           for(j=0;j<5;j++){
  147.                   SBUF=disp[j];
  148.            }           //發(fā)送數(shù)據(jù)
  149.            delay(40);

  150.           d=(double)temp*0.122;
  151.           disp[0]=d/100+'0';
  152.           disp[1]='.';
  153.           disp[2]=d%100/10+'0';
  154.           disp[3]=d%100%10+'0';         

  155.           set_disp_pos(0x01);
  156.           i=0;
  157.           while(line1[i]!='\0')
  158.           lcdwrd(line1[i++]);

  159.           set_disp_pos(0x46);
  160.           i=0;
  161.           while(disp[i]!='\0')
  162.           lcdwrd(disp[i++]);
  163.           }
  164. }
復(fù)制代碼


從機(jī)程序:

  1. #include<reg51.h>
  2. #include <stdio.h>
  3. #include<intrins.h>

  4. #define uint unsigned int
  5. #define uchar unsigned char        

  6. //--定義全局變量--//
  7. unsigned int ReData;
  8. sbit RS485E=P3^7;   //定義485的使能腳
  9. unsigned int ReData;

  10. sbit LCD1602_E=P2^7;
  11. sbit LCD1602_RW=P2^5;
  12. sbit LCD1602_RS=P2^6;

  13. uchar disp[]="0.00V";
  14. uchar code line1[]="NOW VOL:";

  15. void delay4us()
  16. {   
  17.     _nop_();
  18.         _nop_();
  19.         _nop_();
  20.         _nop_();
  21. }

  22. void delayms(uint ms){
  23.      uchar t;
  24.      while(ms--)
  25.      for(t=0;t<120;t++);
  26. }
  27. bit LCD_BUSY_CHECK(){
  28. bit result;

  29.     LCD1602_RS=0;
  30.     LCD1602_RW=1;
  31.     LCD1602_E=1;
  32.     delay4us();
  33.     result=(bit)(P0&0x80);
  34.     LCD1602_E=0;
  35.     return result;
  36. }
  37. void lcdwrc(uchar cmd)
  38. {
  39.            while(LCD_BUSY_CHECK());
  40.         LCD1602_RS=0;
  41.         LCD1602_RW=0;
  42.         LCD1602_E=0;
  43.         _nop_();_nop_();
  44.         P0=cmd;
  45.         delay4us();
  46.         LCD1602_E=1;
  47.         delay4us();
  48.         LCD1602_E=0;
  49. }

  50. void set_disp_pos(uchar pos)
  51. {
  52.     lcdwrc(pos|0x80);
  53. }

  54. void lcdwrd(uchar dat)
  55. {
  56.     while(LCD_BUSY_CHECK());
  57.         LCD1602_RS=1;
  58.         LCD1602_RW=0;
  59.         LCD1602_E=0;
  60.         P0=dat;
  61.         delay4us();
  62.         LCD1602_E=1;
  63.         delay4us();
  64.         LCD1602_E=0;
  65. }
  66. void LCD_init()
  67. {
  68.    lcdwrc(0x38);
  69.    delayms(1);
  70.    lcdwrc(0x0c);
  71.    delayms(1);
  72.    lcdwrc(0x06);
  73.    delayms(1);
  74.    lcdwrc(0x01);
  75.    delayms(1);
  76. }


  77. void delay(unsigned char i)
  78. {
  79.         unsigned char j;
  80.         for(i; i > 0; i--)
  81.                 for(j = 200; j > 0; j--);
  82. }


  83. void main(void)
  84. {
  85.         uchar i;
  86.         SCON = 0x50;      //REN=1允許串行接受狀態(tài),串口工作模式1                              
  87.         TMOD|= 0x20;      //定時(shí)器工作方式2                    
  88.     PCON|= 0x80;                                                         
  89.                
  90.         TH1  = 0xFD;     //baud*2  /* reload value 19200、數(shù)據(jù)位8、停止位1。效驗(yàn)位無(wú)         
  91.                
  92.         TR1  = 1;                                                            
  93.         ES   = 1;        //開(kāi)串口中斷                  
  94.         EA   = 1;        // 開(kāi)總中斷

  95.         LCD_init();
  96.     delayms(10);

  97.         while(1)
  98.         {
  99.                   set_disp_pos(0x01);
  100.               i=0;
  101.               while(line1[i]!='\0')
  102.               lcdwrd(line1[i++]);
  103.               set_disp_pos(0x46);
  104.               i=0;
  105.               while(disp[i]!='\0')
  106.               lcdwrd(ReData);
  107.                   RS485E=0;                    // RS5485E=0為接收狀態(tài)  RS5485E=1為發(fā)送狀態(tài)
  108.               delay(20);
  109.         }
  110.                                 
  111. }


  112. void ser_int (void) interrupt 4 using 1
  113. {

  114. if(RI == 1)        //RI接受中斷標(biāo)志
  115. {
  116.          RI = 0;                    //清除RI接受中斷標(biāo)志
  117.         ReData = SBUF;  //SUBF接受/發(fā)送緩沖器
  118. }
  119. }
復(fù)制代碼

回復(fù)

使用道具 舉報(bào)

ID:548414 發(fā)表于 2019-7-29 19:48 | 顯示全部樓層
從ReData怎么取出?詳細(xì)
回復(fù)

使用道具 舉報(bào)

ID:482138 發(fā)表于 2019-7-29 22:32 | 顯示全部樓層
講詳細(xì)一點(diǎn)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久亚洲国产精品 | 99热精品在线观看 | 一区二区国产精品 | 国产精品九九视频 | 午夜亚洲 | av男人的天堂在线 | 久久99精品久久久水蜜桃 | 一区二区三区精品在线视频 | 久久久久久久久久久久91 | 香蕉视频91| 91麻豆产精品久久久久久夏晴子 | 欧美一级欧美三级在线观看 | 久久一区二区三区四区 | 一区二区三区国产好的精 | 狠狠做六月爱婷婷综合aⅴ 国产精品视频网 | 日日干夜夜草 | www.一区二区三区 | 亚洲男人网 | 国产高清视频一区 | 国产精品日韩欧美一区二区 | 欧美色综合天天久久综合精品 | 狠狠干天天干 | 日日摸日日碰夜夜爽2015电影 | 亚洲精品久久久一区二区三区 | 一区观看| 国产欧美精品在线 | 欧美在线a | 性做久久久久久免费观看欧美 | 欧美三级电影在线播放 | 国产视频91在线 | 日日拍夜夜| 国产一区二区三区久久久久久久久 | 羞羞羞视频 | 最近中文字幕第一页 | 国产91av视频在线观看 | 亚洲国产免费 | 精品欧美一区二区精品久久久 | 国产97久久 | 国产精品爱久久久久久久 | 免费看的av | 成人av看片 |