标题: 单片机+TLC2543数模模数转换制作电子秤 Proteus仿真程序 数码管显示 [打印本页]

作者: 威爱吃水果123    时间: 2022-1-13 21:21
标题: 单片机+TLC2543数模模数转换制作电子秤 Proteus仿真程序 数码管显示
左边的模拟称重传感器电位一变,数码管就显示重量了中间有个数模模数转换仿真均真实有效
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  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, 下载次数: 35)






欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1