找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1750|回复: 0
收起左侧

单片机+TLC2543数模模数转换制作电子秤 Proteus仿真程序 数码管显示

[复制链接]
ID:948122 发表于 2022-1-13 21:21 | 显示全部楼层 |阅读模式
左边的模拟称重传感器电位一变,数码管就显示重量了中间有个数模模数转换仿真均真实有效
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
51hei.gif 91L7IGQ8]E`MJ19YF@XNH4Y.png

单片机源程序如下:
  1. #include <REG52.H>
  2. #include <intrins.h>
  3. #define uchar unsigned char         //宏定义方便以后用
  4. #define uint unsigned int  
  5. #define ulong unsigned long

  6. //数码管位选
  7. sbit S1=P2^0;
  8. sbit S2=P2^1;
  9. sbit S3=P2^2;
  10. sbit S4=P2^3;


  11. //定义ADC的引脚
  12. sbit AD_CS=P1^3;
  13. sbit AD_CLK=P1^0;
  14. sbit AD_IN=P1^1;
  15. sbit AD_OUT=P1^2;


  16. uchar Disdatabuf[5]={0};        //数码管显示数据


  17. char code SEGtable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; //共阳数码管码表


  18. void delay()
  19. {
  20.   uint i=5;
  21.   while(i--);
  22. }
  23. //读取adc数值
  24. uint ReadADC_TLC2543(uint CH)
  25. {
  26.   uint ad=0,i;
  27.   AD_CLK=0;
  28.   AD_CS=0;
  29.   CH<<=4;
  30.   for(i=0;i<12;i++)
  31.   {
  32.     if(AD_OUT) ad|=0x01;
  33.     AD_IN=(bit)(CH&0x80);
  34.     AD_CLK=1;
  35.     delay();
  36.     AD_CLK=0;
  37.     delay();
  38.     CH<<=1;
  39.     ad<<=1;
  40.   }
  41.   AD_CS=1;
  42.   ad>>=1;
  43.   return(ad);
  44.   
  45. }




  46. void Delay(uint i)//1ms延时
  47. {
  48.   uchar x,j;
  49.   for(j=0;j<i;j++)
  50.     for(x=0;x<=148;x++);
  51. }


  52. //数码管动态扫描

  53. void Show_data()
  54. {
  55.   static uchar i=0;
  56.   P0=0xff;      //关闭显示
  57.   switch(i)
  58.   {
  59.   case 0:    //显示模式
  60.     S1=1;S2=0;S3=0;S4=0;
  61.     P0=SEGtable[Disdatabuf[3]];
  62.     i++;
  63.     break;
  64.   case 1:       //正反转
  65.     S1=0;S2=1;S3=0;S4=0;
  66.     P0=SEGtable[Disdatabuf[2]];
  67.     i++;
  68.     break;
  69.   case 2:
  70.     S1=0;S2=0;S3=1;S4=0;
  71.     P0=SEGtable[Disdatabuf[1]];
  72.     i++;
  73.     break;
  74.   case 3:
  75.     S1=0;S2=0;S3=0;S4=1;
  76.     P0=SEGtable[Disdatabuf[0]];
  77.     i=0;
  78.     break;
  79.    
  80.   }
  81. }

  82. //主函数
  83. void main()
  84. {
  85.   ulong temp=0;
  86.   ulong AD_Data=0;        //ADC数值       
  87.   while(1)
  88.   {
  89.         AD_Data=ReadADC_TLC2543(0);         //读取ADC
  90.         temp= AD_Data*1000/4094;//转化数据
  91.   //显示占空比
  92.     Disdatabuf[3]= temp/1000;
  93.     Disdatabuf[2]= temp%1000/100;       
  94.     Disdatabuf[1]= temp%100/10;
  95.     Disdatabuf[0]=temp%10;
  96.     Show_data();        //显示数据          
  97.     Delay(10);         //延时
  98.   }
  99. }
复制代码

Keil代码与Proteus仿真下载:
T88称重仿真.zip (595.27 KB, 下载次数: 32)

评分

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

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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