找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1761|回復: 0
打印 上一主題 下一主題
收起左側

單片機和上位機通信程序遇到問題了 求大神支招!

[復制鏈接]
跳轉到指定樓層
樓主
ID:229339 發(fā)表于 2017-8-25 17:35 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
程序是:發(fā)送給單片機01時,單片機發(fā)送“Turn on ad!”給上位機,開啟ad轉換,并顯示AD的電壓,在數(shù)碼管的前三位顯示ad的數(shù)字量。

但發(fā)送01給單片機后,擰動電位器后,二極管會改變,但數(shù)碼管一直顯示8.8.8.(會閃);求幫忙解決!。!
還有用adc0804芯片來實現(xiàn)ad轉換,我到現(xiàn)在還有點搞不懂。!支招!。

  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空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表