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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

ADC0804A/D轉換器設計數字電壓表設計報告與源碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:336076 發表于 2018-5-24 17:46 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
用51單片機和ADC0804A/D轉換器制作數字電壓表

                 專業:通信工程
                 年級:2009級
                  學生:郭呂超
           目錄
  • 實驗器件介紹………………………………………………………3
  • 數字電壓表仿真圖…………………………………………………6
  • 實驗設計原理………………………………………………………7
  • 數字電壓表C語言程序…………………………………………..8
  



    • 實驗器件介紹
  • ADC0804芯片介紹
ADC0804是一個8位CMOS型逐次比較式A/D轉換器,具有三態鎖存輸出功能,最短轉換時間為100us,其芯片實物圖和引腳圖如下:
CS:片選信號,低電平有效;
RD:外部讀取轉換結果的控制信號,當RD為高電平時,DB0-DB7為高阻態;當RD為低電平時,數據才會通過DB0-DB7輸出;
WR:A/D轉換器啟動控制信號,當WR由高電平變為低電平時,轉換器被清零,當WR由低電平變為高電平時,A/D轉換正式開始;
CLK IN和CLK R:時鐘輸入端,在ADC0804片內有時鐘發生器,采用內部時鐘時,在CLK IN
CLK R 和地線之間連接RC電路即可,ADC0804的工作頻率約為100-1460khz,若使RC
電路作為時鐘,其振蕩頻率為1/(1.1RC);
INTR:中斷請求輸出信號,當A/D轉換結束時,INTR引腳輸出低電平,只有當數據被取走后(單片機發出讀數據指令),此引腳才會變為高電平;
VIN+和VIN-:差動模擬電壓輸入端,若輸入為單端正電壓,VIN-應接地,若差動輸入,則輸入信號直接加入VIN+和VIN-;
AGND.DGND:模擬信號地與數字信號地,若系統對抗干擾要求嚴格,則這兩條地線必須分接
地;
VREF/2:參考電壓值的一半,若在ADC0804組成的電路中需要的參考電壓為5V,則此引腳可以懸空。若電路中需要使用的參考電壓小于5V,即參考電壓值的一半小于2.5V,這時可將此引腳連接到需要的參考電壓值(如4V)的1/2電壓值上(如 2V),在ADC0804芯片內部會自動判斷參考電壓的選擇,當VREF/2引腳的電壓值低于2.5V時,芯片會自動選擇由VREF/2引腳電壓放大2倍以后的電壓值作為參考電壓。
DB0-DB7:8位數字輸出端。
  • LCD1602液晶介紹
1602字符型LCD有16個引腳,其芯片實物圖和引腳圖如下:
1602字符型LCD具有較豐富的指令集,如下表:
下面介紹LCD1602引腳功能:
     VSS:電源地;
     VDD:+5V邏輯電源;
     VEE:液晶驅動電源;
     RS:寄存器選擇(RS=1,數據;RS=0,命令)
     R/W:讀.寫操作選擇(R/W=1,讀;R/W=0,寫);
     E:使能信號;
     DB0-DB7:數據總線;
Black1:背光電源線;
     Black2:背光電源地線;



    • 數字電壓表仿真圖



    • 實驗設計原理
  • 實驗硬件設備:LCD1602液晶顯示器一塊,ADC0804芯片一片,兩個滑動變阻器,一個150pF電容,兩個200歐姆的電阻,一個10K歐姆的電阻,STC89C51芯片,電源,地線,按鍵(復位電路和晶振電路另加),杜邦線諾干。
  • ADC0804在使用時,外圍電壓的連接比較簡單,只需要對參考電壓和時鐘輸入端進行設計即可。通常情況下,時鐘的輸入可以選用RC諧振電路,ADC0804可以進行A/D轉換的時鐘頻率為100—1460KHZ,典型值為640KHZ,這里選用R=10K歐姆.C=150PF的諧振電路,利用公式1/(1.1RC)計算后,此時的時鐘頻率約為606KHZ,與典型值十分接近
  • 模擬電壓的計算:這里選用的是8位A/D轉換器,數值的變化范圍是0—255(00H-FFH),模擬電壓的輸入范圍是0-5V,每個數碼的變化,對應的電壓值的變化為0.0196V,所以要計算模擬電壓值,就可以利用下面的公式進行計算:                            V=D*0.0196
式中,V為計算出的模擬電壓值,D為A/D轉換器轉換后的數字量。
  • 克服浮點運算方法:從上式不難看出,在計算過程,需要乘以一個0.0196,這是一個小數,在計算機中稱為浮點數。而對于8位單片機來說,不具有浮點運算能力,如果一定要計算浮點數,將占用單片機中大量的內存單元和CPU時間。這里采用一種簡單的方法:就是將從A/D讀取進來的數字量直接乘以196,即進行整數運算,運算結果是真正值的1000倍,這個整數運算的速度是非常快的,不會占用過多的CPU時間。由于是兩個8位的二進制數相乘,得到的結果不會超過16位二進制數。
  • 電壓值的顯示:最常用到的二進制轉換成BCD碼的方法是用除法。先用得到的16位二進制數除以10000,得到的商就是模擬電壓值的整數部分(模擬電壓的輸入為0-5V,所以整數部分只有1位),得到的余數是模擬電壓值的小數部分;接下來用余數除以1000,商是十分位,余數作為被除數再除以100,商為百分位,余數再除以10,商為千分位。這樣就將16位的二進制數轉換成了4位BCD碼。






    • 數字電壓表C語言程序
