找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于C8051F单片机的温度控制系统设计 含原理图+C语言源码

[复制链接]
跳转到指定楼层
楼主
   1.这次设计实验设计任务由五个模块组成,分别是单片机系统的制作,数码管显示模块的设计制作,键盘电路的设计与制作, 模数转换电路的制作,数模转换电路。完成各个单独模块的调试之后需要进行对整个系统程序的编写以及各模块之间的联调工作。对于整个系统而言,进行了分模块设计与测试的流程,以便减小联调过程中发生错误的可能性。
2.1单片机模块概述
首先我们制作的是整个系统中最为重要的一个部分—单片机模块。本系统的单片机选择了目前应用最为广泛的51系列单片机。为了使单片机能够完成更加复杂的工作,故必须对单片机的引脚功能进行扩展。为了实现系统功能,在单片机模块中配置了数据/地址分离电路以及地址译码电路。具体来说,单片机模块中使用了74LS373对地址数据进行锁存,使用74LS138作为部分地址译码电路。然后利用JTAG适配器将电脑中编写的程序下载至单片机中,并利用示波器对单片机的输出信号进行检测。
2.2单片机模块设计电路图
#include "C8051F020.h"

  1. #include "absacc.h"
  2. #include "data_define.c "
  3. #include " Init_Device.c "
  4. #define    CS0  XBYTE[0x0005]
  5. #define    CS1  XBYTE[0x200A]
  6. #define    CS2  XBYTE[0x4005]
  7. #define    CS3  XBYTE[0x600A]
  8. #define    CS4  XBYTE[0x8005]
  9. #define    CS5  XBYTE[0xA00A]

  10. void main(void)
  11. {
  12.     uchar a;
  13.     Init_Device();
  14.     while(1)  
  15.     {
  16.         CS0=0x55;
  17.         a=CS1;
  18.         CS2=0xaa;
  19.         a=CS3;
  20.         CS4=0x55;
  21.         a=CS5;
  22.     }
  23. }
复制代码


3.1 数码管显示电路模块概述
我们主要进行了显示电路的设计与制作。对于整个显示模块而言,主要通过4个7段数码管,将测量到的温度与由键盘输入的目标温度进行显示。此外,在数码管显示模块中,还使用了4个74LS273对单片机的输出数据进行锁存,使得单片机能够依次对数码管进行数据传输时其余数码管上显示的内容能够得以保留。此外还利用74LS138译码器,对需要进行数据传输的数码管进行选择。
3.2 数码管显示电路模块设计电路图
#include "C8051F020.h"

  1. #include "absacc.h"
  2. #include "data_define.c"
  3. #define    LED1      XBYTE[0x0002]        //0010
  4. #define    LED2      XBYTE[0x0003]        //0011
  5. #define    LED3      XBYTE[0x0008]        //1000
  6. #define    LED4      XBYTE[0x0009]        //1001


  7. #define    TIMER    0x8000
  8. #include "Init_Device.c"
  9. unsigned char table[  ]={0xC0,0xF9,0xA4,0xB0,0x99,
  10.                  0x92,0x82,0xF8,0x80,0x90};
  11. void delay(void)
  12. {
  13.        unsigned int i;
  14.        for(i=0;i<TIMER;++i);
  15. }
  16. void main(void)
  17. {  
  18.       unsigned  char i;
  19.       Init_Device();        
  20.       LED1=LED2=0xff;
  21.       while(1)
  22.       {  
  23.         for(i=0;i<10;++i)
  24.           {
  25.             LED1=table[i];
  26.         LED2=table[i];
  27.                 LED3=table[i];
  28.                 LED4=table[i];
  29.         delay( );
  30.         delay( );
  31.                 delay( );
  32.                 delay( );
  33.                 delay( );
  34.                   
  35.                   }     

  36.       }
  37. }  
