久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1711|回復: 3
打印 上一主題 下一主題
收起左側

汽車空調控制器單片機程序設計,請大神幫忙修改給意見

[復制鏈接]
回帖獎勵 40 黑幣 回復本帖可獲得 10 黑幣獎勵! 每人限 1 次
跳轉到指定樓層
樓主
汽車空調控制器.zip (460.75 KB, 下載次數: 25)
我是根據AVR修改的,用at89C051代替原來的芯片,測溫器改為ds18b20,lcd改為lm016l,顯示兩行一行為設定溫度,一行為mode就可以了,鍵盤重新劃分為(cool,hot,blast,chuwu,+,-,換風,風向)。控制電路上多加了加熱器電機,啟動按鍵hot加熱電機運行,啟動除霧按鍵加熱器和風機壓縮機等一起運行。其他的和參考原文一樣,請大神幫忙修改給意見,真的無從下手。下面編碼是參考的編碼。

電路原理圖如下:

#include <reg51.h>
#include <stdlib.h>
bit boolean;
#define uint unsigned int
#define uchar unsigned char  
#define ulong unsigned long
uchar ventilator_state;
uchar fan;  
uchar blow;
uchar run_mode;
uchar temp;
uchar setting_value;
interrupt [TIM2_COMP] void timer2_comp_isr(void)
{
//產生PWM,控制步進電機
if (fan==1)
{
   OCR2=64;
}
else if(fan==2)
{
   OCR2=128;
}
}
#define FIRST_ADC_INPUT 0   //第一通道
#define LAST_ADC_INPUT 1    //最后一通道 ,最大值為7,共8個通道
unsigned int adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1];
#define ADC_VREF_TYPE 0x40
// ADC中斷服務程序
// 自動掃描模擬量輸入端口,
interrupt [ADC_INT] void adc_isr(void)
{
register static unsigned char input_index=0;
// 讀取轉換結果
adc_data[input_index]=ADCW;
// 選擇轉換通道
if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT))
   input_index=0;
ADMUX=(FIRST_ADC_INPUT|ADC_VREF_TYPE)+input_index;
//啟動AD轉換
ADCSRA|=0x40;
}

void main(void)
{
float current_temp;//保存當前溫度
// Port A 初始化
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;
// Port B 初始化
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C 初始化
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x38;
DDRC=0x38;
// Port D 初始化
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x1f;
DDRD=0xF8;

//用T2產生PWM,控制風向步進電機
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x64;
TCNT2=0x00;
OCR2=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x80;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
// ADC Clock frequency: 125.000 kHz
// ADC Voltage Reference: AVCC pin
// ADC Auto Trigger Source: Free Running
ADMUX=FIRST_ADC_INPUT|ADC_VREF_TYPE;
ADCSRA=0xEE;
SFIOR&=0x1F;
// LCD module初始化
lcd_init(16);
// 開啟全局中斷
dis_character(); //在LCD上顯示字符
setting_value=25; //默認設定溫度為25
run_mode=0;       //默認關閉
ventilator_state=0;
lcd_gotoxy(12,3);
lcd_putsf("OFF");  
while (1)
      {   
        scan_key();  
        blow_mode();
        display();
        if(run_mode==2)
        {   
            current_temp=Pt1000Tab[adc_data[0]];
            if (current_temp<setting_value)
            {      
              stop_compressor();
              //lcd_gotoxy(10,1);
              //lcd_putsf("Blast");         
            }
            else
            {
              start_compressor();   
              //lcd_gotoxy(10,1);
              //lcd_putsf("Cool");     
            }        
              else
            {
              start_compressor();   
              //lcd_gotoxy(10,1);
              //lcd_putsf("Hot");     
            }        
       }
      }                        
}
void start_compressor(void){
  //Start
  PORTD|=0x18;

  PORTD&=~0x10;

  PORTD|=0x18;
}
void stop_compressor(void){
  //Stop
  PORTD|=0x18;
  PORTD&=~0x08;
  PORTD|=0x18;
}
void start_ventilator(void) {
  PORTD|=0x40;//換氣風機運行
}
void stop_ventilator(void){
  PORTD&=~0x40;//換氣風機停止
}
void start_evaporator_fan(void){
  PORTD|=0x20;//蒸發器風機運行
}
void stop_evaporator_fan(void){
  PORTD&=~0x20;//蒸發器風機停止
}
void start_calorifer_fan(void){
  PORTD|=0x1C;//加熱器運行
}
void stop_calorifer_fan(void){
  PORTD&=~0x1C;//加熱器風機停止
}
/*-----------------------------------------------鍵盤掃描-------------------------------------------

-----------------------------------------------鍵盤掃描-------------------------------------------*/
void scan_key(void){
/*
   K11    K12     K13
   K21    K22     K23
   K31    K32     K33
*/

//K13 K23 K33  
PORTC&=~0x20;
if((PIND&0x09)!=0x09)
{   
   delay();
   if((PIND&0x09)!=0x09)
   {   
        if((PIND&0x09)==0x08)
        {  //Key 3-3  
          //uchar key_num[]="K33";
          while((PIND&0x09)==0x08);
          switch(blow)
          {
            case 0:
            {
              blow=1;
              lcd_gotoxy(10,2);
              lcd_putsf("Mode0");
              break;        
            }
            case 1:
            {
              blow=2;
              lcd_gotoxy(10,2);
              lcd_putsf("Mode1");
              break;        
            }
            case 2:
            {
              blow=3;
              lcd_gotoxy(10,2);
              lcd_putsf("Mode2");              
              break;        
            }
            case 3:
            {
              blow=0;
              lcd_gotoxy(10,2);
              lcd_putsf("Mode3");
              break;        
            }                                       
          }
          return;
        }
        if((PIND&0x09)==0x07)
        {  //Key 2-3   
           //uchar key_num[]="K23";           
           while((PIND&0x09)==0x07);
                       
           if(ventilator_state==1)
           {
              ventilator_state=0;
              stop_ventilator();
              lcd_gotoxy(12,3);
              lcd_putsf("OFF");            
           }
           else
           {
              ventilator_state=1;
              start_ventilator();
              lcd_gotoxy(12,3);
              lcd_putsf("Run");               
           }           
           return;
        }
        if((PIND&0x09)==0x05)
        {  //Key 1-3           
          //uchar key_num[]="K13";
          while((PIND&0x09)==0x05);
          switch(run_mode)
          {
            case 2:
            { //關閉模式
              stop_evaporator_fan();
              stop_compressor();  
              lcd_gotoxy(10,1);
              lcd_putsf("OFF  ");
              run_mode=0;
              break;
            }
            case 0:
            {
              //送風模式  
              start_evaporator_fan();
              stop_compressor();
              lcd_gotoxy(10,1);
              lcd_putsf("Blast");
              run_mode=1;
              break;      
            }        
            case 1:
            {
              //制冷模式
              start_evaporator_fan();
              start_compressor();
              lcd_gotoxy(10,1);
              lcd_putsf("Cool ");              
              run_mode=2;
              break;           
            }
          }

          return;
        }   
   }      
}
PORTC|=0x20;
//K12 K22 K32
PORTC&=~0x10;
if((PIND&0x09)!=0x09)
{
        if((PIND&0x09)==0x08)
        {  //Key 3-2
           //uchar key_num[]="K32";
           while((PIND&0x09)==0x08);
           return;
        }
        if((PIND&0x09)==0x07)
        {  //Key 2-2
           //uchar key_num[]="K22";
           while((PIND&0x09)==0x07);
           if (setting_value<=18)
           {
              setting_value=18;
           }
           else
           {
              setting_value--;
           }

           return;
        }
        if((PIND&0x09)==0x05)
        {  //Key 1-2
           //uchar key_num[]="K12";
           while((PIND&0x09)==0x03);
           if (setting_value>=28)
           {
              setting_value=28;
           }
           else
           {
              setting_value++;
           }
           return;
        }
}
PORTC|=0x10;
//K11 K21 K31
PORTC&=~0x08;
if((PIND&0x07)!=0x07)
{   
   delay();
   if((PIND&0x07)!=0x07)
   {   
        if((PIND&0x07)==0x06)
        {  //Key 3-1  
          //uchar key_num[]="K31";
          while((PIND&0x07)==0x06);
          return;
        }
        if((PIND&0x07)==0x05)
        {  //Key 2-1   
           //uchar key_num[]="K21";           
           while((PIND&0x07)==0x05);
           return;
        }
        if((PIND&0x07)==0x03)
        {  //Key 1-1           
           //uchar key_num[]="K11";
           while((PIND&0x07)==0x03);  
          return;
        }   
   }      
}
PORTC|=0x08;
}
void blow_mode(void){
switch(blow)
{
  case 0:
  {
    fan=0;
    break;
  }     
  case 1:
  {
    fan=1;
    break;
  }
  case 2:
  {
    fan=2;
    break;
  }  
  case 3:
  {
    temp++;
    if(temp==5)
    {
      boolean=~boolean;         
    }
    if (boolean==1)
    {
      fan=1;
    }
    else
    {
      fan=2;
    }  
    break;
  }      
}
}
void delay(void){
uint i,j;
for (i=0;i<10;i++)
  {
  for (j=0;j<10;j++)
     {}
  }
}
void dis(uchar channel,uchar x,uchar y){
   uchar arr[5];  
   ftoa(Pt1000Tab[adc_data[channel]],1,arr);
   //itoa(adc_data[channel],arr);
   lcd_gotoxy(x,y);
   lcd_puts(arr);
   //lcd_putchar(0);   
}
void display(void){  
   uchar setting[3];
   dis(0,2,0);
   itoa(setting_value,setting);
   lcd_gotoxy(12,0);
   lcd_puts(setting);
}
void dis_character(void){   
   lcd_gotoxy(0,0);
   lcd_putsf("T:");
   
   lcd_gotoxy(8,0);
   lcd_putsf("Set:");   
   
   lcd_gotoxy(0,1);
   lcd_putsf("Run  Mode:");  
   lcd_gotoxy(10,1);
   lcd_putsf("OFF  ");
   lcd_gotoxy(0,2);
   lcd_putsf("Blow Mode:");
   
   lcd_gotoxy(10,2);
   lcd_putsf("Mode0");  
   
   lcd_gotoxy(0,3);
   lcd_putsf("Ventilator:");     
}






分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

地板
ID:1114544 發表于 2024-6-17 10:39 | 只看該作者
此帖僅作者可見

使用道具 舉報

板凳
ID:570927 發表于 2019-6-24 16:08 | 只看該作者
此帖僅作者可見

使用道具 舉報

沙發
ID:535889 發表于 2019-5-16 19:13 來自手機 | 只看該作者
此帖僅作者可見

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91在线看网站| 久在线精品视频 | 国产一区二区三区在线看 | 国产精品99999999 | 国产精品成人品 | 日本精品免费 | 国产高清一二三区 | 视频一区二区在线 | 国产精品欧美一区二区三区不卡 | 成人av播放 | 久久久成人一区二区免费影院 | www.日本在线播放 | 中文字幕第二十页 | 香蕉久久久 | 日本午夜精品 | 精品一二三区在线观看 | 一区二区三区中文字幕 | 久热久草 | 91亚洲国产亚洲国产 | 老外黄色一级片 | 中文字字幕在线中文乱码范文 | 精品一区二区三区在线观看 | 99久视频| 91精品久久久久久久久中文字幕 | jizz亚洲人 | 国产午夜精品视频 | 成人一区二区三区 | 精品在线免费看 | 女女百合av大片一区二区三区九县 | 久久9久| 国产精品国产精品国产专区不蜜 | 九九亚洲 | 日韩伦理电影免费在线观看 | 免费精品 | 国产精品美女久久久久aⅴ国产馆 | 欧美一级在线免费观看 | 成人aaa视频 | 成人在线观看免费视频 | 国产精品看片 | 欧美视频1区 | 国产成人99久久亚洲综合精品 |