⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 led.c

📁 基于89s52的空调模拟系统的实现
💻 C
📖 第 1 页 / 共 2 页
字号:
/***********************************
*MCU:AT89S51
*Freq:12M
.edit Tab:4
driver:ht1621
**********************************/
  //=============================================================
//OCMJ8X15D触摸屏中断程序
//当触摸事件发生时模块产生中断经INT脚输出信号触发MCU的外部中断0
//=============================================================
//=============================================
//=============================================
#include <reg52.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h> 
#include <math.h>
#include <intrins.h>
#include <absacc.h>


sbit lcd_rs   =P0^0;		//L:存取缓存器,H:存取DDRAM
sbit lcd_wr   =P0^1;		//L有效
sbit lcd_rd   =P0^2;		//L有效
//sbit lcd_cs1  =P1^3;		//L有效
//sbit lcd_cs2  =P1^4;		//H有效
sbit lcd_busy =P0^3;
sbit lcd_int =P0^4;
sbit lcd_rst  =P0^5;		//L有效

sbit DQ=P3^2;
#define lcd_regname  P2
#define lcd_regdata  P2
#define lcd_regnada  P2
#define lcd_data     P2
#define lcd_control  P0
#define uchar        unsigned char
#define uint         unsigned int

uchar taby[4];
uchar tabx[4];

//=============================================
uchar code inittab1[]={
0x00,0x01,0x02,0x03,0x10,0x11,0x12,0x21,0x31,0x41,0x51,0x20,0x30,0x40,0x50,0x60,
0x61,0x70,0x71,0x72,0x80,0x81,0x91,0x90,0xA0,0xA1,0xA2,0xA3,0xB0,0xB1,0xC0,0xC1,
0xC8,0xC9,0xCA,0xD0,0xE0,0xF0,0xF1};
uchar code inittab2[]={
0xC9,0xE2,0x10,0x80,0x2B,0x00,0x91,0x1D,0x7F,0x00,0x00,0x1D,0x7F,0x00,0x00,0x00,
0x00,0x00,0x00,0x7F,0xAA,0x00,0x00,0x0F,0x11,0x00,0x00,0x00,0x1D,0x7F,0x00,0x36,
0x80,0x80,0x00,0x80,0x00,0xA0,0x0F};

uchar tabx[4];
uchar taby[4];
uchar code tab1[]={	  
"    晟天舒适型空调模拟控制    "
"                              "
"                              "
"                              "
"                              "
"                              "
"                              "
"                        开机  "
};

uchar code tab2[]={
"    晟天舒适型空调模拟控制    "
"室内温度:24度  遥控:自动运转"
"室外温度:31度   +   -        "
"室内湿度:25%    +   -        "
"室外湿度:28%    +   -        "
"控制目标:24度 +   - 25% +   -"
"当前工作模式:制冷 去湿       "
"                        关机  "
};

uchar code tab3[] ={
"         1、自动运转          "
"         2、升温              "
"         3、降温              "
"         4、增湿              "
"         5、降湿              "
"         6、换气        关机  "
};

uchar code tab4[]={
"    晟天舒适型空调模拟控制    "
"室内温度:24 度 遥控:升温    "
"室外温度:31 度  +   -        "
"室内湿度:25 %   +   -        "
"室外湿度:28 %   +   -        "
"控制目标:24 度  25 %         "
"当前工作模式:制冷 去湿       "
"                        关机  "
};

uchar code tab5[]={
"    晟天舒适型空调模拟控制    "
"室内温度:24 度 遥控: 降温   "
"室外温度:31 度  +   -        "
"室内湿度:25 %   +   -        "
"室外湿度:28 %   +   -        "
"控制目标:24 度  25 %         "
"当前工作模式:制冷 去湿       "
"                        关机  "
};

uchar code tab6[]={
"    晟天舒适型空调模拟控制    "
"室内温度:24 度 遥控: 增湿   "
"室外温度:31 度  +   -        "
"室内湿度:25 %   +   -        "
"室外湿度:28 %   +   -        "
"控制目标:24 度  25 %         "
"当前工作模式:制冷 去湿       "
"                        关机  "
};

