📄 led.c
字号:
/***********************************
*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 + -