标题:
自己参考例子写的带字库12864(ST7920)液晶屏程序,求优化
[打印本页]
作者:
一袋天骄
时间:
2018-7-19 16:49
标题:
自己参考例子写的带字库12864(ST7920)液晶屏程序,求优化
本帖最后由 一袋天骄 于 2018-7-23 10:58 编辑
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#include "4.h"
uchar code table[] = " 测试 ";
uchar code table1[]= " 实时数据查看 ";
uchar code table2[]= " 上下限设置 ";
uchar code table3[]= "光照: ";
uchar code table4[]= "风速: ";
uchar code table5[]= "风向: ";
uchar code table6[]= "温度: ";
uchar code table7[]= "湿度: ";
uchar code table8[]= "土温: ";
uchar code table9[]= "土湿: ";
uchar code table10[]="时: ";
uchar code table11[]="天: ";
uchar code table12[]="月: ";
uchar code table13[]="年: ";
uchar code table14[]="下限: ";
uchar code table15[]="上限: ";
uchar code table16[]=" 请输入密码: ";
uchar code table17[]=" 密码错误 ";
uchar code table18[]=" 请重新输入 ";
uchar code table19[]=" 降雨量 ";
uchar code table20[]=" 设置成功 ";
uchar fanye,fanye2,guangbiao;
uchar b,c,d,e,f,g;
uchar yi,er,san,si;
uchar ge,shi,bai,qian,wan;
uint guang_shang,guang_xia,feng_shang,wendu_shang,wendu_xia,shidu_shang,shidu_xia,tuwen_shang,tuwen_xia,tushi_shang,tushi_xia,yu_shang;
uint guang,fengsu,fengxiang,wendu,wendu1,shidu,tuwen,tuwen1,tushi,yu_shi,yu_tian;
long yu_yue,yu_nian;
//sbit LCD_CS=P0^7; //RS
sbit LCD_SID=P0^6; //RW
sbit LCD_SCLK=P0^5; //E
sbit key1=P1^1; //确认
sbit key2=P1^2; //按键减一
sbit key3=P1^3; //按键加一
sbit key4=P1^4; //返回
sbit key5=P1^5;
void delay_ms(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void sendbyte(unsigned char bbyte) //发送一个字节
{
unsigned char i;
for(i=0;i<8;i++)
{
LCD_SID=bbyte&0x80; //取出最高位
LCD_SCLK=1;
LCD_SCLK=0;
bbyte<<=1; //左移
}
}
void write(bit start, unsigned char ddata) //写指令或数据
{
unsigned char start_data,Hdata,Ldata;
if(start==0)
start_data=0xf8; //写指令
else
start_data=0xfa; //写数据
Hdata=ddata&0xf0; //取高四位
Ldata=(ddata<<4)&0xf0; //取低四位
sendbyte(start_data); //发送起始信号
delay_ms(1); //延时
sendbyte(Hdata); //发送高四位
delay_ms(1);
sendbyte(Ldata); //发送低四位
delay_ms(1);
}
//***********一行显示8个汉字***********
//***************汉字显示***************
//***X为行Y为列,K为字的个数,*P为数组*
//*************************************
void chinese(uchar x,uchar y,uchar k,uchar *p)
{
uchar hang,out,i;
y=y-1;
switch(x)
{
case 1:hang=0x80;break;
case 2:hang=0x90;break;
case 3:hang=0x88;break;
case 4:hang=0x98;break;
}
out=hang+y;
write(0,out);
for(i=0;i<k*2;i++) {
write(1,*p);
p++;
}
//write(1,p);
}
//**********一行显示16个字母***********
//***********英文数字显示***************
//***X为行Y为列,K为字的个数,*P为数组*
//************************************
void english(uchar x,uchar y,uchar k,uchar *p)
{
uchar hang,out,i;
y=y-1;
switch(x)
{
case 1:hang=0x80;break;
case 2:hang=0x90;break;
case 3:hang=0x88;break;
case 4:hang=0x98;break;
}
out=hang+y;
write(0,out);
for(i=0;i<k;i++) {
write(1,*p);
p++;
}
}
void lcd_init()
{
write(0,0x30); //8位介面,基本指令集
write(0,0x0c); //显示打开,光标关,光标位置关
write(0,0x01); //清屏,将DDRAM地址计数器归零
delay_ms(10);
}
/*****************箭头指示*****************/
void zhishi(uchar a)
{
write(0,0x30); //8位介面,基本指令集
switch(a)
{
case 1:write(0,0x80);break;
case 2:write(0,0x90);break;
case 3:write(0,0x88);break;
case 4:write(0,0x98);break;
}
write(1,0x1a);
}
/*******************************反白1**************************
将128*64看做256*32,3.4行在1.2行右边
x0范围(0x80,0x80+16),x1范围(1,16)按字数算
y0范围(0x80,0x80+32),y1范围(1,32)按点数算
data1,data2写入0xff为反白,写入0x00为清零图片缓存
********************************************************************/
/*void fanbai(uchar data1,uchar data2,uchar x0,uchar y0,uchar x1,uchar y1)
{
uchar i,j;
for(j=0;j<y1;j++)
{
for(i=0;i<x1;i++)
{
write(0,0x34);
write(0,y0+j); //写y坐标
write(0,x0+i); //写x坐标
write(0,0x30);
write(1,data1);
write(1,data2);
}
}
write(0,0x36);
}
/*******************显示*******************************/
void display_start()
{
write(0,0x01);
english(2,1,15,table); //开始界面
}
void display_menu()
{
write(0,0x01);
english(1,1,15,table1);// 实时数据查看
english(2,1,15,table2);//上下限设置
}
/* void display_menu2()
{
write(0,0x01);
english(3,1,15,table1);// 实时数据查看
english(4,1,15,table2);//上下限设置
}*/
void display_mima()
{
write(0,0x01);
english(1,1,15,table16);//请输入密码:
}
void display_error()
{
write(0,0x01);
english(1,1,15,table17);//密码错误
english(3,1,15,table18);//请重新输入
}
void display1()
{
write(0,0x01);
english(2,1,15,table3);//光照
guang=1234;
write(0,0x93);
write(1,0x30+guang/10000);
write(1,0x30+guang/1000%10);
write(0,0x94);
write(1,0x30+guang/100%10);
write(1,0x30+guang/10%10);
write(0,0x95);
write(1,0x30+guang%10);
write(1,0x30);
write(0,0x96);
write(1,0x20);
write(1,0x4c);
write(0,0x97);
write(1,0x78);
}
void display2()
{
write(0,0x01);
english(2,1,15,table4);//风速
fengsu=1230;
write(0,0x93);
write(1,0x30+fengsu/1000);
write(1,0x30+fengsu/100%10);
write(0,0x94);
write(1,0x2e);
write(1,0x30+fengsu/10%10);
write(0,0x95);
write(1,0x30+fengsu%10);
write(0,0x96);
write(1,0x6d);
write(1,0x2f);
write(0,0x97);
write(1,0x73);
english(4,1,15,table5);//风向
fengxiang=1800;
write(0,0x9b);
write(1,0x30+fengxiang/1000);
write(1,0x30+fengxiang/100%10);
write(0,0x9c);
write(1,0x30+fengxiang/10%10);
write(1,0x2e);
write(0,0x9d);
write(1,0x30+fengxiang%10);
write(0,0x9e);
write(1,0xa1);
write(1,0xe3);
}
void display3()
{
write(0,0x01);
english(2,1,15,table6);//空气温度
wendu=120;
//wendu=0xfff0;
if(wendu<8000)
{
write(0,0x93);
write(1,0x30+wendu/100);
write(1,0x30+wendu/10%10);
write(0,0x94);
write(1,0x2e);
write(1,0x30+wendu%10);
write(0,0x96);
write(1,0xa1);
write(1,0xe6);
}
if(wendu>=8000)
{
wendu1=0xffff-wendu+1;
write(0,0x93);
write(1,0x2d);
write(1,0x30+wendu1/100);
write(0,0x94);
write(1,0x30+wendu1/10%10);
write(1,0x2e);
write(0,0x95);
write(1,0x30+wendu1%10);
write(1,0x20);
write(0,0x96);
write(1,0xa1);
write(1,0xe6);
}
english(4,1,15,table7);//空气湿度
shidu=120;
write(0,0x9b);
write(1,0x30+shidu/100);
write(1,0x30+shidu/10%10);
write(0,0x9c);
write(1,0x2e);
write(1,0x30+shidu%10);
write(0,0x9e);
write(1,0xa3);
write(1,0xa5);
}
void display4()
{
write(0,0x01);
english(2,1,15,table8);//土壤温度
//tuwen=120;
tuwen=0xfff0;
if(shidu<8000)
{
write(0,0x93);
write(1,0x30+tuwen/100);
write(1,0x30+tuwen/10%10);
write(0,0x94);
write(1,0x2e);
write(1,0x30+tuwen%10);
write(0,0x96);
write(1,0xa1);
write(1,0xe6);
}
if(tuwen>=8000)
{
tuwen1=0xffff-tuwen+1;
write(0,0x93);
write(1,0x2d);
write(1,0x30+tuwen1/100);
write(0,0x94);
write(1,0x30+tuwen1/10%10);
write(1,0x2e);
write(0,0x95);
write(1,0x30+tuwen1%10);
write(1,0x20);
write(0,0x96);
write(1,0xa1);
write(1,0xe6);
}
english(4,1,15,table9);//土壤湿度
tushi=210;
write(0,0x9b);
write(1,0x30+tushi/100);
write(1,0x30+tushi/10%10);
write(0,0x9c);
write(1,0x2e);
write(1,0x30+tushi%10);
write(0,0x9e);
write(1,0xa3);
write(1,0xa5);
}
void display5()
{
write(0,0x01);
english(1,1,15,table19);
english(2,1,15,table10);//小时雨量
yu_shi=120;
write(0,0x92);
write(1,0x30+yu_shi/100);
write(1,0x30+yu_shi/10%10);
write(0,0x93);
write(1,0x2e);
write(1,0x30+yu_shi%10);
write(0,0x95);
write(1,0x6d);
write(1,0x6d);
english(4,1,15,table11);//天雨量
yu_tian=2100;
write(0,0x9a);
write(1,0x30+yu_tian/1000);
write(1,0x30+yu_tian/100%10);
write(0,0x9b);
write(1,0x30+yu_tian/10%10);
write(1,0x2e);
write(0,0x9c);
write(1,0x30+yu_tian%10);
write(1,0x20);
write(0,0x9d);
write(1,0x6d);
write(1,0x6d);
}
void display6()
{
write(0,0x01);
english(1,1,15,table19);
english(2,1,15,table12);//月雨量
yu_yue=11110;
write(0,0x92);
write(1,0x30+yu_yue/10000);
write(1,0x30+yu_yue/1000%10);
write(0,0x93);
write(1,0x30+yu_yue/100%10);
write(1,0x30+yu_yue/10%10);
write(0,0x94);
write(1,0x2e);
write(1,0x30+yu_yue%10);
write(0,0x96);
write(1,0x6d);
write(1,0x6d);
english(4,1,15,table13);//年雨量
yu_nian=201422;
write(0,0x9a);
write(1,0x30+yu_nian/100000);
write(1,0x30+yu_nian/10000%10);
write(0,0x9b);
write(1,0x30+yu_nian/1000%10);
write(1,0x30+yu_nian/100%10);
write(0,0x9c);
write(1,0x30+yu_nian/10%10);
write(1,0x2e);
write(0,0x9d);
write(1,0x30+yu_nian%10);
write(0,0x9f);
write(1,0x6d);
write(1,0x6d);
}
void display1_1()
{
write(0,0x01);
english(1,1,15,table3);//光照
english(2,1,15,table15);//上限
english(3,1,15,table14);//下限
}
void display1_2()
{
write(0,0x01);
english(1,1,15,table4);//风速
english(2,1,15,table15);//上限
}
void display1_3()
{
write(0,0x01);
english(1,1,15,table6);//空气温度
english(2,1,15,table15);//上限
english(3,1,15,table14);//下限
}
void display1_4()
{
write(0,0x01);
english(1,1,15,table7);//空气湿度
english(2,1,15,table15);//上限
english(3,1,15,table14);//下限
}
void display1_5()
{
write(0,0x01);
english(1,1,15,table8);//土壤温度
english(2,1,15,table15);//上限
english(3,1,15,table14);//下限
}
void display1_6()
{
write(0,0x01);
english(1,1,15,table9);//土壤湿度
english(2,1,15,table15);//上限
english(3,1,15,table14);//下限
}
void display1_7()
{
write(0,0x01);
english(1,1,15,table19);//小时降雨
english(2,1,15,table10);//小时降雨
english(3,1,15,table15);//上限
}
void display1_8()
{
write(0,0x01);
english(2,1,15,table20);//设置成功
}
void anjian_wan()
{
if(key3==0)
{
delay_ms(50);
if(key3==0)
{
if(wan<9)
{
wan++;
}
}
while(!key3);
}
if(key2==0)
{
delay_ms(50);
if(key2==0)
{
if(wan>0)
{
wan--;
}
}
while(!key2);
}
}
void anjian_qian()
{
if(key3==0)
{
delay_ms(50);
if(key3==0)
{
if(qian<9)
{
qian++;
}
}
while(!key3);
}
if(key2==0)
{
delay_ms(50);
if(key2==0)
{
if(qian>0)
{
qian--;
}
}
while(!key2);
}
}
void anjian_bai()
{
if(key3==0)
{
delay_ms(50);
if(key3==0)
{
if(bai<9)
{
bai++;
}
}
while(!key3);
}
if(key2==0)
{
delay_ms(50);
if(key2==0)
{
if(bai>0)
{
bai--;
}
}
while(!key2);
}
}
void anjian_shi()
{
if(key3==0)
{
delay_ms(50);
if(key3==0)
{
if(shi<9)
{
shi++;
}
}
while(!key3);
}
if(key2==0)
{
delay_ms(50);
if(key2==0)
{
if(shi>0)
{
shi--;
}
}
while(!key2);
}
}
void anjian_ge()
{
if(key3==0)
{
delay_ms(50);
if(key3==0)
{
if(ge<9)
{
ge++;
}
}
while(!key3);
}
if(key2==0)
{
delay_ms(50);
if(key2==0)
{
if(ge>0)
{
ge--;
}
}
while(!key2);
}
}
void anjian_fuhao()
{
if((key3==0)||(bai==0))
{
delay_ms(50);
if((key3==0)||(bai==0))
{
bai=0x2b;
}
while(!key3);
}
if(key2==0)
{
delay_ms(50);
if(key2==0)
{
bai=0x2d;
}
while(!key2);
}
}
void main()
{
lcd_init();
//fanbai(0x00,0x00,0x80,0x80,16,32); //上电清空图片缓存
//lcd_init();
display_start();
while(1){
//key1确认键
if(key1==0)
{
delay_ms(50);
if(key1==0)
{
if(c<2)
{
c++;
}
if((c==1)&&(b==0))
{
display_menu();
zhishi(1);
b=1;
}
}
while(!key1);
}
//key4返回键
if(key4==0)
{
delay_ms(50);
if(key4==0)
{
yi=er=san=si=0;
write(0,0x0c); //关闭光标显示
b=0;
e=0;
f=0;
fanye2=0;
if(c>0)
{
c--;
}
if(c==1)
{
display_menu();
zhishi(1);
b=1;
}
if(c==0)
{
fanye=0;
display_start();
}
}
while(!key4);
}
//按键翻页
if(c==0)
{ //一级界面
if(key3==0)
{
delay_ms(50);
if(key3==0) //key3向右翻页
{
fanye++;
if(fanye>6)
{
fanye=6;
}
}
while(!key3);
if(fanye==1){display1();delay_ms(50);}
if(fanye==2){display2();delay_ms(50);}
if(fanye==3){display3();delay_ms(50);}
if(fanye==4){display4();delay_ms(50);}
if(fanye==5){display5();delay_ms(50);}
if(fanye==6){display6();delay_ms(50);}
}
if(key2==0)
{
delay_ms(50);
if(key2==0) //key2向左翻页
{
fanye--;
if(fanye<1)
{
fanye=1;
}
}
while(!key2);
if(fanye==6){display6();delay_ms(50);}
if(fanye==5){display5();delay_ms(50);}
if(fanye==4){display4();delay_ms(50);}
if(fanye==3){display3();delay_ms(50);}
if(fanye==2){display2();delay_ms(50);}
if(fanye==1){display1();delay_ms(50);}
}
}
//************菜单**************************/
if(c==1)
{
if(key3==0)
{
delay_ms(50);
if(key3==0)
{
if(b<2)
{
b++;
}
}
while(!key3);
if(b==1){display_menu();zhishi(1);delay_ms(50);}
if(b==2){display_menu();zhishi(2);delay_ms(50);}
/* if(b==3){display_menu();zhishi(3);delay_ms(50);}
if(b==4){display_menu();zhishi(4);delay_ms(50);}
if(b==5){display_menu2();zhishi(1);delay_ms(50);}
if(b==6){display_menu2();zhishi(2);delay_ms(50);}
if(b==7){display_menu2();zhishi(3);delay_ms(50);} */
}
if(key2==0)
{
delay_ms(50);
if(key2==0)
{
if(b>1)
{
b--;
}
}
while(!key2);
if(b==1){display_menu();zhishi(1);delay_ms(50);}
if(b==2){display_menu();zhishi(2);delay_ms(50);}
/* if(b==3){display_menu();zhishi(3);delay_ms(50);}
if(b==4){display_menu();zhishi(4);delay_ms(50);}
if(b==5){display_menu2();zhishi(1);delay_ms(50);}
if(b==6){display_menu2();zhishi(2);delay_ms(50);}
if(b==7){display_menu2();zhishi(3);delay_ms(50);} */
}
}
if((b==1)&&(key1==0)) //实时数据查看
{
delay_ms(50);
if(key1==0)
{
b=0;
c=0;
fanye=1;
display1();
}
while(!key1);
}
if((b==2)&&(e==0))
{
if(key1==0)
{
delay_ms(50);
if(key1==0)
{
display_mima(); //输入密码:1425
write(0,0x0f); //打开光标显示
write(0,0x8a);
e=1;
c=2;
delay_ms(50);
}
while(!key1);
}
}
if(e==1)
{
if(key3==0)
{
delay_ms(50);
if(key3==0)
{
if(yi<9)
{
yi++;
}
}
while(!key3);
}
if(key2==0)
{
delay_ms(50);
if(key2==0)
{
if(yi>0)
{
yi--;
}
}
while(!key2);
}
write(0,0x8a);
write(1,0x30+yi);
delay_ms(50);
if(key1==0)
{
delay_ms(50);
if(key1==0)
{
write(0,0x8b);
delay_ms(50);
e=2;
}
while(!key1);
}
}
if(e==2)
{
if(key3==0)
{
delay_ms(50);
if(key3==0)
{
if(er<9)
{
er++;
}
}
while(!key3);
}
if(key2==0)
{
delay_ms(50);
if(key2==0)
{
if(er>0)
{
er--;
}
}
while(!key2);
}
write(0,0x8b);
write(1,0x30+er);
delay_ms(50);
if(key1==0)
{
delay_ms(50);
if(key1==0)
{
write(0,0x8c);
delay_ms(50);
e=3;
}
while(!key1);
}
}
if(e==3)
{
if(key3==0)
{
delay_ms(50);
if(key3==0)
{
if(san<9)
{
san++;
}
}
while(!key3);
}
if(key2==0)
{
delay_ms(50);
if(key2==0)
{
if(san>0)
{
san--;
}
}
while(!key2);
}
write(0,0x8c);
write(1,0x30+san);
delay_ms(50);
if(key1==0)
{
delay_ms(50);
if(key1==0)
{
write(0,0x8d);
delay_ms(50);
e=4;
}
while(!key1);
}
}
if(e==4)
{
if(key3==0)
{
delay_ms(50);
if(key3==0)
{
if(si<9)
{
si++;
}
}
while(!key3);
}
if(key2==0)
{
delay_ms(50);
if(key2==0)
{
if(si>0)
{
si--;
}
}
while(!key2);
}
write(0,0x8d);
write(1,0x30+si);
delay_ms(50);
if(key1==0)
{
delay_ms(50);
if(key1==0)
{
write(0,0x0c); //关闭光标显示
if((yi==1)&&(er==4)&&(san==2)&&(si==5))//密码:1425
{
e=5;
}
if((yi!=1)||(er!=4)||(san!=2)||(si!=5))
{
display_error(); //密码错误
delay_ms(3000);
display_mima();
write(0,0x0f); //打开光标显示
write(0,0x8a);
delay_ms(50);
yi=er=san=si=0;
e=1;
}
}
while(!key1);
}
}
if((e==5)&&(fanye2==0))
{
if((b==2)&&(key1==0)) //上下限设置
{
delay_ms(50);
if(key1==0)
{
fanye2=1;
f=1;
display1_1();
write(0,0x93);
write(1,0x30+guang_shang/10000);
write(0,0x94);
write(1,0x30+guang_shang/1000%10);
write(0,0x95);
write(1,0x30+guang_shang/100%10);
write(0,0x96);
write(1,0x30+guang_shang/10%10);
write(0,0x97);
write(1,0x30+guang_shang%10);
write(0,0x8b);
write(1,0x30+guang_xia/10000);
write(0,0x8c);
write(1,0x30+guang_xia/1000%10);
write(0,0x8d);
write(1,0x30+guang_xia/100%10);
write(0,0x8e);
write(1,0x30+guang_xia/10%10);
write(0,0x8f);
write(1,0x30+guang_xia%10);
write(0,0x0f); //打开光标显示
write(0,0x93);
}
while(!key1);
}
}
if(fanye2==1) //光照
{
if(f==1) //光照上限万位
{
if(g==0)
{
wan=guang_shang/10000;
g=1;
}
anjian_wan();
write(0,0x93);
write(1,0x30+wan);
if(key1==0)
{
delay_ms(50);
if(key1==0)
{
write(0,0x94);
f=2;
g=0;
}
while(!key1);
}
}
if(f==2) //光照上限千位
{
if(g==0)
{
qian=guang_shang/1000%10;
g=1;
}
anjian_qian();
write(0,0x94);
write(1,0x30+qian);
if(key1==0)
{
delay_ms(50);
if(key1==0)
{
write(0,0x95);
f=3;
g=0;
}
while(!key1);
}
}
if(f==3) //光照上限百位
{
if(g==0)
{
bai=guang_shang/100%10;
g=1;
}
anjian_bai();
write(0,0x95);
write(1,0x30+bai);
if(key1==0)
{
delay_ms(50);
if(key1==0)
{
write(0,0x96);
f=4;
g=0;
}
while(!key1);
}
}
if(f==4) //光照上限十位
{
if(g==0)
{
shi=guang_shang/10%10;
g=1;
}
anjian_shi();
write(0,0x96);
write(1,0x30+shi);
if(key1==0)
{
delay_ms(50);
if(key1==0)
{
write(0,0x97);
f=5;
g=0;
}
while(!key1);
}
}
if(f==5) //光照上限个位
{
if(g==0)
{
ge=guang_shang%10;
g=1;
}
anjian_ge();
write(0,0x97);
write(1,0x30+ge);
if(key1==0)
{
delay_ms(50);
if(key1==0)
{
guang_shang=wan*10000+qian*1000+bai*100+shi*10+ge;//光照上限
wan=qian=bai=shi=ge=0;
write(0,0x8b);
f=6;
g=0;
}
while(!key1);
}
}
if(f==6) //光照下限万位
{
if(g==0)
{
wan=guang_xia/10000;
g=1;
}
anjian_wan();
write(0,0x8b);
write(1,0x30+wan);
if(key1==0)
{
delay_ms(50);
if(key1==0)
{
write(0,0x8c);
f=7;
g=0;
}
while(!key1);
}
}
if(f==7) //光照下限千位
{
if(g==0)
{
qian=guang_xia/1000%10;
g=1;
}
anjian_qian();
write(0,0x8c);
write(1,0x30+qian);
if(key1==0)
{
delay_ms(50);
if(key1==0)
{
write(0,0x8d);
f=8;
g=0;
}
while(!key1);
}
}
if(f==8) //光照下限百位
{
if(g==0)
{
bai=guang_xia/100%10;
g=1;
}
anjian_bai();
write(0,0x8d);
write(1,0x30+bai);
if(key1==0)
{
delay_ms(50);
if(key1==0)
{
write(0,0x8e);
f=9;
g=0;
}
while(!key1);
}
}
if(f==9) //光照下限十位
{
//标志位g
anjian_shi();
write(0,0x8e);
write(1,0x30+shi);
if(key1==0)
{
delay_ms(50);
if(key1==0)
{
write(0,0x8f);
f=10;
}
while(!key1);
}
}
if(f==10) //光照下限个位
{
anjian_ge();
write(0,0x8f);
write(1,0x30+ge);
if(key1==0)
{
delay_ms(50);
if(key1==0)
{
guang_xia=wan*10000+qian*1000+bai*100+shi*10+ge;//光照下限
wan=qian=bai=shi=ge=0;
fanye2=2;
write(0,0x0c); //关闭光标显示
display1_2(); //风速
write(0,0x93);
write(1,0x30+feng_shang/10);
write(0,0x94);
write(1,0x30+feng_shang%10);
f=1;
write(0,0x0f); //打开光标显示
write(0,0x93);
}
while(!key1);
}
}
}
if(fanye2==2) //风速
{
if(f==1) //风速上限十位
{
anjian_shi();
write(0,0x93);
write(1,0x30+shi);
if(key1==0)
{
delay_ms(50);
if(key1==0)
{
write(0,0x94);
f=2;
}
while(!key1);
}
}
if(f==2) //风速上限个位
{
anjian_ge();
write(0,0x94);
write(1,0x30+ge);
if(key1==0)
{
delay_ms(50);
if(key1==0)
{
feng_shang=shi*10+ge; //风速上限
shi=ge=0;
fanye2=3;
write(0,0x0c); //关闭光标显示
display1_3(); //温度
write(0,0x94);
write(1,0x30+wendu_shang/10);
write(0,0x95);
write(1,0x30+wendu_shang%10);
write(0,0x8c);
write(1,0x30+wendu_xia/10);
write(0,0x8d);
write(1,0x30+wendu_xia%10);
f=1;
write(0,0x0f); //打开光标显示
write(0,0x93);
}
while(!key1);
}
}
}
if(fanye2==3) //温度
{
if(f==1) //温度上限符号
{
anjian_fuhao();
write(0,0x93);
write(1,bai);
if(key1==0)
{
delay_ms(50);
if(key1==0)
{
write(0,0x94);
f=2;
}
while(!key1);
}
}
if(f==2) //温度上限十位
{
anjian_shi();
write(0,0x94);
write(1,0x30+shi);
if(key1==0)
{
delay_ms(50);
if(key1==0)
{
write(0,0x95);
f=3;
}
while(!key1);
}
}
if(f==3) //温度上限个位
{
anjian_ge();
write(0,0x95);
write(1,0x30+ge);
if(key1==0)
{
delay_ms(50);
if(key1==0)
{
wendu_shang=shi*10+ge; //温度上限
bai=shi=ge=0;
write(0,0x8b);
f=4;
}
while(!key1);
}
}
if(f==4) //温度下限符号
{
anjian_fuhao();
write(0,0x8b);
write(1,bai);
if(key1==0)
{
delay_ms(50);
if(key1==0)
{
write(0,0x8c);
f=5;
}
while(!key1);
}
}
if(f==5) //温度下限十位
{
anjian_shi();
write(0,0x8c);
write(1,0x30+shi);
if(key1==0)
{
delay_ms(50);
if(key1==0)
{
write(0,0x8d);
f=6;
}
while(!key1);
}
}
if(f==6) //温度下限个位
{
anjian_ge();
write(0,0x8d);
write(1,0x30+ge);
if(key1==0)
{
delay_ms(50);
if(key1==0)
{
wendu_xia=shi*10+ge; //温度下限
bai=shi=ge=0;
fanye2=4;
write(0,0x0c); //关闭光标显示
display1_4(); //湿度
write(0,0x93);
write(1,0x30+shidu_shang/10);
write(0,0x94);
write(1,0x30+shidu_shang%10);
write(0,0x8b);
write(1,0x30+shidu_xia/10);
write(0,0x8c);
write(1,0x30+shidu_xia%10);
f=1;
write(0,0x0f); //打开光标显示
write(0,0x93);
}
while(!key1);
}
}
}
if(fanye2==4) //湿度
{
if(f==1) //湿度上限十位
{
anjian_shi();
write(0,0x93);
write(1,0x30+shi);
if(key1==0)
{
delay_ms(50);
if(key1==0)
{
write(0,0x94);
f=2;
}
while(!key1);
}
}
if(f==2) //湿度上限个位
{
anjian_ge();
write(0,0x94);
write(1,0x30+ge);
if(key1==0)
{
delay_ms(50);
if(key1==0)
{
shidu_shang=shi*10+ge; //湿度上限
shi=ge=0;
write(0,0x8b);
f=3;
}
while(!key1);
}
}
if(f==3) // 湿度下限十位
{
anjian_shi();
write(0,0x8b);
write(1,0x30+shi);
if(key1==0)
{
delay_ms(50);
if(key1==0)
{
write(0,0x8c);
f=4;
}
while(!key1);
}
}
if(f==4) //湿度下限个位
{
anjian_ge();
write(0,0x8c);
write(1,0x30+ge);
if(key1==0)
{
delay_ms(50);
if(key1==0)
{
shidu_xia=shi*10+ge; //湿度下限
shi=ge=0;
fanye2=5;
write(0,0x0c); //关闭光标显示
display1_5(); //土温
write(0,0x94);
write(1,0x30+tuwen_shang/10);
write(0,0x95);
write(1,0x30+tuwen_shang%10);
write(0,0x8c);
write(1,0x30+tuwen_xia/10);
write(0,0x8d);
write(1,0x30+tuwen_xia%10);
write(0,0x0f); //打开光标显示
write(0,0x93);
f=1;
}
while(!key1);
}
}
}
if(fanye2==5) //土温
{
if(f==1) //土温上限符号
{
anjian_fuhao();
write(0,0x93);
write(1,bai);
if(key1==0)
{
delay_ms(50);
if(key1==0)
{
write(0,0x94);
f=2;
}
while(!key1);
}
}
if(f==2) //土温上限十位
{
anjian_shi();
write(0,0x94);
write(1,0x30+shi);
if(key1==0)
{
delay_ms(50);
if(key1==0)
{
write(0,0x95);
f=3;
}
while(!key1);
}
}
if(f==3) //土温上限个位
{
anjian_ge();
write(0,0x95);
write(1,0x30+ge);
if(key1==0)
{
delay_ms(50);
if(key1==0)
{
tuwen_shang=shi*10+ge; //土温上限
bai=shi=ge=0;
write(0,0x8b);
f=4;
}
while(!key1);
}
}
if(f==4) //土温下限符号
{
anjian_fuhao();
write(0,0x8b);
write(1,bai);
if(key1==0)
{
delay_ms(50);
if(key1==0)
{
write(0,0x8c);
f=5;
}
while(!key1);
}
}
if(f==5) //土温下限十位
{
anjian_shi();
write(0,0x8c);
write(1,0x30+shi);
if(key1==0)
{
delay_ms(50);
if(key1==0)
{
write(0,0x8d);
f=6;
}
while(!key1);
}
}
if(f==6) //土温下限个位
{
anjian_ge();
write(0,0x8d);
write(1,0x30+ge);
if(key1==0)
{
delay_ms(50);
if(key1==0)
{
tuwen_xia=shi*10+ge; //土温下限
bai=shi=ge=0;
fanye2=6;
write(0,0x0c); //关闭光标显示
display1_6(); //土湿
write(0,0x93);
write(1,0x30+tushi_shang/10);
write(0,0x94);
write(1,0x30+tushi_shang%10);
write(0,0x8b);
write(1,0x30+tushi_xia/10);
write(0,0x8c);
write(1,0x30+tushi_xia%10);
f=1;
write(0,0x0f); //打开光标显示
write(0,0x93);
}
while(!key1);
}
}
}
if(fanye2==6) //土湿
{
if(f==1) //土湿上限十位
{
anjian_shi();
write(0,0x93);
write(1,0x30+shi);
if(key1==0)
{
delay_ms(50);
if(key1==0)
{
write(0,0x94);
f=2;
}
while(!key1);
}
}
if(f==2) //土湿上限个位
{
anjian_ge();
write(0,0x94);
write(1,0x30+ge);
if(key1==0)
{
delay_ms(50);
if(key1==0)
{
tushi_shang=shi*10+ge; //土湿上限
shi=ge=0;
write(0,0x8b);
f=3;
}
while(!key1);
}
}
if(f==3) //土湿下限十位
{
anjian_shi();
write(0,0x8b);
write(1,0x30+shi);
if(key1==0)
{
delay_ms(50);
if(key1==0)
{
write(0,0x8c);
f=4;
}
while(!key1);
}
}
if(f==4) //土湿下限个位
{
anjian_ge();
复制代码
程序4.zip
2018-7-19 16:44 上传
点击文件名下载附件
113.89 KB, 下载次数: 30
12864
作者:
一袋天骄
时间:
2018-7-19 16:52
水平有限,stc89c52rc的8k内存写满了,功能还不完善,不知道有没有大神指点一下怎么优化一下
作者:
一袋天骄
时间:
2018-7-19 17:36
程序没写完,占不下了,不过下面基本都是一种方法写的
作者:
ttaniscy
时间:
2018-12-24 17:18
谢谢LZ的分享
作者:
robinsonlin
时间:
2018-12-24 19:04
这个好,正是我想要的。不过代码的效率可能有点低,等我看完了,看看能不能优化一下算法。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1