找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5810|回复: 6
收起左侧

做了个数字电压表的实验,测量范围为0~5V。测量精度达到了0.01V,结果显示在数码管

[复制链接]
ID:291973 发表于 2018-5-24 16:46 | 显示全部楼层 |阅读模式
数字电压表,文件里包含了C语言程序,proteus仿真。测量范围为 0~5V,测量精度达到0.01V
0.jpg 0.png

单片机源程序如下:
  1. //头文件区
  2. #include<AT89X51.h>
  3. #include<stdio.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. #define SEG P1//声明数码管接P1口
  7. //定义变量区
  8. uchar TAB[]={ 0x3f,0x06,0x5b,0x4f,0x66,//共阴字形码
  9.      0x6d,0x7d,0x07,0x7f,0x6f};
  10. uchar disp[4];//显示器数组
  11. uint temp,result;
  12. //函数声明区
  13. void display();//声明显示函数
  14. void delay1ms(uchar);//声明延时函数
  15. void init(void);//初始化函数
  16. sbit CLK=P3^4;//时钟接口
  17. sbit EOC=P3^2;//转换结束信号
  18. sbit ST=P3^6; //开始转换
  19. sbit OE=P3^7; //输出允许端
  20. //=====主函数=================
  21. main()
  22. { init();
  23. ST=0;
  24. while(1)
  25. { ST=1;//启动
  26.    ST=0;
  27.      while(EOC==0);//查询等待转换结果
  28.    OE=1;//打开输出允许信号
  29.    temp=P0;//读数据
  30.      result=temp*1.0/255*500;//把0~255数字量量程改为0~500
  31.      disp[0]=result/1000;//最高位永远为0,除法取商
  32.      disp[1]=result/100%10;//;除以100取商,再除以10取余数
  33.      disp[2]=result/10%10;//
  34.      disp[3]=result%10;//
  35.      display();
  36. }
  37. }
  38. //======显示函数=============
  39. void display()
  40. {   uchar i,scan;
  41.     scan=1;
  42.     for(i=0;i<4;i++)
  43.     { P2=~scan;
  44.    SEG=TAB[disp[i]];
  45.    if(i==1)
  46.    SEG=SEG|0x80;

  47.        delay1ms(4);
  48.        scan<<=1;
  49.     }
  50. }
  51. //=====延时1MS函数=========
  52. void delay1ms(uchar x)
  53. {   uchar i,j;
  54.     for(i=0;i<x;i++)
  55.         for(j=0;j<120;j++);
  56. }
  57. //=====T0初始化函数============
  58. void init()
  59. {   EA=1;
  60.     ET0=1;
  61.     TMOD=0x01;
  62.     TH0=(65536-200)/256;
  63.     TL0=(65536-200)%256;
  64.     TR0=1;
  65. }
  66. //=======T0中断服务,提供时钟信号======
  67. void timer0() interrupt 1
  68. {   TH0=(65536-200)/256;
  69.     TL0=(65536-200)%256;
  70.     CLK=~CLK;//取反,产生方波
  71. }
复制代码
无标题.png

所有资料51hei提供下载:
数字电压表.rar (321.67 KB, 下载次数: 82)
回复

使用道具 举报

ID:167292 发表于 2018-6-17 22:26 | 显示全部楼层
楼上言之有理。
ADC工作的精度与电路的架构、元器件本身性能、PCB布线、整机的布局、电源供应质量、基准的稳定、外界和内部的干扰与噪声、程序的编写、被测信号的引进干扰等息息相关,还有许多意想不到的事能够搞的哭笑不得。仿真通过之后,实体搭建验证一下最好。
【题外话】前几天面试一个应聘我们硬件的。问了几个常规问题之后,老先生怒曰:你们不是找硬件么,干嘛一个劲的问我会不会C语言~~会C语言那是软件了,你们不是招的硬件工程师么,闹啥...

评分

参与人数 1黑币 +80 收起 理由
admin + 80 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:315785 发表于 2018-5-24 17:46 | 显示全部楼层
仿真是这个精度,做实物不一定做得出来
回复

使用道具 举报

ID:355038 发表于 2018-6-21 11:04 | 显示全部楼层
正好想学,支持楼主
回复

使用道具 举报

ID:990306 发表于 2021-12-9 21:47 | 显示全部楼层
我想做一个数码管数字电压表
回复

使用道具 举报

ID:992042 发表于 2021-12-14 09:00 | 显示全部楼层
楼主设计的真好,我学到了很多。
回复

使用道具 举报

ID:992042 发表于 2021-12-18 21:01 | 显示全部楼层
楼主设计的太好了,学习到了很多。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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