久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機實現AD電壓轉換到串口輸出的主從機源代碼以及仿真原理圖

[復制鏈接]
跳轉到指定樓層
樓主
ID:296720 發(fā)表于 2018-3-25 14:26 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
51單片機實現AD電壓轉換到串口輸出的主從機源代碼以及原理圖。
并可以通過LED數碼管顯示
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


主機單片機源程序如下:
  1. #include<reg51.h>

  2. #define  PDATA        P2
  3. #define         aver 2

  4. #define  uint   unsigned int
  5. #define  uchar  unsigned char

  6. sbit  Ledlow = P1^3;
  7. sbit  Ledhig = P1^4;


  8. uchar  table2 []={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  9. uchar  table1 []={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};

  10. //短延時函數:ShortDelay()
  11. void nNop(uchar temp)
  12. {
  13.         uint i;
  14.         for(i=0 ;i<temp; i++) ;
  15. }


  16. //UART初始化:模式1,8位,9600Bds at 11.059MHz
  17. void InitSerial()
  18. {                                                                   // uart in mode 1 (8 bit), REN=1
  19.         TMOD = 0x20 ;       // Timer 1 in mode 2
  20.         TH1  = 0xF4;               // 9600 Bds at 11.059MHz
  21.         TL1  = 0xF4;                                              // 9600 Bds at 11.059MHz
  22.         TR1  = 1;
  23.         PCON = 0x00;                                                     // Timer 1 run
  24.         SCON = 0x50;
  25.         }

  26. //主機接受信息給從機
  27. uchar recivefromslave()
  28. {
  29.                 uchar temp;
  30.                 while(!RI);        
  31.                 temp=SBUF;
  32.                 RI=0;
  33.                 return(temp);
  34.                                 
  35. }


  36. // 顯示
  37. void leddisp(uint temp )
  38. {
  39.         uint i;
  40.         uint getdata1 = 0;
  41.         uint getdata2 = 0;
  42.         temp=temp*aver;
  43.         getdata1=temp/100;
  44.         getdata2=temp/10;
  45.         getdata2=getdata2%10;

  46.         
  47.          for(i=0;i<30;i++)
  48.         {
  49.         PDATA=table1[getdata1];
  50.         Ledlow =0;
  51.          Ledhig = 1;        
  52.         nNop(1000);
  53.         Ledlow =0;
  54.          Ledhig = 0;

  55.         PDATA=table2[getdata2];
  56.         Ledlow =1;
  57.          Ledhig = 0;
  58.         nNop(1000);
  59.         Ledlow =0;
  60.          Ledhig = 0;

  61.         }
  62.                   
  63. }        



  64. void main()
  65. {
  66.         uint tab;
  67.         uint tempt;
  68.         Ledlow = 0;
  69.          Ledhig = 0;
  70.         PDATA = 0x00;

  71.         InitSerial();

  72.         while(1)
  73.         {

  74.     tempt = (uint) recivefromslave();  //接收從機采集的信息
  75.         leddisp(tempt);                                          //顯示信息




  76.         if(tempt<0x60)                         //判斷信息
  77.         {
  78.          tab = 0;
  79.         }
  80.         else if(tempt>0xc0)
  81.         {
  82.          tab = 2;
  83.         }
  84.         else
  85.         {
  86.         tab = 1;
  87.         }

  88.         SBUF = (uchar)tab;                         //對采集信息進行控制
  89.         while(!TI);
  90.         TI = 0;


  91.         }
  92. }
復制代碼

叢機單片機源程序如下:
  1. #include <reg51.h>

  2. #define  uint   unsigned int
  3. #define  uchar  unsigned char

  4. #define  PinData   P0
  5. sbit  LED0         = P1^0;
  6. sbit  LED1  = P1^1;
  7. sbit  PinSTART         = P1^5;
  8. sbit  PinOE            = P1^6;
  9. sbit  PinEOC         = P1^7;
  10. sbit  CLK          = P3^4;



  11. //短延時函數:ShortDelay()
  12. void nNop(uchar i)
  13. {
  14.         for(;i>0;i--) ;
  15. }

  16. //長延時函數:LongDelay()
  17. void LongDelay(uint i)
  18. {
  19.         uint j;
  20.         for(;i>0;i--)
  21.                 { for(j=1000;j>0;j--);}
  22. }  

  23. //引腳初始化
  24. void InitIO()
  25. {
  26.         PinData  = 0xff;
  27.         PinSTART = 1;
  28.         PinEOC         = 1;
  29.         PinOE    = 1;
  30.         CLK         = 1;

  31.                 }

  32. //UART的初始化:模式1,8位,9600Bds
  33. void InitSerial()
  34. {        
  35.         TMOD = 0x20 ;       // Timer 1 in mode 2
  36.         TH1  = 0xF4;               // 9600 Bds at 11.059MHz
  37.         TL1  = 0xF4;                                              // 9600 Bds at 11.059MHz
  38.         TR1  = 1;                                                      // Timer 1 run
  39.         PCON = 0x00;                                                     // Timer 1 run
  40.         SCON = 0x50;                                                   // uart in mode 1 (8 bit), REN=1

  41. }


  42. //T0定時脈沖中斷初始化
  43. void init_uart()
  44. {
  45.         TMOD=0x01;
  46.         TH0= (65536-4000)/256;
  47.         TL0= (65536-4000)%256;
  48.         TR0=1;
  49. //        ET0=1;
  50.         EA=1;                                                                                                                                                                                                
  51. }

  52. //等待A/D轉換結束函數:WaitADCEnd()
  53. void  WaitADCEnd(void)
  54. {
  55.         while(!PinEOC) ;
  56. }

  57. //讀取A/D轉換后的數據函數:ReadData()
  58. uchar ReadData()
  59. {
  60.         uchar tempt;
  61.         ET0=1;
  62.         PinSTART = 0;
  63.         //nNop(1);
  64.         PinSTART = 1;
  65.         PinSTART = 0;
  66.         WaitADCEnd();
  67.         PinOE =1;
  68.         nNop(2);
  69.         tempt = PinData & 0xff;
  70.          
  71.         ET0=0;
  72.         return(tempt);


  73.         
  74.         //PinOE =0;
  75. }

  76. //子機送數據給主機
  77. void sendtomain(uchar temp)
  78. {
  79.         
  80.         
  81.         SBUF = temp;
  82.         while(!TI);
  83.         TI=0;
  84.          
  85.                
  86. }  

  87. void main()
  88. {
  89.     uchar temp, tab;
  90.         InitIO();
  91.         init_uart();
  92.         InitSerial();
  93.         while(1)
  94.         {
  95.         
  96.         temp = ReadData();        
  97.         sendtomain(temp);

  98.         while(!RI);
  99.         tab = SBUF;        
  100.         RI = 0;
  101.         if(tab == 0)
  102.         {
  103.         LED0 = 1;
  104.         LED1 = 0;
  105.         }
  106.         else if(tab == 1)
  107.         {
  108.         LED0 = 1;
  109. ……………………

  110. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼



所有資料51hei提供下載:

uart.zip (108.14 KB, 下載次數: 72)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:95682 發(fā)表于 2018-3-25 20:11 | 只看該作者
樓主 數碼管是共陰的還是共陽的謝謝
回復

使用道具 舉報

板凳
ID:95682 發(fā)表于 2018-3-25 20:14 | 只看該作者
應該是共陽的
回復

使用道具 舉報

地板
ID:1 發(fā)表于 2018-3-26 03:46 | 只看該作者
zds789 發(fā)表于 2018-3-25 20:11
樓主 數碼管是共陰的還是共陽的謝謝

根據字碼可以判斷
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美精品在线观看 | 国产国产精品久久久久 | 久久aⅴ乱码一区二区三区 91综合网 | 久久伦理中文字幕 | 日韩欧美国产一区二区三区 | 日韩精品一区二区三区在线播放 | 国产乱码久久久久久一区二区 | 午夜视频在线免费观看 | 午夜影院在线观看 | 久久高清亚洲 | 欧美精品福利 | 精品乱码一区二区三四区视频 | 日韩在线不卡 | 99国产视频 | 国产一在线 | 91精品一区二区三区久久久久久 | 亚洲精品一区在线 | 日韩在线免费电影 | 午夜在线 | 欧美一级免费看 | 国产ts人妖系列高潮 | 亚洲 自拍 另类 欧美 丝袜 | 成人影视网| 成在线人视频免费视频 | 国产精品久久久久婷婷二区次 | 成人午夜黄色 | 黄色毛片网站在线观看 | 99精品国产一区二区青青牛奶 | 日韩中文字幕一区二区三区 | 国产精品99久久久久久动医院 | 久久天天躁狠狠躁夜夜躁2014 | 国产精品成人一区二区三区夜夜夜 | 日韩国产一区二区三区 | 欧美在线观看一区 | 伊人久久综合 | 日韩在线视频一区二区三区 | 国产一区二区精品在线 | 九九亚洲| 欧美日韩国产一区二区三区 | 久久久久亚洲精品国产 | 一区二区三区四区在线 |