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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7985|回復: 0
收起左側

基于C語言的89C51與TLC2543AD轉換器的驅動程序的設計 實訓報告

[復制鏈接]
ID:124407 發表于 2016-6-1 09:54 | 顯示全部樓層 |閱讀模式
電子信息技術綜合實訓報告
競賽題名稱:基于C語言的89C51與TLC2543AD轉換器的驅動程序的設計
隊員名稱:
評閱人簽名:
  • 設計思路描述:

設計思路:

硬件部分基于80C51單片機和TLC2543組成多路數據采集系統,采用89C51作為控制部件,控制數據的采集、顯示、傳輸,它是整個系統的核心。由TLC2543作為此數據采集系統的A/D轉換芯片,進行模數轉換得到模擬信號測量值,它使用開關電容逐次逼近技術完成A/D轉換過程由于是串行輸入結構,能夠節省51系列單片機的I/O資源。硬件設計的主要任務是TLC2543和單片機的接口電路設計,輸入信號的調理電路設計。

軟件部分主要涉及A/D轉換程序的編寫,1602LCD驅動的編寫,從TLC2543所接收數據的處理等。

原理框圖:見圖1。

1.001.jpg

圖1 模數轉換系統框圖

  • 硬件電路圖:

由ProteusEDA工具軟件所繪制原理圖,見圖2。

1.002.jpg 圖2 模數轉換系統原理圖

  • 算法數學描述:

算法1:

for(i=0;i<6;i++)

{

  ad_result=AD_Conver(0);

  sum+=ad_result;

}

ad=sum*5.0/4096/6;

說明:對TLC2543的返回值ad_result進行求和,然后取平均數。

算法2:

num[0]=ad_result/10000+'0';

num[2]=ad_result%10000/1000+'0';

num[3]=ad_result%1000/100+'0';

num[4]=ad_result%100/10+'0';

num[5]=ad_result%10+'0';

說明:分別求出LCD顯示數值各位的數值。

  • 軟件流程圖:

1602LCD程序流程圖,見圖3。

1.003.jpg

圖3 1602LCD程序流程圖

主程序流程圖,見圖4。

1.004.jpg

圖4 主程序流程圖

  • 測試方法描述:(含模塊與系統測試方法)

由探針對模擬信號輸入端口進行電壓測量,數值為2.71192V,見圖5。

1.005.jpg

圖5

對模擬信號采樣并處理,得模擬信號輸入端口電壓測量值為2.7111V,見圖6。

1.006.jpg

圖6

  • 測試數據:

滑動滑動變阻器改變模擬輸入端口電壓,共測得數據5組數據,見表1。

探針測量值(V)

2.7119

2.4265

2.1410

1.8556

1.5703

LCD示值(V)

2.7111

2.4255

2.1398

1.8554

1.5698

表1

  • 數據分析與結論:

測試數據分析:

1.007.jpg =0.0008

1.008.jpg =0.0001

1.009.jpg =0.0012  (舍去)

1.010.jpg =0.0002

1.011.jpg =0.0005

誤差平均值:+++ 1.012.jpg 0.0008

結論:由以上計算結果可知,該系統誤差較小,能滿足日常所需的測量精度要求,同時反映出TLC2543模數轉換芯片具有誤差小,分辨率較高,因此在儀器儀表中有較為廣泛的應用。