//珞珈09級通信單片機實驗 《AD轉換器設計數字電壓表》
  1. #include<reg51.h>                                                            
  2. #define uchar unsigned char        
  3. #define uint unsigned int        
  4. sbit lcd_rs=P2^0;                                             
  5. sbit lcd_en=P2^1;                          
  6. sbit cs=P2^7; //AD片選                                
  7. sbit rd=P2^6;                              
  8. sbit wr=P2^5;
  9. sbit INTR=P3^2;//中斷請求信號                                 
  10. uint  temp,D1,D2,D3,D4;      
  11. uint shu;
  12. uint AD_read();
  13. void delay(uint z);
  14. void write_com(uchar com);
  15. void write_date(uchar date);
  16. void lcd_init();
  17. void display(uchar qian,uchar bai,uchar shi,uchar ge);
  18. void AD_init();
  19. void AD_start();

  20. void main()
  21. {                           
  22.         write_com(0x01);//清屏
  23.         lcd_init();        
  24.                             AD_init              ();
  25.         while(1)
  26.         {

  27.                 AD_start();
  28.                                                         while(INTR==1);//AD轉換是否結束,結束為低電平
  29.                                                           INTR=0;
  30.                                                         shu=AD_read();
  31.                 shu=shu*196;
  32.                D1=shu/10000;//整數部分,0.0196v是最小變化量
  33.                shu=shu%10000;
  34.                D2=shu/1000;//十分位數
  35.                shu=shu%1000;
  36.                D3=shu/100;//百分位數
  37.                shu=shu%100;
  38.                  D4=shu/10;//千分位數
  39.                 display(D1,D2,D3,D4);//顯示LcD1602

  40.            }               
  41. }



  42. void delay(uint z)
  43. {
  44.         uint x,y;
  45.         for(x=z;x>0;x--)
  46.                 for(y=110;y>0;y--);
  47. }



  48. void write_com(uchar com)
  49. {
  50.         P0=com;
  51.         lcd_rs=0;
  52.         lcd_en=1;
  53.         lcd_en=0;
  54.          delay(2);
  55. }



  56. void write_shu(uchar shu)
  57. {
  58.         P0=shu;
  59.         lcd_rs=1;
  60.         lcd_en=1;
  61.         lcd_en=0;
  62.         delay(5);
  63. }



  64. void lcd_init()
  65. {


  66.         lcd_en=0;
  67.     write_com(0x01);//清屏
  68.   write_com(0x06);//指針加減與移動
  69.   write_com(0x0c);//光標
  70.   write_com(0x38);//液晶初始化命令

  71. }


  72. void display(uchar qian,uchar bai,uchar shi,uchar ge)
  73. {   
  74.               write_com(0x80+0x02);
  75.              write_shu('G');
  76.                write_com(0x80+0x03);
  77.              write_shu('u');
  78.                 write_com(0x80+0x04);
  79.              write_shu('o');
  80.                 write_com(0x80+0x06);
  81.              write_shu('L');
  82.                write_com(0x80+0x07);
  83.              write_shu('v');
  84.                 write_com(0x80+0x09);
  85.              write_shu('C');
  86.                  write_com(0x80+0x0a);
  87.              write_shu('h');
  88.                write_com(0x80+0x0b);
  89.              write_shu('a');
  90.                 write_com(0x80+0x0c);
  91.              write_shu('o');

  92.                write_com(0x80+0x44);
  93.              write_shu(0x30+qian);//0x30代表數字0

  94.                write_com(0x80+0x45);
  95.              write_shu('.');

  96.                 write_com(0x80+0x46);
  97.              write_shu(0x30+bai);
  98.                                                          
  99.                                                           write_com(0x80+0x47);
  100.              write_shu(0x30+shi);

  101.                                              write_com(0x80+0x48);
  102.              write_shu(0x30+ge);

  103.                                           write_com(0x80+0x49);
  104.              write_shu('V');
  105. }                       


  106.   void AD_init()//AD初始化函數
  107. {
  108.     cs=1;
  109.               wr=1;
  110.               rd=1;
  111.   }
  112.   void AD_start()//AD啟動
  113. {              P1=0xff;
  114.     cs=0;//開
  115.               wr=0;
  116.               wr=1;//寫完后關閉
  117.               cs=1;
  118. }
  119. uint AD_read()
  120. {
  121.     cs=0;
  122.               rd=0;
  123.               delay(1);
  124.               temp=P1;
  125.               rd=1;
  126.               cs=1;

  127.               return(temp);
  128. }
復制代碼

人間處處單片機

完整的Word格式文檔51黑下載地址:
用ADC0804制作的數字電壓表.doc (1.3 MB, 下載次數: 35)


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 天天综合久久 | 红桃视频一区二区三区免费 | 久久精品久久综合 | 国产日韩欧美激情 | 日韩一级免费电影 | 成人久草 | a在线观看免费 | 亚洲欧美日韩精品久久亚洲区 | 欧美一区二区三区四区视频 | 久久久久久网站 | 欧美视频成人 | 国产乱码久久久 | 欧美性受 | 国产99久久精品一区二区永久免费 | 精品一二区 | 欧美日本一区二区 | 国产乱人伦精品一区二区 | 91免费看片神器 | 九九热免费视频在线观看 | 黄a在线观看 | 成人综合视频在线观看 | 亚洲精品乱码久久久久久久久久 | 色婷婷综合网 | 午夜影院污 | 亚洲精品二三区 | 国产精品视频免费看 | 精品视频久久久久久 | 亚洲精品一区二区三区中文字幕 | 一区二区三区不卡视频 | 男女羞羞视频免费 | 综合二区| 日韩精品成人在线 | 黄色香蕉视频在线观看 | 伊人狠狠操 | 黄色一级视频免费 | av片在线观看网站 | 国产精品电影在线观看 | 久久精品欧美一区二区三区不卡 | 国产在线观看一区二区 | 97精品国产97久久久久久免费 | 午夜视频在线 |