找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机简易数字电压表仿真 课堂作业 已完成分享给大家

[复制链接]
跳转到指定楼层
楼主
ID:171810 发表于 2017-5-17 17:15 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
应该还可以吧,课堂作业。

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载):


单片机源程序如下:
  1.     #include <reg52.h>
  2. #include <intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char


  5. sbit dat=P1^2;
  6. sbit sclk=P1^1;
  7. sbit cs=P1^0;


  8. uchar ad_flag;
  9. uint ad_value[4]={0};

  10.   unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x3e};
  11.     unsigned char code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed};
  12.   unsigned char code wei[]={0x01,0x02,0x04,0x08};
  13. void display()   
  14. {   uchar  num;
  15.          uchar t=180;
  16.    for(num=0;num<4;num++)
  17.           { P0=~wei[num];
  18.            if(num==0)
  19.                P2=~table1[ad_value[num]];
  20.            else
  21.               P2=~table[ad_value[num]];
  22.                 while(t--);  
  23.            }
  24.          
  25. }

  26. /*********AD转换函数*************/
  27. uint adc0831()   //根据时序图写出的模拟数据输出
  28. {
  29.         uchar i;
  30.         uint temp;
  31.         dat=1;          
  32.         sclk=0;
  33.         cs=1;                         //启动AD
  34.         _nop_();
  35.         _nop_();

  36.         cs=0;
  37.         _nop_();
  38.         _nop_();
  39.         sclk=0;                         //        第一个周期
  40.         _nop_();
  41.         _nop_();
  42.         sclk=1;                          //
  43.         _nop_();
  44.         _nop_();
  45.    sclk=0;                          // 第二个周期
  46.         _nop_();
  47.         _nop_();
  48.      sclk=1;                          //
  49.         _nop_();
  50.         _nop_();
  51.         sclk=0;                          // 第三个周期
  52.                 _nop_();
  53.                   _nop_();
  54.         for(i=0;i<8;i++)
  55.                 {       
  56.                 //高电平内接收数据
  57.                
  58.                         temp<<=1;        //ADC0831先传输数据高位,再传输数据低位
  59.                         if(dat)
  60.                                 {
  61.                                 temp++;
  62.                                 }
  63.                         sclk=1;
  64.                         _nop_();
  65.                         _nop_();
  66.                         sclk=0;
  67.                         _nop_();
  68.                         _nop_();
  69.                 }
  70.                 cs=1;
  71.                 _nop_();
  72.                 _nop_();
  73.                 return(temp);
  74.         }
  75. /*************主函数********************/

  76. void main()
  77. {                uint ad,i=0;
  78.                 ad_value[3]=10;
  79.         while(1)
  80.         { i++;      
  81.          if(i==255)
  82.                  {
  83.                       i=0;
  84.                     ad=adc0831();           //ADzhuanhuan
  85. ……………………

  86. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
简易数字电压表.rar (21.25 KB, 下载次数: 61)


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

使用道具 举报

沙发
ID:264974 发表于 2017-12-21 19:46 | 只看该作者
数字电压表的pdf版

双通道数字电压表课程设计.pdf

912.54 KB, 下载次数: 7, 下载积分: 黑币 -5

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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