找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3653|回复: 1
打印 上一主题 下一主题
收起左侧

简单的单片机数字电压表+测量滑动变阻器电阻转化成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)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:871746 发表于 2021-1-9 10:41 | 只看该作者
请问一下 代码中空等待,和最后时钟取反是什么意思
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表