找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3177|回复: 1
收起左侧

单片机Proteus仿真TLC1543/tlc1549三档电流表测量源程序

[复制链接]
ID:528775 发表于 2021-11-17 21:03 | 显示全部楼层 |阅读模式
三档电流表测量,可以测量三种不同挡位电流,电流最小挡位时,需要进行放大电路放大。TLC1543/tlc1549进行AD采集
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
51hei.gif 4OX6RG}%}JI9VH0N9{@[LNY.png

单片机源程序如下:
  1. #include<reg52.h>
  2. #include"lcd.h"
  3. #include "TLC1543.h"
  4. #include "TLC1549.h"
  5. #include <string.h>


  6. sbit         key1 = P1^3;        //对应按键,低电平有效  
  7. sbit         key2 = P1^4;        //对应按键,低电平有效
  8. sbit         key3 = P1^5;        //对应按键,低电平有效

  9. //--定义全局变量--//
  10. unsigned int dianya;
  11. unsigned int ad;
  12. unsigned char a;


  13. unsigned char code kaiji1[14] = "Welcome to use";
  14. unsigned char code kaiji2[12] = "this product";
  15. unsigned char code kaiji3[13] = "Please select";
  16. unsigned char code dis1[16] = "LiangCheng0.002A";
  17. unsigned char code dis2[16] = "LiangCheng:0.02A";
  18. unsigned char code dis3[16] = "LiangCheng: 0.2A";

  19. /*******************************************************************************
  20. * 函 数 名         : Delay10ms
  21. * 函数功能                   : 延时函数,延时10ms
  22. * 输    入         : 无
  23. * 输    出         : 无
  24. *******************************************************************************/

  25. void Delay10ms(unsigned int c)   //误差 0us
  26. {
  27.     unsigned char a, b;

  28.         //--c已经在传递过来的时候已经赋值了,所以在for语句第一句就不用赋值了--//
  29.     for (;c>0;c--)
  30.         {
  31.                 for (b=38;b>0;b--)
  32.                 {
  33.                         for (a=130;a>0;a--);
  34.                 }
  35.            
  36.         }      
  37. }

  38. /*******************************************************************************
  39. * 函数名         : main
  40. * 函数功能                   : 主函数
  41. * 输入           : 无
  42. * 输出                  : 无
  43. *******************************************************************************/

  44. void main()
  45. {         

  46.         unsigned char i;

  47.         LcdInit();                         //初始化LCD1602
  48.     LcdWriteCom(0x80);        //写地址 80表示初始地址
  49.         for(i=0; i<14; i++)
  50.         {
  51.                 LcdWriteData(kaiji1[i]);
  52.         }
  53.                 LcdWriteCom(0xc0);        //写地址 c0表示初始地址
  54.         for(i=0; i<12; i++)
  55.         {
  56.                 LcdWriteData(kaiji2[i]);
  57.         }
  58.         Delay10ms(80);
  59.         LcdWriteCom(0x01);  //清屏
  60.         while(1)
  61.           {
  62.          
  63.           
  64.                                         ad=ReadADC_TLC1543(0);                                        //启动AD转换

  65.         if(key1==0)
  66.                 {
  67.                        
  68.                     LcdWriteCom(0x80);        //写地址 80表示初始地址
  69.                           for(i=0; i<16; i++)
  70.                         {
  71.                                 LcdWriteData(dis1[i]);
  72.                         }
  73.             dianya=ad*0.44432;          //放大1000倍,为了取小数点后两位
  74.                         dianya*100;
  75.                    LcdWriteCom(0xc0+2);        //写地址 80表示初始地址
  76.                 LcdWriteData('0'+dianya%10000/1000);               
  77.                
  78.                 LcdWriteData('0'+dianya%1000/100);
  79.                 LcdWriteData('0'+dianya%100/10);
  80.                         LcdWriteData('.');
  81.                 LcdWriteData('0'+dianya%10);
  82.                 LcdWriteData('m');
  83.                         LcdWriteData('A');
  84.                 }
  85.                
  86.                
  87.                


  88.                  else if(key2 ==0)
  89.                 {
  90.          
  91.                     LcdWriteCom(0x80);        //写地址 80表示初始地址
  92.                         for(i=0; i<16; i++)
  93.                         {
  94.                                 LcdWriteData(dis2[i]);
  95.                         }
  96.                  dianya=(ad*5*10)/1023;          //放大10倍,为了取小数点后1位
  97.                         dianya=dianya*100;
  98.                    LcdWriteCom(0xc0+2);        //写地址 80表示初始地址               
  99.                 LcdWriteData('0'+dianya%10000/1000);
  100.                 LcdWriteData('0'+dianya%1000/100);
  101.                 LcdWriteData('0'+dianya%100/10);
  102.                 LcdWriteData('.');
  103.                 LcdWriteData('0'+dianya%10);
  104.                 LcdWriteData('m');
  105.                         LcdWriteData('A');
  106.                 }

  107.                  else if(key3 ==0)
  108.                 {
  109.                        
  110.                     LcdWriteCom(0x80);        //写地址 80表示初始地址
  111.                         for(i=0; i<16; i++)
  112.                         {
  113.                                 LcdWriteData(dis3[i]);
  114.                         }
  115.                                  dianya=(ad*5*10)/1023;          //放大10倍,为了取小数点后1位
  116.                         dianya=dianya*100;
  117.                    LcdWriteCom(0xc0+2);        //写地址 80表示初始地址               
  118.                 LcdWriteData('0'+dianya%10000/1000);
  119.                 LcdWriteData('0'+dianya%1000/100);
  120.                 LcdWriteData('0'+dianya%100/10);
  121.                 LcdWriteData('.');
  122.                 LcdWriteData('0'+dianya%10);
  123.                 LcdWriteData('m');
  124.                         LcdWriteData('A');
  125.                 }
  126.                          else
  127.                          {
  128.                           LcdWriteCom(0x01);  //清屏
  129.                            LcdWriteCom(0x80);        //写地址 80表示初始地址
  130.                                 for(i=0; i<13; i++)
  131.                                 {
  132.                                         LcdWriteData(kaiji3[i]);
  133.                                 }
  134.                                 Delay10ms(50);
  135.                                 LcdWriteCom(0x01);  //清屏
  136.                          }
  137.                 Delay10ms(1);
  138.           }
  139.         }
复制代码

Proteus8.8仿真Keil代码51hei附件下载:
三量程电流表.rar (124.18 KB, 下载次数: 65)

评分

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

查看全部评分

回复

使用道具 举报

ID:102963 发表于 2021-11-19 09:42 | 显示全部楼层
被测电流从哪里看,或者从哪里输入?没看懂!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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