找回密码
 立即注册

QQ登录

只需一步,快速开始

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

TLC2543+51单片机数字电压表Proteus仿真程序

[复制链接]
跳转到指定楼层
楼主
本文介绍了基于STC89C51单片机为核心的,以AD0809数模转换芯片作为采样,以四位八段数码管作为显示的具有测量功能的具有一定精度的数字电压表。在实现基础功能的情况下,另外还可以扩展串行口通信,时钟,等其他一系列功能,使系统达到了良好的设计效果和要求。本课题主要解决A/D转换,数据处理及显示控制等三个模块。
主要系统:STC89C51;数字电压表;模数转换;数字信号
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #define TLC2543_GLOBAL
  2. #include "TLC2543.h"

  3. uint read_TLC2543(uchar channel)
  4. {
  5.     register uchar i;
  6.     uint tempAD = 0;

  7.     while(!TLC2543GetEoc());        //wait TLC2543 free
  8.         _delay_us(3);
  9.     channel <<= 4;

  10.     TLC2543Clk(TLC2543_CLR);
  11.     TLC2543_Cs(TLC2543_SET);
  12.     TLC2543_Cs(TLC2543_CLR);                //_CS TLC2543 select

  13.         _delay_us(3);
  14.     for( i = 0; i < 12; i ++ )
  15.     {
  16.         tempAD <<= 1;
  17.         if( TLC2543GetDo() )        //read value
  18.         {
  19.             tempAD |= 0x01;
  20.         }
  21.         if( channel&0x80 )
  22.         {
  23.             TLC2543Di(TLC2543_SET);
  24.         }
  25.         else
  26.         {
  27.             TLC2543Di(TLC2543_CLR);
  28.         }
  29.         channel <<= 1;
  30.         TLC2543Clk(TLC2543_SET);
  31.         nop();
  32.         TLC2543Clk(TLC2543_CLR);
  33.     }

  34.     TLC2543_Cs(TLC2543_SET);                //TLC2543 close
  35.         _delay_us(1);

  36.     return tempAD;
  37. }
  38. void _delay_us(uint us)
  39. {
  40.    uchar delayi;
  41.    while(--us)
  42.    {
  43.          for(delayi=0;delayi<10;delayi++);
  44.    }
  45. }                                                                                                                          
复制代码
  1. #include "led.h"
  2. #include "TLC2543.h"
  3. const uchar code displayMode=0x0f;
  4. uchar displayBuff[4]={0x7e,0x7e,0x7e,0x7e};   //数码管显示缓冲区,低两位为时间,最高位为抢答号
  5. const uchar code digitalNumber[10]={0x7e,0x06,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x73};
  6. void main()
  7. {         
  8.   uint voltageReadTemp;
  9.   uint voltageRead;
  10.   uchar temp;
  11.   uchar i,j;
  12.   init_led();
  13.   while(1)
  14.   {
  15.     ledSweepDisplay(displayBuff,displayMode,4);
  16.     voltageRead=read_TLC2543(0x05);
  17.         voltageRead=voltageRead*0x05;
  18.         for(i=4;i>0;i--)
  19.         {
  20.           temp=(uchar)(voltageRead/0x0fff);
  21.           if(i==4)
  22.             displayBuff[i-1]=digitalNumber[temp]|0x80;
  23.           else
  24.             displayBuff[i-1]=digitalNumber[temp];
  25.           voltageRead=voltageRead%0x0fff;
  26.           voltageReadTemp=voltageRead<<1;
  27.           voltageRead=0x0000;
  28.           for(j=0;j<5;j++)
  29.             voltageRead+=voltageReadTemp;//voltageRead=voltageRead*10
  30.           
  31.         }

  32.   }

  33. }
复制代码


所有资料51hei提供下载:
数字电压表.zip (25.75 KB, 下载次数: 65)


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

使用道具 举报

沙发
ID:750218 发表于 2020-5-12 19:34 | 只看该作者
垃圾,什么玩意了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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