附件一:程序源代碼

  1. #include<reg51.h>   
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit RS=P3^5;   
  6. sbit RW=P3^6;   
  7. sbit E=P3^4;   
  8. sbit BF=P0^7;             //1602忙碌標志位
  9. void delay1ms()
  10. {uchar i,j;
  11.   for(i=0;i<10;i++)
  12.    for(j=0;j<33;j++)
  13. ; }
  14. void delay(uchar n)                //延時n毫秒
  15. {uchar i;
  16. for(i=0;i<n;i++)
  17. delay1ms();}
  18. unsigned char BusyTest(void)   //result=1為忙碌;result=0為不忙碌
  19. {bit result;
  20. RS=0;     
  21. RW=1;                                 //高電平進行讀操作
  22. E=1;                       //E=1,才允許讀寫
  23. _nop_();  
  24. _nop_();
  25. _nop_();
  26. _nop_();   
  27. result=BF;
  28. E=0;
  29. return result;}
  30. void WriteInstruction (uchar dictate)              //寫指令
  31. { while(BusyTest()==1);
  32.   RS=0;                      //RS和R/W同時為低電平時,可以寫入指令
  33.   RW=0;  
  34.   E=0;                  
  35.   _nop_();
  36.   _nop_();            
  37.   P0=dictate;           
  38.   _nop_();
  39.   _nop_();
  40.   _nop_();
  41.   _nop_();              
  42.   E=1;                  
  43.   _nop_();
  44.   _nop_();
  45.   _nop_();
  46.   _nop_();              
  47.   E=0;}
  48. void WriteAddress(uchar x)                   //寫地址
  49. {WriteInstruction(x|0x80);   //顯示位置的確定方法規定為"80H+地址碼x"
  50. }
  51. void WriteData(uchar y)
  52. { while(BusyTest()==1);
  53.   RS=1;                    //RS為高電平,RW為低電平時,寫入數據
  54.    RW=0;
  55.    E=0;           
  56.    P0=y;         
  57.    _nop_();
  58.    _nop_();
  59.    _nop_();
  60.    _nop_();      
  61.    E=1;         
  62.    _nop_();
  63.    _nop_();
  64.    _nop_();
  65.    _nop_();      
  66.    E=0;}
  67. void LcdInitiate(void)                //初始化
  68. {delay(15);            
  69. WriteInstruction(0x38); //顯示模式設置:16×2顯示,5×7點陣,8位數據接口
  70. delay(5);  
  71. WriteInstruction(0x38);
  72. delay(5);
  73. WriteInstruction(0x38);
  74. delay(5);
  75. WriteInstruction(0x0f);  //顯示模式設置:顯示開,有光標,光標閃爍
  76. delay(5);
  77. WriteInstruction(0x06);  //顯示模式設置:光標右移,字符不移
  78. delay(5);
  79. WriteInstruction(0x01);  //清屏幕指令,將以前的顯示內容清除
  80. delay(5);}
  81. sbit CLOCK=P1^3;            
  82. sbit DATA_IN=P1^1;
  83. sbit DATA_OUT=P1^0;
  84. sbit CS=P1^2;
  85. void delay1()
  86. {int i=5;
  87. while(i--);}
  88. uint AD_Conver(uchar channel)                            //選擇輸入通道
  89. {uchar i;
  90. int ad_value=0;
  91. CLOCK=0;
  92. CS=1;
  93. delay1();
  94. CS=0;
  95. channel<<=4;                                                                                    //左移4位
  96. for(i=0;i<12;i++)        
  97. { if(DATA_OUT)ad_value|=1;   
  98.   DATA_IN=(bit)(channel&0x80);                           
  99.   CLOCK=1;                     
  100.   delay1();                     
  101.   CLOCK=0;                    
  102.   channel<<=1;
  103.   ad_value<<=1;}
  104. CLOCK=1;
  105. ad_value>>=1;
  106. return ad_value;                                                                      //返回轉換數據
  107. }
  108. void main()
  109. { int ad_result;
  110. uint i;
  111. float ad;
  112. uint num[]={'0','.','0','0','0','0','V',' ',' ',' ',' ',' '};
  113. uint csu[]={' ',' ',' ',' ',' ','C',' ','S',' ','U',' ',' ',' ',' ',' '};
  114. ad_result=AD_Conver(0);
  115. delay(100);
  116. while(1)
  117. {uint sum;
  118.   sum=0;
  119.   for(i=0;i<6;i++)
  120.   {
  121.    ad_result=AD_Conver(0);
  122.    sum+=ad_result;}
  123.   ad=sum*5.0/4096/6;                                                        //4096為2的12次方,6為求平均數
  124.   ad_result=(int)(ad*10000);                               //轉換為整形變量
  125.   num[0]=ad_result/10000+'0';
  126.   num[2]=ad_result%10000/1000+'0';
  127.   num[3]=ad_result%1000/100+'0';
  128.   num[4]=ad_result%100/10+'0';
  129.   num[5]=ad_result%10+'0';
  130.   LcdInitiate();         
  131.   WriteAddress(0x80);                                                        //第一行第一列顯示
  132.   for(i=0;i<15;i++)
  133.   {WriteData(num[i]);
  134.    delay(850);}
  135.   WriteAddress(0xc0);                                                        //第二行第一列顯示
  136.   for(i=0;i<15;i++)
  137.   {WriteData(csu[i]);
  138.    delay(850);}
  139.   delay(10000);}
  140. }
復制代碼


附件二:TLC2543時序圖

1.013.jpg



完整版本的論文請下載附件:

基于C語言的89C51與TLC2543AD轉換器的驅動程序設計.docx

79.75 KB, 下載次數: 44, 下載積分: 黑幣 -5

評分

參與人數 1黑幣 +100 收起 理由
admin + 100

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 三极网站 | 久久av一区二区三区 | 精品一区二区三区不卡 | a在线免费观看 | 日韩a在线 | 国产精品久久久久久久久久 | 黄视频网站在线 | 欧美久久影院 | 日韩有码一区 | 亚洲二区在线 | 日韩精品一区二区三区在线观看 | 精品一区二区三区在线观看国产 | 久久毛片| 成人欧美一区二区三区色青冈 | 欧美www在线 | 欧美一级久久 | 日日操av | 成人免费一区二区 | 欧美在线视频网 | 国内毛片毛片毛片毛片 | 激情黄色在线观看 | 久久噜噜噜精品国产亚洲综合 | 精品国产乱码久久久久久图片 | 日本欧美在线观看视频 | 国产精品久久久久久久久久久免费看 | 成人免费观看男女羞羞视频 | 热久久999| 欧美精品一区二区三区在线播放 | 亚洲视频中文字幕 | 久久综合九色综合欧美狠狠 | 色综合久久久久 | 免费毛片网 | 色约约视频 | 毛片网在线观看 | 日批免费看| 国产玖玖 | 欧美日韩中文在线 | 日韩精品1区2区3区 成人黄页在线观看 | 日韩一区二区免费视频 | 羞羞色网站 | 久久国产精品网站 |