登录|立即注册|使用QQ帐号登录
论坛 > 51单片机
发帖|
看6667|回6|收藏
楼主 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, 2018-5-24 16:42 上传)

下载积分: 黑币 -5






沙发 ID:167292 只看他
2018-6-17 22:26
楼上言之有理。
ADC工作的精度与电路的架构、元器件本身性能、PCB布线、整机的布局、电源供应质量、基准的稳定、外界和内部的干扰与噪声、程序的编写、被测信号的引进干扰等息息相关,还有许多意想不到的事能够搞的哭笑不得。仿真通过之后,实体搭建验证一下最好。
【题外话】前几天面试一个应聘我们硬件的。问了几个常规问题之后,老先生怒曰:你们不是找硬件么,干嘛一个劲的问我会不会C语言~~会C语言那是软件了,你们不是招的硬件工程师么,闹啥...
板凳 ID:315785 只看他
2018-5-24 17:46
仿真是这个精度,做实物不一定做得出来
地板 ID:355038 只看他
2018-6-21 11:04
正好想学,支持楼主
5# ID:990306 只看他
2021-12-9 21:47
我想做一个数码管数字电压表
6# ID:992042 只看他
2021-12-14 09:00
楼主设计的真好,我学到了很多。
7# ID:992042 只看他
2021-12-18 21:01
楼主设计的太好了,学习到了很多。

51黑电子论坛

Powered by Discuz! X3.1

首页|标准版|触屏版|电脑版