找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机铂电阻温度控制器仿真设计与源程序

[复制链接]
ID:270466 发表于 2018-1-2 22:19 | 显示全部楼层 |阅读模式
基于单片机的铂电阻温度控制器,内含仿真电路及源程序

0.png 0.png

单片机源程序如下:
  1. #include<REG52.H> //插入52特殊功能寄存器头文件
  2. //-----------------------------------------------------------
  3. unsigned char code dispbitcode[]=//定义显示位控制驱动码
  4.   {0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f};
  5. //"0位","1位","2位","3位","4位","5位","6位","7位"
  6. //---------------------------------------------------------------------
  7. unsigned char code ledcode[]=//定义“0--9”十个数据的共阴极LED七段显示码
  8. {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};
  9. //"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", 黑屏
  10. //-------------------------------------------------------------------------
  11. unsigned char dispbuf[8]={10,10,10,10,10,10,0,0};//定义显示缓冲区初值
  12. //-------------------------------------------------------------------------
  13. unsigned char dispcount;//显示控制位变量
  14. unsigned int uiresult;//采集数据变量
  15. bit sflag;//符号标志位,为1时表示负值
  16. sbit START=P3^0;//定义ADC0809启动控制位                                                          
  17. sbit OE=P3^1;//定义ADC0809输出控制位
  18. sbit EOC=P3^2;//定义ADC0809转换结束标志位
  19. sbit P17=P1^7;//小数点控制位
  20. //=========================================
  21. int delay1ms()//延时1ms函数
  22. {unsigned int j;
  23. for(j=0;j<333;j++)
  24. {;}
  25. return 1;
  26.           
  27. }
  28. //===================================================
  29. void display()//显示处理函数
  30. {for(dispcount=0;dispcount<5;dispcount++)//显示0-4位
  31.   {P2=0xff;//消影,关闭显示
  32.   if(dispbuf[1]==0)//显缓区1位是否为"0"
  33.       { dispbuf[1]=dispbuf[0];//是,显缓区0位值赋给1位
  34.            dispbuf[0]=10;}//取黑屏码
  35.    P1=ledcode[dispbuf[dispcount]];//取对应位显示码
  36.    if(dispcount==3)//判断是否是小数点位
  37.        {P17=1;}//是,输出小数点
  38.            P2=dispbitcode[dispcount];//取对应位显示控制码
  39.            delay1ms();//延时1ms
  40.            P2=0xff;//消影,关闭显示
  41.   }
  42. }
  43. //====================================================
  44. void adc0809()//ADC0809数据采集处理函数
  45. {unsigned char i;
  46. unsigned long y;
  47. START=0;//启动ADC0809,产生高电平脉冲启动信号
  48. START=1;
  49. START=0;
  50. P0=0xff;//P0口设为输入状态
  51. EOC=1;//设EOC位为输入状态
  52. while(EOC==0);//没有转换完等待
  53. OE=1;//转换完,选通ADC0809转换数据输出
  54. uiresult=P0;//读ADC0809转换结果
  55. OE=0;//关闭选通位
  56. y=uiresult;
  57. if(uiresult<118||uiresult>124)//数据是否小于118或大于124
  58. if(uiresult<129)//数据是否小于129
  59. {uiresult=y*19.25;//数据标度变换
  60.   if(uiresult<2557.14)//数据是否小于2557.14
  61.    {uiresult=2557.14-uiresult;sflag=1;}//是的,计算绝对温度值,设置负号标志
  62.   else
  63.    {uiresult=uiresult-2557.14;sflag=0;}//否,计算绝对温度值,设置正号标志
  64.   }
  65.   else
  66.   {uiresult=y*20;//数据标度变换
  67.    if(uiresult<2680)//数据是否小于2680
  68.    {uiresult=2680-uiresult;sflag=1;}//是的,计算绝对温度值,设置负号标志
  69.    else
  70.    {uiresult=uiresult-2680;sflag=0;}//否,计算绝对温度值,设置正号标志
  71.   }
  72.   else
  73.   {uiresult=y*16.667;//数据标度变换
  74.    if(uiresult<2267.708)//数据是否小于2267.708
  75.    {uiresult=2267.708-uiresult;sflag=1;}//是的,计算绝对温度值,设置负号标志
  76.    else
  77.    {uiresult=uiresult-2267.708;sflag=0;}//否,计算绝对温度值,设置正号标志
  78.   }
  79. i=4;
  80. dispbuf[1]=0;//取0
  81. dispbuf[2]=0;//取0
  82. dispbuf[3]=0;//取0
  83. dispbuf[4]=0;//取0
  84. if(sflag==1)//是负温度标志吗?
  85.   {dispbuf[0]=11;}//是,取"-"显示码
  86. else
  87.   {dispbuf[0]=10;}//否,取"黑屏"码
  88. dispbuf[5]=10;//取"黑屏"码
  89. dispbuf[6]=10;//取"黑屏"码
  90. dispbuf[7]=10;//取"黑屏"码
  91. while(uiresult/10)//(uiresult/10)大于0吗
  92.   {dispbuf[i]=uiresult%10;//取低位数据送入对应的缓冲器
  93.    uiresult=uiresult/10;//数据除10,准备取次低位数
  94.    i--;//缓冲数据指针减1
  95.   }
  96.   dispbuf[i]=uiresult;//数据的最高有效位送入对应的缓冲器
  97. }
  98. //========================================================
  99. void main(void)
  100. {START=0;//关闭ADC0809启动
  101. OE=0;//关闭ADC0809数据输出
  102. uiresult=100;//设温度参数初值
  103. while(1)
  104.   {display();//显示处理函数
  105.    adc0809();//ADC0809数据采集处理函数
  106.   }
  107. }
复制代码

所有资料51hei提供下载:
单片机课设.zip (25.3 KB, 下载次数: 64)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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