找回密码
 立即注册

QQ登录

只需一步,快速开始

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

光电耦合电路替换继电器Proteus仿真+单片机程序

[复制链接]
ID:367155 发表于 2019-6-9 15:10 | 显示全部楼层 |阅读模式
一个光电耦合电路替换继电器的Proteus仿真
利用光电耦合电路实现低压控制高压
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)

proteus截图

proteus截图


单片机源程序如下:
  1. #include<reg51.h>
  2. #include<math.h>
  3. #define uchar unsigned char
  4. #define unit unsigned int
  5. #define lcd_data P0
  6. #define temp_data P3
  7. sbit CLK=P1^3;
  8. sbit ST=P1^2;
  9. sbit EOC=P1^1;
  10. sbit OE=P1^0;
  11. sbit DQ=P1^7;
  12. sbit lcd_RS=P2^0;
  13. sbit lcd_RW=P2^1;
  14. sbit lcd_EN=P2^2;
  15. sbit Buzz=P1^7;
  16. sbit right=P2^6;
  17. sbit left=P2^7;
  18. sbit Con=P2^5;
  19. uchar t[2],speed,temperature;
  20. uchar TempBufferl[12]={0xdf,0x43,'\0'};
  21. uchar tab[16]={0x20,0x20,0x20,0x54,0x20,0x4d,0x6f,0x6e,0x69,0x74,0x6f,0x72,'\0'};
  22. uchar V[3];
  23. /*...延时.......................*/
  24. void delay(unsigned int x)
  25. {
  26.         unsigned char i;
  27.         while (x--)
  28.         {
  29.                 for(i=0;i<123;i++){;}
  30.         }
  31. }
  32. /*...LCD显示.......................*/
  33. void delay_20ms(void)
  34. {
  35.         uchar i,temp;
  36.         for(i=20;i>0;i--)
  37.         {
  38.                 temp=248;
  39.                 while(--temp);
  40.                 temp=248;
  41.                 while(--temp);
  42.         }
  43. }
  44. void delay_38us(void)
  45. {
  46.         uchar temp;
  47.         temp=18;
  48.         while(--temp);
  49. }
  50. void delay_1520us(void)
  51. {
  52.         uchar i,temp;
  53.         for(i=3;i>0;i--)
  54.         {
  55.                 temp=252;
  56.                 while(--temp);
  57.         }
  58. }
  59. uchar lcd_rd_status()
  60. {
  61.         uchar tmp_sts;
  62.         lcd_data=0xff;
  63.         lcd_RW=1;
  64.         lcd_RS=0;
  65.         lcd_EN=1;
  66.         tmp_sts=lcd_data;
  67.         lcd_EN=0;
  68.         lcd_RW=0;
  69.         return tmp_sts;
  70. }
  71. void lcd_wr_com(uchar command)
  72. {
  73.         while (0x80&lcd_rd_status());
  74.         lcd_RW=0;
  75.         lcd_RS=0;
  76.         lcd_data=command;
  77.         lcd_EN=1;
  78.         lcd_EN=0;
  79. }
  80. void lcd_wr_data(uchar sjdata)
  81. {
  82.         while (0x80&lcd_rd_status());
  83.         lcd_RW=0;
  84.         lcd_RS=1;
  85.         lcd_data=sjdata;
  86.         lcd_EN=1;
  87.         lcd_EN=0;
  88.         lcd_RS=0;
  89. }
  90. void Init_lcd(void)
  91. {
  92.         delay_20ms();
  93.         lcd_wr_com(0x38);
  94.         delay_38us();
  95.         lcd_wr_com(0x0c);
  96.         delay_38us();
  97.         lcd_wr_com(0x01);
  98.         delay_1520us();
  99.         lcd_wr_com(0x06);
  100. }
  101. void GotoXY(uchar x,uchar y)
  102. {
  103.         if(y==0)
  104.                 lcd_wr_com(0x80|x);
  105.         if(y==1)
  106.                 lcd_wr_com(0xc0|x);
  107. }
  108. void Print(uchar *str)
  109. {
  110.         while(*str!='\0')
  111.         {
  112.                 lcd_wr_data(*str);
  113.                 str++;
  114.         }
  115. }
  116. void LCD_Print(uchar x,uchar y,uchar *str)
  117. {
  118.         GotoXY(x,y);
  119.         Print(str);
  120. }
  121. /*...ADC.......................*/
  122. void display_result(uchar d)
  123. {
  124.         float a,b,c;
  125.         a=d/100;
  126.         b=(d%100)/10;
  127.         c=d%10;
  128.        
  129.         V[0]=a+'0';
  130.         V[1]=b+'0';
  131.         V[2]=c+'0';
  132.        
  133.         LCD_Print(5,0,V);
  134.        
  135. }
  136. /*...主函数.......................*/
  137. void main(void)       
  138. {
  139.         uchar d;
  140.         uchar p;
  141.         Buzz=0;
  142.         right=0;
  143.         left=0;
  144.         //i=temp_data;
  145.         delay_20ms();
  146.         Init_LCD();
  147. //display_result(a);
  148.         LCD_Print(0,1,tab);
  149. //delay(10000);
  150.         TMOD=0x02;
  151.         TH0=0x14;
  152.         TL0=0x00;
  153.         IE=0X82;
  154.         TR0=1;
  155.         EA=1;
  156.         P1=0X3f;
  157.         while(1)
  158.         {
  159.                 //i=P3;
  160.                 Buzz=0;
  161.                 right=0;
  162.           left=0;
  163.                 d=temp_data;
  164.                 p = 2.0838*d - 240.51;
  165.                 ST=0;
  166.                 ST=1;
  167.                 ST=0;
  168. ……………………

  169. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
光电耦合.7z (105.27 KB, 下载次数: 37)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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