标题: 简单的单片机数字电压表+测量滑动变阻器电阻转化成0到5v显示 [打印本页]

作者: qwexzr    时间: 2020-6-1 09:40
标题: 简单的单片机数字电压表+测量滑动变阻器电阻转化成0到5v显示
功能:对RV1电压进行实时检测,并在LCD1602上显示保留两位小数,RV1电压采用ADC0809进行采集。
转换原理:模拟量由0#通道输入(ADDA,ADDB,ADDC均接地);

      时钟脉冲CLOCK采用定时器0产生5kHz时钟,由P3.3输出;

      转换启动脉冲(START和ALE)采用软件模拟,由P3.4输出;

      转换结束信号(EOC)由软件查询P3.5状态获得;

      转换结果使能脉冲(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, 下载次数: 67)


作者: afjc123    时间: 2021-1-9 10:41
请问一下 代码中空等待,和最后时钟取反是什么意思




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1