找回密码
 立即注册

QQ登录

只需一步,快速开始

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

0-50v电压表设计 精度0.01,过压警报~程序、原理图、仿真

  [复制链接]
跳转到指定楼层
楼主
三个挡,0-2,0-25,0-50,精度0.01,过压警报~程序、原理图、仿真。

全部资料打包下载:
毕业设计.zip (128.6 KB, 下载次数: 132)

0-50v电压表设计的论文预览如下:
word格式的 可以编辑



程序如下:
  1. /*-------------------------------
  2. 作者:小刘
  3. --------------------------------*/
  4. #include <AT89X52.H>  
  5. unsigned char code dispbitcode[]={0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f};  //放数码管位选的值
  6. unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,0x00};//放数码管显示的数字
  7. unsigned char dispbuf[8]={10,10,10,10,10,0,0,0};  //存放ad采集过来的值(只有最后3位有用)
  8. unsigned char dispcount;
  9. unsigned char getdata;
  10. unsigned int temp;
  11. long int  i;
  12. unsigned int R1;

  13. sbit ST=P3^0; //是否选中该芯片
  14. sbit OE=P3^1; //所存转换的值
  15. sbit EOC=P3^2; //当EAC数据有效时,将转换数据送出
  16. sbit CLK=P3^3; //给adc0808提供时钟

  17. sbit D1=P2^0; //挡1
  18. sbit D2=P2^1; //挡2
  19. sbit D3=P2^2; //挡3

  20. sbit L=P3^7; //监控灯

  21. void main(void)
  22. { D1=1;
  23.   D2=1;
  24.   D3=1;

  25.   ST=0;
  26.   OE=0;
  27.   ET0=1; //启用定时器0
  28.   ET1=1;   // 启用定时器1
  29.   EA=1;    //开总中断
  30.   TMOD=0x12;//设置定时器0和1的工作方式
  31.   TH0=216;
  32.   TL0=216; //设置定时器0的初值为216(为adc0808提供时钟)
  33.   TH1=(65536-5000)/256;
  34.   TL1=(65536-5000)%256;//设置定时器1的初值为5ms
  35.   TR1=1;  //开定时器1
  36.   TR0=1;  //开定时器0
  37.   ST=1;
  38.   ST=0;
  39.   while(D1==0)    //挡1
  40.     { L=1;
  41.       if(EOC==1) //判断装换是否结束
  42.         {
  43.           OE=1;  
  44.           getdata=P1;  //如果结束,给OE一个跳变,读出数据存入getdata
  45.           OE=0;
  46.                     i=getdata*196;
  47.                         if(i>=20000)
  48.                         L=0;         //256/getdata=5V/xV  >>>x=(getdata*5/256)V
  49.                         dispbuf[5]=i/10000; //将数据存入数组中以待显示。 (个位)
  50.                         i=i%10000;
  51.                         dispbuf[6]=i/1000;        //小数点第一位
  52.                         i=i%1000;
  53.                         dispbuf[7]=i/100;   //小数点第二位  

  54.           ST=1;
  55.           ST=0;
  56.         }
  57.     }
  58.   while(D2==0)    //挡2
  59.     { L=1;
  60.       if(EOC==1) //判断装换是否结束
  61.         {
  62.           OE=1;  
  63.           getdata=P1;  //如果结束,给OE一个跳变,读出数据存入getdata
  64.           OE=0;
  65.                     i=getdata*98;
  66.                         if(i>=20000)
  67.                         L=0;         //256/getdata=5V/xV  >>>x=(getdata*5/256)V
  68.                         dispbuf[4]=i/10000; //将数据存入数组中以待显示。 (个位)
  69.                         i=i%10000;
  70.                         dispbuf[5]=i/1000; //将数据存入数组中以待显示。 (个位)
  71.                         i=i%1000;
  72.                         dispbuf[6]=i/100;        //小数点第一位
  73.                         i=i%100;
  74.                         dispbuf[7]=i/10;   //小数点第二位  
  75.                              
  76.           ST=1;
  77.           ST=0;
  78.         }
  79.     }
  80.           while(D3==0)    //挡3
  81.     { L=1;
  82.       if(EOC==1) //判断装换是否结束
  83.         {
  84.           OE=1;  
  85.           getdata=P1;  //如果结束,给OE一个跳变,读出数据存入getdata
  86.           OE=0;
  87.                     i=getdata*196;
  88.                         if(i>=49900)
  89.                         L=0;         //256/getdata=5V/xV  >>>x=(getdata*5/256)V
  90.                         dispbuf[4]=i/10000; //将数据存入数组中以待显示。 (个位)
  91.                         i=i%10000;
  92.                         dispbuf[5]=i/1000;        //小数点第一位
  93.                         i=i%1000;
  94.                         dispbuf[6]=i/100;   //小数点第二位   
  95.                         i=i%100;
  96.                         dispbuf[7]=i/10;   //小数点第二位                            
  97.           ST=1;
  98.           ST=0;
  99.         }
  100.     }
  101. }
  102.   
  103. void t0(void) interrupt 1 using 0           //定时器0  中断服务
  104. {
  105.   CLK=~CLK;  //给adc0808提供时钟
  106. }
  107.   
  108. void t1(void) interrupt 3 using 0          //定时器1  中断服务
  109. {
  110.   TH1=(65536-5050)/256;
  111.   TL1=(65536-5050)%256;
  112.   P2=0xff;
  113.   P0=dispcode[dispbuf[dispcount]];          //段选
  114.   P2=dispbitcode[dispcount];                 //位选
  115.   if(dispcount==5)         // 显示小数点
  116.     {
  117.       P0=P0 | 0x80;
  118.     }
  119.   dispcount++;          //让位选循环起来
  120.   if(dispcount==8)
  121.     {
  122.       dispcount=0;
  123.     }  
  124. }

复制代码

评分

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

查看全部评分

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

使用道具 举报

沙发
ID:162997 发表于 2017-1-29 03:39 | 只看该作者
自己沙发自己坐~
回复

使用道具 举报

板凳
ID:154111 发表于 2017-2-3 23:21 | 只看该作者
资料不错,谢谢分享!!!!!!!
回复

使用道具 举报

地板
ID:130231 发表于 2017-3-20 12:59 | 只看该作者
好资料!感谢你的分享
回复

使用道具 举报

5#
ID:99130 发表于 2017-5-5 00:17 来自触屏版 | 只看该作者
请问数码管是共阴还是共阳?
回复

使用道具 举报

6#
ID:99130 发表于 2017-5-5 14:09 | 只看该作者
如何用ADC0832替换ADC0808
回复

使用道具 举报

7#
ID:438003 发表于 2018-12-6 22:36 来自触屏版 | 只看该作者
感谢分享,学习
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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