找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3771|回复: 0
收起左侧

单片机控制ADC0804检测运放TL084的电压仿真

[复制链接]
ID:171096 发表于 2017-4-3 04:42 | 显示全部楼层 |阅读模式

下面这个是整体单片机系统的原理图:
0.png

adc0804检测电压部分原理图:
0.png

运放TL084产生电压部分的仿真:
0.png

单片机汇编语言程序:
  1. ORG 00H
  2. ANL P1,#0F0H
  3. START: MOVX @R0,A

  4. WAIT: JB P2.0,ADC
  5.       CALL DISP
  6.       JMP WAIT

  7. ADC: MOVX A,@R0
  8.      CALL L1
  9.      MOV R1,#0FFH

  10. DISP1: CALL DISP
  11.        DJNZ R1,DISP1
  12.        JMP START

  13. L1: CLR C
  14.     MOV R5,#00H
  15.     MOV R4,#00H
  16.     MOV R3,#08H

  17. NEXT: RLC A
  18.       MOV R2,A
  19.       MOV A,R5
  20.       ADDC A,R5
  21.       DA A
  22.       MOV R5,A
  23.       MOV A,R4
  24.       ADDC A,R4
  25.       MOV R4,A
  26.       MOV A,R2
  27.       DJNZ R3,NEXT
  28.       MOV R7,#02

  29. L2: MOV A,R5
  30.     ADD A,R5
  31.     DA A
  32.     MOV R5,A
  33.     MOV A,R4
  34.     DA A
  35.     MOV R4,A
  36.     DJNZ R7,L2
  37.     RET

  38. DISP: MOV A,R5
  39.       ANL A,#0FH
  40.       ORL A,#10H
  41.       MOV P1,A
  42.       CALL DELAY
  43.       MOV A,R5
  44.       ANL A,#0F0H
  45.       SWAP A
  46.       ORL A,#20H
  47.       MOV P1,A
  48.       CALL DELAY
  49.       MOV A,R4
  50.       ANL A,#0FH
  51.       ORL A,#40H
  52.       MOV P1,A
  53.       CALL DELAY
  54.       MOV A,R4
  55.       ANL A,#0F0H
  56.       SWAP A
  57.       ORL A,#80H
  58.       MOV P1,A
  59.       CALL DELAY
  60.       CLR A
  61.       RET

  62. DELAY: MOV R6,#10

  63. D1: MOV R7,#248
  64.     DJNZ R7,$
  65.     DJNZ R6,D1
  66.     RET
  67.     END
