找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机和上位机通信程序遇到问题了 求大神支招!

[复制链接]
跳转到指定楼层
楼主
ID:229339 发表于 2017-8-25 17:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
程序是:发送给单片机01时,单片机发送“Turn on ad!”给上位机,开启ad转换,并显示AD的电压,在数码管的前三位显示ad的数字量。

但发送01给单片机后,拧动电位器后,二极管会改变,但数码管一直显示8.8.8.(会闪);求帮忙解决!!!!
还有用adc0804芯片来实现ad转换,我到现在还有点搞不懂!!!支招!!!

  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #include <stdio.h>
  4. #define uchar unsigned char
  5. sbit dula=P2^6;
  6. sbit wela=P2^7;
  7. sbit adwr=P3^6;
  8. sbit adrd=P3^7;
  9.                   
  10. uchar a,b,flag,flag_ad,flag_smg,ad_vol,t0;
  11. float num;

  12. uchar code table[]={
  13. 0x3f,0x06,0x5b,0x4f,
  14. 0x66,0x6d,0x7d,0x07,
  15. 0x7f,0x6f,0x77,0x7c,
  16. 0x39,0x5e,0x79,0x71};

  17. void delay(uchar z)
  18. {                                       
  19.         uchar x,y;
  20.         for(x=z;x>0;x--)
  21.                 for(y=110;y>0;y--);      
  22. }

  23. void display(uchar num)
  24. {
  25.         uchar bai,shi,ge;
  26.         bai=num/100;
  27.         shi=num%100/10;
  28.         ge=num%10;

  29.         wela=1;
  30.         P0=0x7e;
  31.         wela=0;
  32.         P0=0xff;
  33.         dula=1;
  34.         dula=table[bai];
  35.         dula=0;
  36.         delay(5);

  37.         wela=1;
  38.         P0=0x7d;
  39.         wela=0;
  40.         P0=0xff;
  41.         dula=1;
  42.         dula=table[shi];
  43.         dula=0;
  44.         delay(5);

  45.         wela=1;
  46.         P0=0x7b;
  47.         wela=0;
  48.         P0=0xff;
  49.         dula=1;
  50.         dula=table[ge];
  51.         dula=0;
  52.         delay(5);

  53. }

  54. uchar ad()
  55. {
  56.         uchar adval;
  57.         wela=1;
  58.         P0=0x7f;
  59.         adwr=1;
  60.         adwr=0;
  61.         adwr=1;

  62.         delay(10);

  63.         P1=0xff;
  64.         adrd=1;
  65.         adrd=0;
  66.         adval=P1;
  67.         adrd=1;
  68.         P1=adval;
  69.         return adval;
  70. }



  71. void main()
  72. {
  73.         EA=1;
  74.         TMOD=0x21;
  75.         TH1=0xfd;
  76.         TL1=0xfd;
  77.         TR1=1;
  78.         TH0=0x4c;
  79.         TL0=0x00;
  80.         ET0=1;
  81.         SM0=0;
  82.         SM1=1;
  83.         REN=1;
  84.         ES=1;

  85.         while(1)
  86.         {
  87.                 if(flag==1)
  88.                 {
  89.                         flag=0;
  90.                         ES=0;
  91.                         TI=1;
  92.                         switch(b)
  93.                         {        
  94.                                 case 0 : puts("Turn on ad!\n");TR0=1;break;
  95.                                 case 1 : puts("Turn off ad!\n");TR0=0;break;
  96.                                 case 2 : puts("Error!\n");break;
  97.                         }
  98.                         while(!TI);
  99.                         TI=0;
  100.                         ES=1;
  101.                 }
  102.                 if(flag_smg==1)
  103.                 {
  104.                         ES=0;
  105.                         flag_smg=0;
  106.                         ad_vol=ad();
  107.                         num=(float)ad_vol*5.0/256.0;
  108.                         TI=1;
  109.                         printf("The voltagle is %fV\n",num);
  110.                         while(!TI);
  111.                         TI=0;
  112.                         ES=1;
  113.                 }
  114.                 display(ad_vol);
  115.         }

  116. }

  117. void timer0() interrupt 1
  118. {
  119.         TH0=0x4c;
  120.         TL0=0x00;
  121.         t0++;
  122.         if(t0==20)
  123.         {
  124.                 t0=0;
  125.                 flag_smg=1;
  126.         }      
  127. }



  128. void uart() interrupt 4
  129. {
  130.         RI=0;
  131.         a=SBUF;
  132.         flag=1;
  133.         if(a==1)
  134.                 b=0;
  135.         else if(a==2)
  136.                 b=1;
  137.         else
  138.                 b=2;               
  139. }
复制代码


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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