uchar code tab7[]={
"    晟天舒适型空调模拟控制    "
"室内温度:24 度 遥控: 降湿   "
"室外温度:31 度  +   -        "
"室内湿度:25 %   +   -        "
"室外湿度:28 %   +   -        "
"控制目标:24 度  25 %         "
"当前工作模式:制冷 去湿       "
"                        关机  "
};

uchar code tab16[]={
"    晟天舒适型空调模拟控制    "
"室内温度:24 度 遥控: 换气   "
"室外温度:31 度  +   -        "
"室内湿度:25 %   +   -        "
"室外湿度:28 %   +   -        "
"控制目标:24 度  25 %         "
"当前工作模式:制冷 去湿       "
"                        关机  "
};

uchar code tab8[]={
"      当前需要升温!          "
};

uchar code tab9[]={
"        升温停止!            "
};

uchar code tab10[]={
"      当前需要降温!          "
};

uchar code tab11[]={
"        降温停止!            "
};

uchar code tab12[]={
"      当前需要加湿!          "
};

uchar code tab13[]={
"        加湿停止!            "
};

uchar code tab14[]={
"      当前需要去湿!          "
};

uchar code tab15[]={
"        去湿停止!            "
};


char temp[2]={3,1};	  //outside temperrate		    
uchar show[2]={0,0};			//inner		  		    
char humidity[2]={2,5};			   //inner humidity 
char out_humidity[2]={2,8};	 //outside 
uchar function=0;
uchar dest_temp=24;
uchar dest_humidity=25;
uchar real_temp=0;
uchar real_out_temp=0;
uchar real_humidity=0;
uchar real_out_humidity=0;
uchar lcd_page=0;

uchar dest_tem[2]={3,2};
uchar dest_humid[2]={2,5};


//=============================================
void lcd_regwr(uchar regnada) small;
void delay(int k);
void gotoxy(uchar x,uchar y) small;
//=============================================					


void init1820();
void write1820(uchar a); 
void gettemp(void);
unsigned char read1820(void);
void auto_control(void);
//13_LED  0,1...8,9
//uchar code Ht1621Tab1[]={0xeb,0x0a,0xad,0x8f,0x4e,0xc7,0xe7,0x8a,0xef,0xcf};
//uchar data DispBuffer;