复制代码
4.键盘模块
4.1键盘模块概述
由于在本次工程设计中,已经提供了现成的键盘模块。故只需设计并制作键盘模块对应的读取电路即可。在本次实验中,我们选择了地址扫描模式。该模式的特点是通过74LS138芯片依次对键盘的第一到四行输出低电平,并在次过程中读取每列的电平,进而判断出是哪行哪列的按键被按下了。在该模块中使用到了一块74LS244,是一块3态8位缓冲器芯片,作为驱动信号芯片使用。通常单片机的I/O口输出电流很小,而74LS244就是用来放大电流的。需要注意的是74LS244是单向的,在连接过程中不要接反。
4.2键盘读取模块电设计路图
#include "C8051F020.h"

  1. #include "absacc.h"
  2. #include "data_define.c"
  3. #define   DP1   XBYTE[0x0002]
  4. #define   DP2   XBYTE[0x0003]
  5. #define   DP3   XBYTE[0x0008]
  6. #define   DP4   XBYTE[0x0009]
  7. #define   TIMER 0x8000
  8. #include "Init_Device.c"
  9. unsigned char table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
  10. void display(unsigned char x,unsigned char y)
  11. {
  12.          DP3=table[x];
  13.          DP4=table[y];
  14.         DP1=table[x];
  15.          DP2=table[y];
  16. }     
  17.    
  18. void main(void)
  19. {
  20.         unsigned  char l_val,r_val,r_state,temp,conter,x,c;
  21.     int key;
  22.     DP1=DP2=DP3=DP4=0xff;
  23.     Init_Device();
  24.         while(1)
  25.         {  
  26.              key=0x0004;
  27.         for(x=1;x<5;x++,key++)
  28.               {  
  29.                  c=XBYTE[key];
  30.             if(r_state=~c&0x1f)
  31.             {
  32.                                 for(conter=1,temp=0x01;conter<6;++conter,temp=temp<<1)
  33.                 if((r_state&temp)!=0)  
  34.                 {
  35.                                         r_val=conter;
  36.                           l_val=x;
  37.                          display(l_val,r_val);
  38.                                 }
  39.                    }
  40.               }
  41.           }
  42. }
复制代码
对于该程序,当按下键盘中的某一个键时,在数码管上会依次显示出所按下按键的行和列的值,由此可以判断出键盘键值读取模块是否正常工作。
5.模数转换电路
5.1 模数转换电路概述
对于模数转换电路,在该实验中选用了ADC0804逐次逼近式A/D转换芯片,可以满足对于将输入的0~+5V的模拟信号转换为8位的数字量。其转换结果与模拟输入电压关系由关系式确定。
5.2模数转换电路设计电路图
图5-1 模数转换电路设计电路图
  1. #include "C8051F020.h"
  2. #include "absacc.h"
  3. #include "data_define.c"
  4. #define   CS1      XBYTE[0x2000]
  5. #define   TIMER   0x8000
  6. #include "Init_Device.c"
  7. void delay(void);
  8. void main(void)
  9. {
  10.     unsigned char x;
  11.     Init_Device();
  12.         while(1) { CS1=x; delay(); x=CS1; delay(); }
  13. }
  14. void delay(void)
  15. {
  16.     unsigned int i;
  17.     for(i=0;i<TIMER;++i);
  18. }
复制代码
对于该程序,在调试过程中,将变量x的值加入到观察窗口中,不断改变测试台的输出电压模拟量的值,检查变量x的值是否与与其结果一致。(0V时近似对应数字量0,+5V时近似对应数字量255)需要注意的是在进行数模转换前,要将变送器的可变电阻调整到合适的阻值。
5.数模转换模块
6.1数模转换模块概述
在数模转换模块中,使用了一块DAC0832以及由两个LM358级联的运算放大器,实现对于输入的0到100摄氏度数字量和-10V—+10V的模拟量进行一个转换,进而对后续的半导体制冷片进行控制。

结果.png (467.9 KB, 下载次数: 82)

结果.png

原理图.png (119.93 KB, 下载次数: 73)

原理图.png

评分

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

查看全部评分

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

使用道具 举报

沙发
ID:1027281 发表于 2022-5-17 14:12 | 只看该作者
大哥,原理图有高清的吗
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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