复制代码
c语言程序:
  1. #include"at89X52.h"
  2. sbit LCD_RS    =P2^0;
  3. sbit LCD_RW    =P2^1;
  4. sbit LCD_E    =P2^2;
  5. sbit ADC_CS    =P2^3;
  6. sbit ADC_WR   =P3^6;
  7. sbit ADC_RD    =P3^7;
  8. #define LCD_DATA P0
  9. unsigned char LcdBuf1[10]="";

  10. unsigned char code Bmp001[][8]=
  11. {
  12.   {0x06,0x09,0x09,0x06,0x00,0x00,0x00,0x00},
  13.   {0x06,0x09,0x10,0x10,0x10,0x09,0x06,0x00}
  14. };

  15. void dellay(unsigned int h)
  16. {
  17.   while(h--);   //0.01MS
  18. }

  19. void WriteDataLcd(unsigned char wdata)
  20. {
  21.   LCD_DATA=wdata;
  22.   LCD_RS=1;
  23.   LCD_RW=0;
  24.   LCD_E=0;
  25.   dellay(1000);
  26.   LCD_E=1;

  27. }

  28. void WriteCommandLcd(unsigned char wdata)
  29. {
  30.   LCD_DATA=wdata;
  31.   LCD_RS=0;
  32.   LCD_RW=0;
  33.   LCD_E=0;
  34.   dellay(1000);
  35.   LCD_E=1;
  36. }

  37. void lcd_init(void)
  38. {
  39.   LCD_DATA=0;
  40.   WriteCommandLcd(0x38);
  41.   dellay(1000);
  42.   WriteCommandLcd(0x38);
  43.   dellay(1000);
  44.   WriteCommandLcd(0x01);
  45.   WriteCommandLcd(0x0c);

  46. }

  47. void display_xy(unsigned char x,unsigned char y)
  48. {
  49.   if(y==1)
  50.     x+=0x40;
  51.    x+=0x80;
  52.    WriteCommandLcd(x);
  53. }

  54. void display_string(unsigned char x,unsigned char y,unsigned char *s)
  55. {
  56.   display_xy(x,y);
  57.   while(*s)
  58.     {
  59.       WriteDataLcd(*s);
  60.       s++;

  61.     }

  62. }

  63. void Write_CGRAM(unsigned char add,unsigned char *char_num)
  64. {
  65.   unsigned i;
  66.   add=add<<3;
  67.   WriteCommandLcd(0x40|add+8);
  68.   for(i=0;i<8;i++)
  69.    {
  70.      WriteDataLcd(*char_num++);

  71.    }
  72.   
  73. }

  74. void delayms()
  75. {
  76.   int i;
  77.   for(i=110;i>0;i--);

  78. }
  79. void delay1s()
  80. {
  81.   int i,j;
  82.   for(i=1000;i>0;i--);
  83.    for(j=110;j>0;j--);
  84. }

  85. void convert()
  86. {
  87.   unsigned long value;
  88.   char i;
  89.   unsigned long res;
  90.   int temp,temp2;
  91.   int w;
  92.   P1=0xff;
  93.   ADC_RD=0;
  94.   for(i=0;i<10;i++);
  95.   value=P1;
  96.   res=(float)(2550000+110000*value/30)/(2550-11*value/30);
  97.   temp=(float)(res*10000-10000000)/3851-545;
  98.   temp2 = temp;
  99.   if(temp >= 0)
  100.   {
  101.   for(i=6;temp>0;i--)
  102.    {
  103.      LcdBuf1[i]=temp%10+48;
  104. temp/=10;
  105.    }
  106.   }
  107.   if(temp < 0 )
  108.    {

  109. w= -temp;
  110.        for(i=6;w>0;i--)
  111.    {
  112.      LcdBuf1[i]=w%10+48;
  113. w/=10;
  114.    }
  115. }
  116.   if(i>=0&&temp<0)
  117.   {   
  118.      if(temp > -10)
  119.   {
  120.   LcdBuf1[i] = '0';
  121.   i--;
  122.   }
  123.   LcdBuf1[i] = '-';
  124.   i--;   
  125. /*   if(i==5)
  126.   {
  127.   LcdBuf1[5] = '0';
  128.   i --;
  129.   }
  130.   LcdBuf1[4] = '-';
  131.   i--;  */
  132.   
  133.   }
  134.   for(;i>=0;i--)
  135.   LcdBuf1[i]=' ';
  136.   for(i=0;i<5;i++)
  137.   LcdBuf1[i]=LcdBuf1[i+1];
  138.   if(LcdBuf1[4]==' ')LcdBuf1[4]='0';
  139.   LcdBuf1[5]='.';
  140.   LcdBuf1[7]=1;
  141.   LcdBuf1[8]='C';
  142.   WriteCommandLcd(0x84);
  143.   display_string(3,0,LcdBuf1);
  144.   ADC_RD=1;
  145.   ADC_WR=0;
  146.   for(i=0;i<10;i++)
  147.   ADC_WR=1;
  148.   delayms();


  149. }

  150. main()
  151. {
  152.   unsigned char i;
  153.   lcd_init();
  154.   for(i=0;i<2;i++)
  155.   Write_CGRAM(i,Bmp001[i]);
  156.   ADC_CS=0;
  157.   ADC_WR=0;
  158.   for(i=0;i<10;i++);
  159.   ADC_WR=1;
  160.   while(1)
  161.    {

复制代码

0.png


下载:
单片机adc0804 运放TL084仿真.rar (49.86 KB, 下载次数: 23)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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