找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2871|回复: 2
收起左侧

单片机双机通讯设计 含源码 原理图+文档

[复制链接]
ID:640944 发表于 2020-4-21 21:12 | 显示全部楼层 |阅读模式
甲机
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. #define Data_ADC0809 P1                 //????P1???Data_ADC0809 ???????????Data_ADC0809??????P1???



  5. uchar temp;                                         //??????ADC????
  6. //ADC0809
  7. sbit ST=P3^3;
  8. sbit EOC=P3^6;
  9. sbit OE=P3^2;


  10. uchar code table[]={
  11. 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  12. sbit led0=P0^0;
  13. sbit led1=P0^3;
  14. sbit key=P3^5;
  15. uchar count,a;

  16. extern uchar ADC0809();


  17. void delay(uint z)
  18. {
  19.         uint i,j;
  20.         for(i=z;i>0;i--)
  21.                 for(j=120;j>0;j--);
  22. }
  23. void put(uchar c)
  24. {
  25.         SBUF=c;
  26.         while(!TI);
  27.         TI=0;
  28. }
  29. void init()
  30. {
  31.         TMOD=0x20;
  32.         TH1=0XFD;
  33.         TL1=0XFD;
  34.         SCON=0X50;
  35.         TR1=1;
  36.         EA=1;
  37.         ES=1;
  38. }

  39. //ADC0809??????
  40. uchar ADC0809()
  41. {
  42.         uchar temp_=0x00;
  43.         //??????????

  44.         OE=0;
  45.         //????????
  46.         ST=0;
  47.         //??????
  48.         ST=1;
  49.         ST=0;
  50.         //???ж???AD???????
  51.         while(EOC==0)
  52.         //????????AD?
  53.         OE=1;
  54.         temp_=Data_ADC0809;
  55.         OE=0;
  56.         return temp_;
  57. }

  58. void main() //??????
  59. {
  60.         P2=0x00;
  61.         init();
  62.         while(1)
  63.         {
  64.         
  65.                 temp=ADC0809();          //????????
  66.         
  67.         
  68.                 if(key==0)
  69.                 {
  70.                         delay(10);
  71.                         if(key==0)
  72.                         {
  73.                         put(temp);

  74.                         }
  75.                 }
  76.                         
  77.                         delay(100);
  78.         }
  79. }
  80. void ser() interrupt 4           //????
  81. {
  82.         if(RI==1)
  83.         {
  84.                 a=SBUF;
  85.                 RI=0;
  86.                 P2=table[a];
  87.         }
  88. }
复制代码

乙机
  1. #include<reg51.h>          //????
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit key =P3^6;         //????        
  5. sbit spwm =P1^0;   //pwm????
  6. uchar a,pwm,flag,t;  //???????????
  7. uint num=0;
  8. uchar count=-1;
  9. void delay(uint z)
  10. {
  11.         uint i,j;
  12.         for(i=z;i>0;i--)
  13.                 for(j=110;j>0;j--);
  14. }
  15. /**************************************                                                                                                                                                                           
  16. 1602???
  17. **************************************/
  18. sbit RS = P2^5;         //lcd??????????        
  19. sbit RW = P2^6;
  20. sbit E  = P2^7;
  21. /**************************************
  22. ?????
  23. **************************************/
  24. void delay5ms()   
  25. {
  26.     uchar i,v,k;
  27.     for(i=1;i>0;i--)
  28.         for(v=168;v>0;v--)
  29.             for(k=22;k>0;k--);
  30. }
  31. /**************************************
  32. д???
  33. **************************************/
  34. void lcd_Write_com(uchar com)         
  35. {
  36.         RS=0;                        //???????????
  37.         RW=0;                                  //д????
  38.         P0=com;                                          //д???
  39.         delay5ms();        E=1;                //????????
  40.         delay5ms();        E=0;                //?????????
  41. }
  42. /**************************************
  43. д????
  44. **************************************/
  45. void lcd_write_date(uchar date)        
  46. {
  47.         RS=1;                                        //????????????
  48.         RW=0;                                        //д????
  49.         P0=date;                                //д????
  50.         delay5ms();        E=1;                //????????
  51.         delay5ms();        E=0;                //?????????
  52. }
  53. /**************************************
  54. ???????
  55. **************************************/
  56. void dis_lcd1602(uchar x,uchar y,uchar dat)
  57. {
  58.         uchar add;
  59.         if(y==1)         add=(0x80+x);
  60.         if(y==2)         add=(0xc0+x);
  61.         lcd_Write_com(add);                //д???
  62.         lcd_write_date(dat);        //д????
  63. }  
  64. /**************************************
  65. ????????
  66. **************************************/
  67. void lcd1602_init()
  68. {
  69.         lcd_Write_com(0x38);        //????8λ?????2?У?5*7
  70.         lcd_Write_com(0x01);        //????
  71.         lcd_Write_com(0x0c);        //??????????????????
  72.         lcd_Write_com(0x06);        //?趨???????????????λ
  73.         lcd_Write_com(0x80);        //???????
  74. }
  75. /**************************************
  76. ?????????????
  77. **************************************/
  78. void hz_lcdDis(uchar x,uchar y,uchar *p) //???????
  79. {
  80.    uchar i=0,temp;
  81.    if(x)temp = 0x40;   else temp = 0;
  82.    for(i=y;*p!='\0';i++,p++)
  83.    {
  84.                 lcd_Write_com(i|0x80+temp);
  85.                 lcd_write_date(*p);
  86.                 delay5ms();                          
  87.    }
  88. }
  89. /**************************************
  90. ?????????????
  91. **************************************/
  92. void  num_lcdDis(uchar X,uchar Y,uint num,uchar n)        
  93. {
  94.         uint i=0,temp,hang;   
  95.         n +=1;
  96.            if(X)hang = 0x40;else hang = 0;
  97.            for(i=(n-1);i>0;i--)
  98.     {           
  99.                   lcd_Write_com((i+Y-1)|0x80+hang);          //???λ??????
  100.                   temp = num%10+0x30;
  101.                   lcd_write_date(temp);        
  102.                  delay5ms();
  103.                   num/=10;                                         
  104.         }        
  105. }
  106. void put(uchar c)          //???????c
  107. {
  108.         SBUF=c;
  109.         while(!TI);
  110.         TI=0;
  111. }
  112. void init()        //?????PWM?????
  113. {
  114.         TMOD=0X20;
  115.         TH0=236;
  116.         TL0=235;
  117.         TH1=0XFD;
  118.         TL1=0XFD;
  119.         TR0=1;
  120.         TR1=1;
  121.         ET0=1;
  122.         SM0=0;
  123.         SM1=1;
  124.         REN=1;
  125.         SCON=0X50;
  126.         EA=1;
  127.         ES=1;
  128.         spwm=1;
  129. }
  130. void main()
  131. {
  132.         lcd1602_init();//????????
  133.         hz_lcdDis(0,1,"Welcome");                //?????
  134.         init();

  135.         while(1)          //??????????????????????????
  136.         {

  137.             
  138. //         if(flag==1)
  139. //         {
  140. //         flag=0;
  141. //         ES=0;
  142. //         pwm=SBUF;
  143. //         while(!TI);
  144. //         TI=0;
  145. //         ES=1;
  146. //         }

  147.         
  148.                 delay(100);        
  149.         }        
  150. }
  151. void to()interrupt 1 //pwm?ж?
  152. {
  153.   t++;
  154.   if(t==255)
  155.   {
  156.           t=0;
  157.         spwm=0;
  158.   }
  159.   if(pwm==t)
  160.   {
  161.    spwm=1;
  162.   
  163.   }
  164. }
  165. void ser() interrupt 4 //???????
  166. {
  167.         if(RI==1)
  168.         {
  169.                 num++;
  170.                 RI=0;
  171.                 a=SBUF;
  172. //                flag=1;
  173.                   pwm=SBUF;
  174.                 num_lcdDis(1,0,a,3); //AD?????2λ
  175.                 put(num);
  176.                 if(num==9){
  177.                  num=0;
  178.                 }
  179.         }
  180. }
复制代码




乙机代码图

乙机代码图

甲机代码图

甲机代码图

文件图

文件图

波形图

波形图

电路图

电路图

单片机大作业双机通讯.rar

731.66 KB, 下载次数: 17, 下载积分: 黑币 -5

文件夹 包括仿真 代码 文档

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:737050 发表于 2020-4-24 15:38 | 显示全部楼层
追问一下实现的是什么功能?
回复

使用道具 举报

ID:640944 发表于 2020-4-26 20:20 | 显示全部楼层
yuxinhai 发表于 2020-4-24 15:38
追问一下实现的是什么功能?

甲机发送正弦采样,乙机显示接收字节,并输出接收的正弦波
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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