標題: 簡單的單片機數(shù)字電壓表+測量滑動變阻器電阻轉化成0到5v顯示 [打印本頁]

作者: qwexzr    時間: 2020-6-1 09:40
標題: 簡單的單片機數(shù)字電壓表+測量滑動變阻器電阻轉化成0到5v顯示
功能:對RV1電壓進行實時檢測,并在LCD1602上顯示保留兩位小數(shù),RV1電壓采用ADC0809進行采集。
轉換原理:模擬量由0#通道輸入(ADDA,ADDB,ADDC均接地);

      時鐘脈沖CLOCK采用定時器0產生5kHz時鐘,由P3.3輸出;

      轉換啟動脈沖(START和ALE)采用軟件模擬,由P3.4輸出;

      轉換結束信號(EOC)由軟件查詢P3.5狀態(tài)獲得;

      轉換結果使能脈沖(OE)采用軟件模擬,由P3.6輸出。

protues仿真圖如下



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

  3. sbit RS=P3^0;
  4. sbit RW=P3^1;
  5. sbit E=P3^2;
  6. sbit CLOCK=P3^3;
  7. sbit START=P3^4;
  8. sbit EOC=P3^5;
  9. sbit OE=P3^6;

  10. unsigned char str[]={"0123456789"};

  11. void delay(unsigned int t){
  12.           unsigned int i=0,j=0;
  13.           for(i=0;i<t;i++)
  14.              for(j=0;j<125;j++);
  15. }

  16. void write_command(unsigned char dat){
  17.         RS=0;
  18.         RW=0;
  19.         E=0;
  20.         P2=dat;
  21.         delay(2);
  22.         E=1;
  23.         E=0;
  24. }
  25.         
  26. void write_data(unsigned char dat){
  27.         RS=1;
  28.         RW=0;
  29.         E=0;
  30.         P2=dat;
  31.         delay(2);
  32.         E=1;
  33.         E=0;
  34. }
  35.         


  36. void main () {
  37.         unsigned char temp =0;
  38.         float VOL=0.0;
  39. //LCD初始化
  40.         write_command(0x38);//顯示模式設置
  41.         delay(5);
  42.         write_command(0x08);
  43.         delay(5);
  44.         write_command(0x01);
  45.         delay(5);
  46.         write_command(0x06);
  47.         delay(5);
  48.         write_command(0x0C);
  49.         delay(5);

  50. //定時器初始化
  51.         TMOD=0x02;
  52.         TH0=0x9c;//自動重裝
  53.         TL0=0x9c;
  54.         
  55.         EA=1;
  56.         ET0=1;
  57.         TR0=1;
  58.         
  59.         while(1){
  60.                 OE=0;
  61.                 START=0;
  62.                 START=1;
  63.                 START=0;
  64.                 delay(1);
  65.                 while(!EOC);//空等待
  66.                 OE=1;
  67.                 temp=P1;
  68.                 OE=0;
  69.                
  70. //顯示
  71.                
  72.           write_command(0x80);
  73.                 delay(5);
  74.           write_data('V');
  75.                 delay(5);               
  76.                 write_data('o');
  77.                 delay(5);        
  78.                 write_data('l');
  79.                 delay(5);        
  80.                 write_data(':');
  81.                 delay(5);        
  82.                
  83.                 VOL=temp*5/255;
  84.         
  85.                 write_data(str[(int)VOL]);
  86.                 delay(5);
  87.           write_data('.');
  88.                 delay(5);               
  89.                 write_data(str[(int)(VOL*10)%10]);
  90.                 delay(5);        
  91.                 write_data(str[(int)(VOL*100)%10]);
  92.                 delay(5);
  93.           write_data('V');
  94.                 delay(5);                        
  95.                
  96.                
  97.         }
  98.         
  99. }

  100. void timer0() interrupt 1 {
  101.         CLOCK=~CLOCK;
  102.                
  103. }
  104.          
復制代碼

所有資料51hei提供下載:
5.rar (51.85 KB, 下載次數(shù): 67)


作者: afjc123    時間: 2021-1-9 10:41
請問一下 代碼中空等待,和最后時鐘取反是什么意思




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1