找回密码
 立即注册

QQ登录

只需一步,快速开始

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

PIC16F1947单片机做的NTC热敏电阻温控器原理图及源程序

  [复制链接]
跳转到指定楼层
楼主
PIC16F1947做的温控器及程序
电路原理图如下:


单片机源程序如下:
  1. #include "mydefine.h"
  2. #include "pic.h"

  3. #include "mTouch.h"
  4. #include "GLOBAL.H"
  5. #include "DEFINE.H"
  6. #include "XWKQ_KeyScan.H"


  7.                      // Required Include

  8. // CONFIGURATION SETTINGS
  9. #include "generic_processorConfigBits.h"        // Provided for ease-of-development.



  10. // PROTOTYPES
  11. void Example_System_Init (void);
  12. extern void interrupt  ISR      (void);
  13. extern unsigned char auto_exit;

  14. extern void  working_mode ();
  15. extern void inplement();
  16. extern void FAN_CONTROL();

  17. extern volatile int SET_TEMPER10;

  18. void key_press(void);


  19. void key_exit(void);


  20. extern  void LCD_disp(unsigned int data_in );

  21. extern void UpdateLCD(void);


  22. #define uchar unsigned char
  23. #define uint unsigned int

  24. //volatile uchar  tflag;

  25. bit ON_OFF;   //MENU  ON/OFF button
  26. bit   POWER_ON_FIRST;   //1 ,POWER ON   FIRST TIME;

  27. //EEPROM DATA


  28.   int SET_TEMPER; //SETTING TEMPERATURE
  29. volatile bit  SET_DATA;   //change the temperature or other data

  30. unsigned char FAN_SPEED;  // 0:AUTO, 1:LOW, 2:MED, 3:HIGH
  31. unsigned char BACKLIGHT_LEVE;
  32. //unsigned char PIPLE4_AUTO;
  33. volatile unsigned   char MODE; //mode :  1:COOLING,  2:HEATING
  34.                                                
  35. extern volatile unsigned char  piple_num;

  36. bit  OK;  // KEY OK


  37. unsigned char SYSTEM_SETUP;   //1: TEMPERATURE FINE  2: FAN  BE CONTROLED
  38. volatile signed char TEMP_FINE;     // CORRECT THE TEMPERATURE
  39. volatile   unsigned char   FAN_BECONTROL;  
  40. bit  FAN_DELAY;
  41. unsigned long FAN_DELAYTIME;
  42. extern  bit FAN_DELAY_OFF;





  43. unsigned char SET_TIME=0;
  44. unsigned long TIME_ONOFF=0;  // TIMING FOR ON OR OFF;
  45. unsigned long TIME_ONOFF_BACKUP=0;
  46. volatile   bit  TIMING;   //CHINESE TIMING SIGN 0:OFF   1: ON
  47. volatile  bit TIME_COUNT;   //0:DISABLE 1:ENABLE
  48. volatile bit  TIME_EDIT;
  49. volatile  bit TIME_ON;      // FROM OFF TO WOROK




  50. extern bit mode_inverter;

  51. extern bit  downup;


  52. extern unsigned char FAN_STATUS;

  53. extern void ClearLCD(void);
  54. extern void KeyControl(void);
  55. extern void KeyScan(void);









  56. // START PROGRAM
  57. void main(void)
  58. {
  59.      OK=1;
  60.      POWER_ON_FIRST=1;

  61.     TIMING=0;  //*****/
  62.     TIME_COUNT=0;
  63.     TIME_EDIT=0;
  64.     TIME_ON=0;
  65.     SYSTEM_SETUP=0;

  66.      FAN_DELAYTIME=0;
  67.    
  68.      FAN_DELAY_OFF=1;    // avoid low fan switch be turn on  when power on  at firest time (heating=0  && cooling=0)
  69.      FAN_DELAY=1;      // avoid low fan switch be turn on  when power on  at firest time (heating=0  && cooling=0)



  70.    
  71.    
  72.   
  73.    SET_DATA=0;
  74.    SET_TIME=0;

  75.     Example_System_Init();          // Your System Initialization Function
  76.         
  77.                                        
  78.    
  79.     mTouch_Init();                  // mTouch Initialization (Required)
  80.    
  81.         PEIE = 1;  
  82.     GIE = 1;                                     // Initialization complete. Begin servicing interrupts.
  83.   
  84.         WDTPS3 = 1;                                                
  85.         SWDTEN = 1;                                                // enable WDT


  86.      INTCON=0b11100000;
  87.      PIR1=0b00000000;
  88.     TMR1H=0x3c;     
  89.     TMR1L=0xaf;
  90.     T1CON=0b00110001;  //  16M internal clock
  91.     T1GVAL=0;

  92.    

  93.     PORTA       = 0x00;
  94.     PORTB       = 0X00;
  95.     PORTC       = 0x00;
  96.     PORTD       = 0X00;
  97.     PORTE       = 0X00;
  98.     PORTF       = 0X00;
  99.     PORTG       = 0X00;

  100.     LATF=0;
  101.    
  102.     ANSELA      =0b00001111;
  103.     ANSELE      =0b00000000;
  104.     ANSELF      =0b00011111;
  105.     ANSELG      =0b00000000;
  106.    
  107.     TRISA       =0b00001001;
  108.     TRISB       =0b00000001;   
  109.     TRISC       =0b10000000;
  110.     TRISD       =0b00000000;
  111.     TRISE       =0b00000000;
  112.     TRISF       =0b10000000;
  113.     TRISG       =0b00000010;

  114.    
  115.    

  116.     RG2=0;
  117.    
  118.    
  119.    
  120.    
  121.          LCDSE0 = 0xFF;        // enable first group of LCD segment outputs
  122.         LCDSE1 = 0x3F;        // enable second group of LCD segments
  123.         LCDSE2 = 0x00;        // enable third group of LCD segments
  124.         LCDSE3 = 0x00;
  125.         LCDSE4 = 0x00;
  126.         LCDSE5 = 0x00;

  127.     LCDCON = 0b10001011;        
  128.         LCDREF = 0b10000000;
  129.     LCDPS   = 0b00110011;               
  130.         LCDCST = 0b00000000;
  131.         LCDRL = 0b11110000;
  132.    
  133.    
  134.    
  135.     LCDDATA0=0X00;
  136.     LCDDATA1=0X00;
  137.     LCDDATA3=0X00;
  138.      LCDDATA4=0X00;
  139.      LCDDATA6=0X00;
  140.      LCDDATA7=0X00;
  141.      LCDDATA9=0X00;
  142.      LCDDATA10=0X00;

  143.   
  144.     ClearLCD();
  145.      
  146.    
  147.    
  148.    
  149.     __delay_us(100);

  150.      CLRWDT();

  151.      MODE=EEPROM_READ(0x00);
  152.      if (MODE==0XFF) {MODE=1;}

  153.      SET_TEMPER=EEPROM_READ(0x01);
  154.      if (SET_TEMPER==0XFF) {SET_TEMPER=25;}

  155.      FAN_SPEED=EEPROM_READ(0X02);

  156.      if (FAN_SPEED==0XFF)  {FAN_SPEED=1;}

  157.      BACKLIGHT_LEVE=EEPROM_READ(0X03);
  158.      if (BACKLIGHT_LEVE==0XFF) {BACKLIGHT_LEVE=0;}
  159.   
  160.       //CCPR3L=LIGHT_OFF;
  161.    
  162.      
  163.      //LIGHT_ON=0;  

  164.   
  165.      
  166. // PIPLE4_AUTO=EEPROM_READ(0X04);
  167. // if (PIPLE4_AUTO==0XFF)  {PIPLE4_AUTO=0;}

  168.      _nop();
  169.      _nop();
  170.      
  171.      TEMP_FINE=EEPROM_READ(0X05);

  172.      FAN_BECONTROL=EEPROM_READ(0X06);
  173.     if (FAN_BECONTROL==0XFF)  {FAN_BECONTROL=0;}
  174.      
  175.    _nop();
  176.    _nop();
  177.    _nop();
  178.    _nop();
  179.    _nop();
  180.    _nop();
  181.     if (PIPLE_QTY==0)    {piple_num=4;}else {  piple_num=2; }
  182.    
  183.    __delay_ms(100);


  184.    
  185.   
  186.    
  187.     while(1)
  188.     {
  189.         
  190.           CLRWDT();
  191.         
  192.    
  193.          if (SET_TIME !=0  &&  TIMING==1  &&TIME_COUNT==1&& OK==1 )  
  194.          {
  195.               COOLING=0;
  196.               HEATING=0;
  197.               if (LOW==1)     {CLRWDT(); __delay_ms(10);LOW=0;}
  198.               if (MED==1)     {CLRWDT(); __delay_ms(10);MED=0;}
  199.               if (HIGH==1)    {CLRWDT(); __delay_ms(10);HIGH=0;}
  200.             //  CCPR3L=LIGHT_OFF;
  201.               LIGHT_ON=0;
  202.               TIME_ON=1;
  203.       
  204.          }else
  205.             {
  206.                  TIME_ON=0;
  207.                  
  208.                  
  209.                    if ( SET_TIME==0  && TIMING==0 &&TIME_COUNT==1 && OK==1)
  210.                    {
  211.                         ON_OFF=0;
  212.                   
  213.                      //   CCPR3L=LIGHT_OFF;
  214.                      
  215.                         
  216.                LIGHT_ON=0;
  217.                         
  218.                     }else
  219.                        {   
  220.                            
  221.                               _nop();
  222.                                if ( ON_OFF==1)
  223.                                {
  224.                              
  225.                                      inplement();
  226.                                      FAN_CONTROL();
  227.                                       
  228.                               
  229.                                    
  230.                                 }
  231.                                    
  232.                       }
  233.          
  234.                  
  235.                                           if  (ON_OFF==0)
  236.               
  237.                                         {
  238.                                               COOLING=0;
  239.                                               HEATING=0;
  240.                                              
  241.                                              FAN_CONTROL();
  242.                                  
  243.                                             }
  244.                  
  245.                  }

  246.          
  247.          
  248.                  
  249.                                KeyValueBuf=0;
  250.                               KeyControl();
  251.                        
  252.          
  253.          

  254.          
  255.          
  256.            if (  auto_exit>=100 && OK==1 &&   LIGHT_ON==1)
  257.            {
  258.                LIGHT_ON=0;
  259.            }
  260.          
  261.          
  262.               if (  auto_exit>=100 && OK==0) //OVERTIME
  263.               {
  264.                
  265.               //    MENU_BAR=0;  //RESET THE MENU BAR TO DEFAULT BAR 0;
  266.          
  267.                   OK=1;        //RESET TO DEFAULT
  268.                   TIME_ONOFF_BACKUP=0; // EXIT MENU BEGINING TO COUNT
  269.    
  270.                   TIME_EDIT=0;
  271.                     if (TIME_COUNT==1 && SET_TIME==0)   { TIME_COUNT=0;TIMING=0;}
  272.                   working_mode ();
  273.                   
  274.                   SYSTEM_SETUP=0;
  275.                   
  276.                  }


  277.      

  278.                                                   
  279.         CLRWDT();
  280.      } // end - while(1) main loop

  281.   

  282. } // end - main() function







  283. /*        Initial the system */
  284. void Example_System_Init()
  285. {

  286.     // The mTouch framework controls these modules:
  287.     // *  TMR0  - YOU MUST INIT THE OPTION REGISTER / TMR0 PRESCALER
  288.     //            Do not choose 1:1 prescaling.
  289.     //
  290.     // *  ADC   - automatic initialization
  291.     // *  UART  - automatic initialization (if enabled and available)
  292.     //
  293.     // mTouch performs better as Fosc increases.   
  294.    
  295.     // NOTE: Update the configuration file if Fosc is changed!
  296.    
  297.         
  298.    
  299. ……………………

  300. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:

K9-WKQ.7z (432.35 KB, 下载次数: 168)
MCU-SI1102 调整亮度后.pdf (1.08 MB, 下载次数: 118)






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

使用道具 举报

沙发
ID:273583 发表于 2018-8-12 09:13 | 只看该作者
很好 ,很有用,很不错!
回复

使用道具 举报

板凳
ID:555335 发表于 2019-7-14 11:19 | 只看该作者
感谢分享
回复

使用道具 举报

地板
ID:572137 发表于 2019-7-21 08:03 来自手机 | 只看该作者
谢谢楼主无私奉献
回复

使用道具 举报

5#
ID:202586 发表于 2019-7-25 19:46 来自手机 | 只看该作者
刚好想研究温控,谢谢楼主分享
回复

使用道具 举报

6#
ID:249808 发表于 2019-8-10 09:26 | 只看该作者
感谢分享!大概看了一下!后面有时间再慢慢研究……
回复

使用道具 举报

7#
ID:410928 发表于 2019-9-20 10:31 | 只看该作者
我想用红外温度传感器,根单片几做一个,温度控制起,温度可调,带LED屏,好做吗?
回复

使用道具 举报

8#
ID:216265 发表于 2021-6-28 06:27 | 只看该作者
我试试,PIC单片机不常用呢
回复

使用道具 举报

9#
ID:959830 发表于 2021-8-29 23:18 | 只看该作者
谢谢楼主分享,希望可以试试看
回复

使用道具 举报

10#
ID:582276 发表于 2021-9-1 22:08 | 只看该作者
谢谢分享,参考看能不能得到帮助。
回复

使用道具 举报

11#
ID:959830 发表于 2021-12-17 21:33 | 只看该作者
谢谢分享,参考看能不能得到帮助。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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