找回密码
 立即注册

QQ登录

只需一步,快速开始

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

ad7705转换器显示输入电压无变化 附单片机程序

[复制链接]
跳转到指定楼层
楼主
ID:506839 发表于 2019-5-19 20:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
求助,这个程序是将ad7705的输入电压显示到lcd上,用的单片机是stc89c52,可是我lcd上一直显示2.4999mV,没有变化,不知道哪里出问题了

单片机源程序如下:
  1. #include <intrins.h>
  2. #include<reg51.h>


  3. #define true 1
  4. #define false 0

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

  7.      
  8. #define lcddata 1               
  9. #define instruction 0        
  10. #define read 1                        
  11. #define write 0                        




  12. sbit AD_SCLK=P1^3;
  13. sbit AD_DIN=P1^2;
  14. sbit AD_OUT=P1^4;
  15. sbit AD_DRDY=P1^5;




  16. sbit CS=P1^0;
  17. sbit RST=P1^1;


  18. sbit L_DI=P2^6;                        
  19. sbit L_RW=P2^5;                        
  20. sbit L_EN=P2^7;                        






  21. void init_time(void);                                   



  22. //void init_ad_7705(void);                     
  23. unsigned int read_ad7705(uchar channel);           
  24. void ad_reset();                                                   
  25. void ad_write(unsigned char command_byte);
  26. unsigned int ad_read(unsigned char num);   

  27. void Delayms(unsigned int no);                                
  28.                                                          

  29. unsigned long Temparature2,Temparature1;               
  30. uchar CycleCheck=0;                                          
  31. void Send_Data(        bit DI,                           
  32.                                 bit RW,                                    
  33.                                 unsigned char LData);

  34. void init_LCD() ;
  35. void Send_NumberV(        unsigned char Row,                  
  36.                                         unsigned char Column,                                                         
  37.                                         unsigned long number,                          
  38.                                         unsigned char no,                              
  39.                                         unsigned char point                           
  40.                                         );
  41. void Send_TextV(unsigned char Row,                  
  42.                                 unsigned char Column,                                                                                                
  43.                                 unsigned char code *po,                     
  44.                                 unsigned char no                           
  45.                                 );
  46. void init_ad_7705(uchar channel);
  47. void ad_Calculator(uchar channel);




  48. void main(void)                  
  49. {      


  50.         RED10        = 0;     



  51.       
  52.         init_time();           

  53.         CS=0;                        
  54.         RST=1;                                 
  55.          
  56.         init_LCD() ;                  
  57.       
  58.       
  59.         Send_TextV(0,0,"CH0:      mV",12);         
  60.     Send_TextV(1,0,"CH1:      mV",12);         
  61.       

  62.                 init_ad_7705(0);
  63.         Delayms(100);
  64.         init_ad_7705(1);         

  65.       
  66.       
  67.         while(1)
  68.         {        if(CycleCheck>=20)      
  69.                  {        CycleCheck=0;                             
  70.                        

  71.                         ad_Calculator(0);      
  72.                         Temparature1=read_ad7705(0);         
  73.                         Delayms(100);
  74.                        
  75.                         ad_Calculator(1);                              
  76.                         Temparature2=read_ad7705(1);         
  77.                        
  78.       

  79.                         Temparature1=Temparature1*25000/65536;         
  80.                         Temparature2=Temparature2*25000/65536;           
  81.                        
  82.                        

  83.                
  84.                        
  85.                         Send_NumberV(0,4,Temparature1,5,1);                 
  86.                         Send_NumberV(1,4,Temparature2,5,1);                  
  87.                 }
  88.         }
  89. }


  90. void ad_Calculator(uchar channel)
  91. {               
  92.         AD_SCLK=1;
  93.         AD_DIN=1;
  94.                                  
  95.         if(channel==0)
  96.         {        ad_write(0x10);                        
  97.                 _nop_();_nop_();_nop_();
  98.                 ad_write(0x44);                        
  99.                
  100.           }
  101.       
  102.       
  103.           if(channel==1)
  104.           {      
  105.                
  106.                 ad_write(0x11);                        
  107.                 _nop_();_nop_();_nop_();
  108.                 ad_write(0x44);                        
  109.           }
  110.       
  111.         AD_SCLK=1;
  112.         AD_DIN=1;      


  113. }

  114. void init_ad_7705(uchar channel)   
  115. {
  116.         EA=0;
  117.         AD_SCLK=1;
  118.         AD_DIN=1;
  119.         ad_reset();   
  120.       
  121.         if(channel==0)         
  122.         {      
  123.                 ad_write(0x20);                        
  124.                 _nop_();_nop_();_nop_();  
  125.                 ad_write(0x06);                        
  126.                                                                
  127.                                                                
  128.                                                                
  129.       
  130.                 _nop_();_nop_();_nop_();
  131.                 ad_write(0x10);                        
  132.                 _nop_();_nop_();_nop_();
  133.                 ad_write(0x44);                        
  134.                
  135.           }
  136.       
  137.       
  138.           if(channel==1)
  139.           {      
  140.                 ad_write(0x21);                        
  141.                 _nop_();_nop_();_nop_();  
  142.                 ad_write(0x06);                        
  143.                                                                
  144.                                                                
  145.                                                                
  146.                 _nop_();_nop_();_nop_();
  147.                 ad_write(0x11);                        
  148.                 _nop_();_nop_();_nop_();
  149.                 ad_write(0x44);                        
  150.           }
  151.       
  152.         AD_SCLK=1;
  153.         AD_DIN=1;
  154.         EA=1;         

  155.       
  156. }

  157. void Send_Data(        bit DI,                           
  158.                                 bit RW,                                    
  159.                                 unsigned char LData)                                                                                         
  160. {        
  161.         
  162.       
  163.         _nop_();
  164.       
  165.         Delayms(3);
  166.       

  167.       
  168.         _nop_();_nop_();_nop_();_nop_();
  169.         L_DI=DI;
  170.         L_RW=RW;
  171.         _nop_();
  172.         P0=0xff;               
  173.         _nop_();_nop_();_nop_();_nop_();
  174.         L_EN=0;

  175.         P0=LData;

  176.         _nop_();_nop_();_nop_();_nop_();
  177.         _nop_();_nop_();_nop_();_nop_();

  178.         L_EN=1;      

  179.         _nop_();_nop_();_nop_();_nop_();
  180.         _nop_();_nop_();_nop_();_nop_();


  181.         L_EN=0;
  182.         _nop_();_nop_();_nop_();_nop_();
  183.         P0=0xff;         
  184.         _nop_();
  185.         L_DI=1;
  186.         L_RW=1;
  187.         P0=0xff;
  188.         _nop_();
  189.         return;
  190. }  

  191. void clear_LCD(void)                                                        
  192. {
  193.         _nop_();
  194.         Send_Data(instruction,write,0x01);        
  195.         Delayms(3);               
  196. }


  197. void init_LCD(void)                        
  198. {        _nop_();
  199.         Send_Data(instruction,write,0x01);        
  200.         Delayms(15);
  201.         _nop_();
  202.         Send_Data(instruction,write,0x3c);        
  203.         Delayms(15);
  204.         _nop_();
  205.         Send_Data(instruction,write,0x0c);        
  206.         _nop_();   
  207.         _nop_();
  208.         clear_LCD();           
  209.         return;
  210. }  


  211. void Send_NumberV(        unsigned char Row,                  
  212.                                         unsigned char Column,                                                         
  213.                                         unsigned long number,                          
  214.                                         unsigned char no,                              
  215.                                         unsigned char point                           
  216.                                         )
  217. {        
  218.         unsigned char address,temp,Digital,i,Clear;
  219.         unsigned long MoveBit;
  220.         Clear=true;
  221.         if(Column<16 && Row<4)
  222.         {        _nop_();
  223.                 switch(Row)
  224.                 {
  225.                         case 0:
  226.                                 address=0x80+Column;
  227.                                 break;
  228.                         case 1:
  229.                                 address=0xc0+Column;
  230.                                 break;
  231.                         case 2:
  232.                                 address=0x90+Column;
  233.                                 break;
  234.                         case 3:
  235.                                 address=0xd0+Column;
  236.                                 break;
  237.                         default:
  238.                                 _nop_();
  239.                                 break;
  240.                 }
  241.                 _nop_();
  242.                 Send_Data(instruction,write,address);        
  243.                 _nop_();
  244.                 for(i=0,MoveBit=0x0001;i<(no-1);i++)
  245.                 {        MoveBit=MoveBit*10;
  246.                 }
  247.                 for(i=0;i<no;i++)
  248.                 {        Digital=(number/MoveBit)%10;
  249.                         if(Digital!=0)
  250.                         {        Clear=false;
  251.                         }
  252.                         if(Clear==true && (i==(no-point-1)))
  253.                         {        Clear=false;
  254.                         }
  255.                         MoveBit=MoveBit/10;
  256.                         temp=0x30+Digital;
  257.                         if(Clear==true)
  258.                         {        Send_Data(lcddata,write,0x20);        
  259.                         }else
  260.                         {        Send_Data(lcddata,write,temp);        
  261.                         }
  262.                         if((i==no-point-1) &  point!=0)
  263.                         {        Send_Data(lcddata,write,0x2E);        
  264.                         }
  265.                 }
  266.                 _nop_();
  267.         }
  268.         _nop_();
  269.         return;
  270. }




  271. void Send_TextV(unsigned char Row,                  
  272.                                 unsigned char Column,                                                                                                
  273.                                 unsigned char code *po,                     
  274.                                 unsigned char no                           
  275.                                 )
  276. {        
  277.         unsigned char address,i;
  278.         if(Column<16 && Row<4)
  279.         {        _nop_();
  280.                 switch(Row)
  281.                 {
  282.                         case 0:
  283.                                 address=0x80+Column;
  284.                                 break;
  285.                         case 1:
  286.                                 address=0xc0+Column;
  287.                                 break;
  288.                         case 2:
  289.                                 address=0x90+Column;
  290.                                 break;
  291.                         case 3:
  292.                                 address=0xd0+Column;
  293.                                 break;
  294.                         default:
  295.                                 _nop_();
  296.                                 break;
  297.                 }
  298.                 _nop_();
  299.                 Send_Data(instruction,write,address);        
  300.                 _nop_();
  301.                 for(i=0;i<no;i++)
  302.                 {
  303.                         _nop_();
  304.                         Send_Data(lcddata,write,*po);        
  305.                         _nop_();
  306.                         po++;
  307.                         _nop_();
  308.                 }
  309.                 _nop_();
  310.         }
  311.         _nop_();
  312.         return;
  313. }         

  314. void Delayms(unsigned int no)
  315. {        unsigned char i;
  316.         for(;no>0;)
  317.         {        for(i=120;i>0;)
  318.                 {
  319.                          _nop_();
  320.                         i--;
  321.                         _nop_();
  322.                 }
  323.                 _nop_();
  324.                
  325.                 no--;
  326.                 _nop_();
  327.         }
  328.         _nop_();
  329.         return;
  330. }


  331. void ad_reset()                          
  332. {
  333.         uchar i;
  334.         for(i=0;i<40;i++)
  335.         {        AD_SCLK=0;
  336.                 AD_DIN=1;
  337.                 AD_SCLK=1;         
  338.         }
  339. }



  340. void ad_write(unsigned char command_byte)
  341. {
  342.         unsigned char i;
  343. //        AD_CS=0;      
  344.         AD_SCLK=1;
  345.         AD_DIN=1;
  346.         for (i=0;i<32;i++)
  347.         {
  348.                 AD_SCLK=0;
  349.                 _nop_();_nop_();_nop_();
  350.                 if (command_byte&0x80)
  351.                 {
  352.                         AD_DIN=1;
  353.                 }
  354.                 else
  355.                 {
  356.                         AD_DIN=0;
  357.                 }
  358.                 _nop_();_nop_();_nop_();
  359.                 _nop_();_nop_();_nop_();
  360.                 AD_SCLK=1;
  361.                 command_byte=command_byte*2;
  362.                 _nop_();_nop_();_nop_();
  363.                 _nop_();_nop_();_nop_();
  364.         }
  365.         AD_SCLK=1;
  366.         AD_DIN=1;

  367. }

  368. unsigned int ad_read(unsigned char num)   
  369. {
  370.         unsigned char i;
  371.         unsigned int ad_data;
  372.         ad_data=0;
  373.       

  374.         AD_SCLK=1;
  375.         AD_DIN=1;
  376.         for (i=0;i<num;i++)
  377.         {        _nop_();_nop_();_nop_();                 
  378.                 AD_SCLK=0;
  379.                 ad_data*=2;                                 
  380.                 _nop_();_nop_();_nop_();
  381.                 AD_SCLK=1;
  382.                 _nop_();_nop_();_nop_();                  
  383.                 if (AD_OUT==1)
  384.                 {
  385.                         ad_data=ad_data|0x0001;
  386.                 }
  387.         }
  388. //        AD_CS=
  389.         AD_SCLK=1;
  390.         AD_DIN=1;
  391.         return ad_data;
  392. }

  393.          
  394. unsigned int read_ad7705(uchar channel)  
  395. {                           uint AD1;
  396.                         if(channel==0)   
  397.                         {        ad_write(0x39);                              
  398.                         } else
  399.                         {        ad_write(0x38);                              
  400.                         }
  401.                         AD1=ad_read(16);  


  402.                     return AD1;
  403. }










  404. void init_time(void)
  405. {
  406.         TMOD=0x01;                                          

  407.         ET0=true;                                          
  408.         TH0=0x4c;                                          
  409.         TL0=0x00;
  410.         TR0=true;                                          



  411.         EA=1;                                                   
  412.         _nop_();
  413.         return;
  414. }                    



  415. void time0isr(void) interrupt 1 using 1               
  416. {        EA=false;                                                                  
  417.         TH0=0x4c;                                                                  
  418.         TL0=0x00;
  419.         EA=true;                                                           

  420.     CycleCheck++;

  421.         _nop_();
  422.         return;
  423. }
复制代码




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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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