void delay_us(uchar a)//when crystal is 12M ,a*2+5 us  ,??????5us,while ???DJNZ??
{
	while(--a);
}
//=============================================
void lcd_regwrite(uchar regname,uchar regdata) small
{                                   //写资料到缓存器
  lcd_regwr(regname);
  delay(1);
  lcd_regwr(regdata);
}
void lcd_regwr(uchar regnada) small
{
  lcd_regnada = regnada;
//  lcd_cs1 =0; // chip enable.
  lcd_rd = 1; //
  lcd_rs = 0; // rs = 0;
  lcd_wr = 0; // wr = 0;
  ;
  delay(5);
  lcd_wr = 1; // wr = 1;
  lcd_rs = 1; // rs = 1;
//  lcd_cs1 =1; // chip disable.
}
//.............................................
void lcd_datawrite(uchar wrdata) small
{						//写资料到DDRAM
  while(lcd_busy == 0);
  lcd_data = wrdata;
  //lcd_cs1 =0; // chip enable.
  lcd_rd = 1; //
  lcd_rs = 1; // rs = 1;
  lcd_wr = 0; // wr = 0;
  ;
  delay(5);
  lcd_wr = 1; // wr = 1;
//  lcd_rs = 1; // rs = 1;
  //lcd_cs1 =1; // chip disable.
}
//.............................................
uchar lcd_regread(uchar regname) small
{                           //读缓存器
  uchar reg_rddata;
  lcd_regwr(regname);

  lcd_data = 0xff;
//  lcd_cs1 =0; // chip enable.
  lcd_wr = 1; // wr = 1;
  lcd_rs = 0; // rs = 0;
  lcd_rd = 0; // rd = 0;
  ;
  delay(5);
  reg_rddata = lcd_data;
  lcd_rd = 1; // rd = 1;
  lcd_rs = 1; // rs = 1;
//  lcd_cs1 =1; // chip disable.
  return(reg_rddata);
}
//=============================================
void delay(int k)
{
  int i;
  for(i=0;i<k;i++);
}
void delay1 (int ms)
{
  int i,j;
  for(i=0;i<ms;i++)
    for(j=0;j<123;j++);
}
//=============================================
void lcd_reset(void) small
{  
 P0 = 0xdf; // lcd_rs/wr/rd/cs1/cs2 normal - skeep high.             //上电复位
  delay1(4000); // delay 120ms 等待上电复位
 P0 = 0xff; // lcd_rs/wr/rd/cs1/cs2 normal - skeep high.             //上电复位
  delay1(100); // delay 120ms 等待上电复位
 
}
//.............................................
//.............................................
void lcd_initial(void) small
{                   //初始化
  uchar i;
  for(i=0;i<39;i++)
  {
    lcd_regwrite(inittab1[i],inittab2[i]);
  }
}
//.............................................
void lcd_clear(void) small
{                   //清屏
  uchar reg_rddata;
  lcd_regwrite(0xe0,0x00);
  reg_rddata = lcd_regread(0xf0);
  reg_rddata |= 0x08;
  lcd_regwrite(0xf0,reg_rddata);
}
//.............................................
void lcd_photo(uchar code *pho) small
{                          //显示图形
  uchar i,j,k;
  uchar code *pp;
  gotoxy(0,0);
  for(k=0;k<2;k++)
  {
    pp=pho;
    for(j=0;j<64;j++)
    {
      for(i=0;i<30;i++)
      {
        lcd_datawrite(*pp);
	//	delay(50);
        ++pp;
      }
    }
  }
}
//.............................................
void lcd_lattice(uchar data1,uchar data2) small
{                                    //显示点阵
  uchar i,j;
  gotoxy(0,0);
  for(j=0;j<32;j++)
  {
    for(i=0;i<60;i++)
    {
      lcd_datawrite(data1);
    }
    for(i=0;i<60;i++)
    {
      lcd_datawrite(data2);
    }
  }
}
//.............................................
void lcd_character(uchar code *cha,int count) small
{                                    //显示中文或字符
  int i;
  for(i=0;i<count;i++)
  {
    lcd_datawrite(*cha);
    ++cha;
  }
}
//.............................................
extern void gotoxy(uchar x,uchar y) small
{                                //定坐标
  lcd_regwrite(0x60,x); // active window top register(awtr)
  lcd_regwrite(0x70,y); // active window top register(awtr)
}
//=============================================



 
 

void gettemp(void)
{  
	unsigned int tp,i; 
	init1820();
	write1820(0xcc);
	write1820(0x44);
	init1820();
	write1820(0xcc);
	write1820(0xbe);
	show[0]=read1820();
	show[1]=read1820();
	init1820();
	tp=show[1]*256+show[0];
	
//	tp=tmp_real;
	tp=tp>>4;
//	tp=(tp*18+320)/10;
	show[0]=(unsigned char)(tp/10);
	show[1]=(unsigned char)(tp%10);
	if(lcd_page==2)
	{
	gotoxy(0x0a,0x10);
     for(i=0;i<2;i++)
    {
   	lcd_regwrite(0x12,0x91);
      lcd_datawrite(show[i]+0x30);
	  	lcd_regwrite(0x12,0x90);
    }
	}
}

void init1820()
{
	 DQ = 1; _nop_();
	 DQ = 0;      //?????,??Reset OneWire Bus;
	 delay_us(125);  //??510us,Reset One-Wire Bus.
	 delay_us(125);
	 
	 DQ = 1;      //?????;
	 delay_us(15);  //??35us;
	 
	 while(DQ)     //??Slave ??Ack ??;
	 { _nop_(); }
	 delay_us(60);  //??125us; 
	 DQ = 1;      //?????,??????;
}

//******write********
void write1820(uchar a)
{
	uchar i;
	for(i=0;i<8;i++)
	{
		if(a & 0x01)  //????;
		{
			DQ = 0;    //??Recovery time;
			_nop_();_nop_();_nop_();
			DQ = 1;  
		 } //????;
		else
			DQ = 0;    //??Rec time;
		_nop_();_nop_();_nop_();  
		//DQ = 0;  } //????;
		delay_us(30);  //??Slave Device??;
		DQ = 1;      //Recovery;
		_nop_();      //Recovery Time Start;
		a >>= 1;
	}

}

//*******read************
unsigned char read1820(void)
{
	unsigned char i;
	unsigned char tmp=0;
	DQ = 1;  _nop_();     //???;
	for(i=0;i<8;i++)
	{
		tmp >>= 1;    //????;
		DQ = 0;      //Read init;
		_nop_();     //2ms;
		DQ = 1;      //???1,??????????????;		  
		delay_us(2);   //?9us;
		_nop_();
		if(DQ)      //?12us?????;
		tmp |= 0x80;
		delay_us(30);  //??55us;
		DQ = 1; 
	    _nop_();   //??One Wire Bus;	 
	}
	return tmp; 
}
					  
//**************************????,???1us???????1ms??? **************

//=============================================
uchar touch_test(void) small
{
  uchar reg_rddata,reg_rddata1;
  
  reg_rddata = lcd_regread(0xc0);
  reg_rddata &= 0xf8;
  reg_rddata |= 0x08;
  lcd_regwrite(0xc0,reg_rddata);
  delay1 (6);
  
  reg_rddata1 = lcd_regread(0xc1);
  reg_rddata &= 0xf7;
  lcd_regwrite(0xc0,reg_rddata);
  return(reg_rddata1);
}
//.............................................
uint touch_x(void) small
{
  uchar reg_rddata,touchxl;
  uint touchx;
  
  reg_rddata = lcd_regread(0xc0);
  reg_rddata &= 0xf3;
  reg_rddata |= 0x03;
  lcd_regwrite(0xc0,reg_rddata);
  delay1 (60);
  
  touchx = lcd_regread(0xc8);         //TPXR
  touchxl = (lcd_regread(0xca)&0xc0); //TPZR
  touchx = (touchx<<2)|(touchxl>>6);
  return(touchx);
}
//.............................................
uint touch_y(void) small
{
  uchar reg_rddata,touchyl;
  uint touchy;
  
  reg_rddata = lcd_regread(0xc0);
  reg_rddata &= 0xfc;
  reg_rddata |= 0x0c;
  lcd_regwrite(0xc0,reg_rddata);
  delay1 (60);
  
  touchy = lcd_regread(0xc9);         //TPYR
  touchyl = (lcd_regread(0xca)&0x0c); //TPZR
  touchy = (touchy<<2)|(touchyl>>2);
  return(touchy);
}

void auto_perform_control()
{
   	real_temp=show[0]*10+show[1];
	real_humidity=humidity[0]*10+humidity[1];
	real_out_temp=temp[0]*10+temp[1];
	real_out_humidity=out_humidity[0]*10+out_humidity[1];
//	funPMV(It,IRh,change,real_temp,real_humidity,real_out_temp,real_out_humidity);
//	gotoxy(0x02,0x70);
//	   	lcd_regwrite(0x12,0x91);
//      lcd_datawrite(*It+0x30);
//	  lcd_datawrite(*IRh+0x30);
//	  lcd_datawrite(*change+0x30);
//	  	lcd_regwrite(0x12,0x90);
	//status_control(*It,*IRh,*change);
}
void auto_perform()
{
 	 uint i;

	 delay1(10);
	 gotoxy(0x00,0x00);
  	lcd_regwrite(0x12,0x91); // memory access mode register(awrr)
    lcd_character(tab2,240);
    lcd_regwrite(0x12,0x90); // memory access mode register(awrr)			  
	gotoxy(0x0a,0x50);
	 for(i=0;i<2;i++)
    {
   	lcd_regwrite(0x12,0x91);
      lcd_datawrite(dest_tem[i]+0x30);
	  	lcd_regwrite(0x12,0x90);
    }
	gotoxy(0x0a,0x50);
	 for(i=0;i<2;i++)
    {
   	lcd_regwrite(0x12,0x91);
      lcd_datawrite(dest_tem[i]+0x30);
	  	lcd_regwrite(0x12,0x90);
    }
	gotoxy(0x11,0x50);
	 for(i=0;i<2;i++)
    {
   	lcd_regwrite(0x12,0x91);
      lcd_datawrite(dest_humid[i]+0x30);
	  	lcd_regwrite(0x12,0x90);
    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -