📄 c51.c
字号:
#include <reg51.h>
#include <intrins.h>
#include <absacc.h>
#include "adc0831.h"
#include "Serialint.h"
#include "LCD7565R.h"
#define uchar unsigned char
#define uint unsigned int
uchar starttime[6]={0x08,0x0a,0x16,0x1e,0x00,0x02};
uchar sec100=0;sec=0,hour=0;
uchar Watertemp[4]={0x50,0x32,0x00,0x0a};
uchar codews,hotws,codewd,hotwd;
uchar WTFLG=0,keyvalue=0;
//void Watertset();
//uchar idata disbuff[16];
sbit key1= P3^2;
sbit key2= P3^3;
sbit key3= P3^4;
sbit key4= P3^5;
void PanduanFlage0(uchar f)
{
if(ID==f) Fx_flage=0;
else Fx_flage=1;
}
void Mnue()
{
PanduanFlage0(0);
disp_str("进行A/D转换",0,0);
PanduanFlage0(1);
disp_str("进行串口通讯",0,2);
PanduanFlage0(2);
disp_str("温度设置",0,4);
PanduanFlage0(3);
disp_str("香水喷洒时间设置",0,6);
//disp_str("密码设置",0,6);
}
void Mnue0()
{ EA=0;
Clear();
disp_str("退出",102,6);
while (key3==1)
ADchange();
Clear();
Mnue();
EA=1;
}
void Mnue1()
{
EA=0;
Clear();
Serialint();
disp_str("进行串口通讯",15,0);
disp_str("退出",102,6);
while (key3==1)
{
disp_str("AB123",20,3);
send_string_com("123AB",16);
send_char_com(0x0d);
send_char_com(0x0a);
}
Clear();
Mnue();
EA=1;
}
/************************water set progremm****************/
void dispwatert(uchar wt,xl,yl)
{
b1 = wt/100+48;
b2 = (wt%100)/10+48;
b3 = (wt%100)%10+48;
if(b1==48 && xl==112)
{
disp_ch(b2,xl,yl);
disp_ch(b3,xl+8,yl);
}
if(xl==25)
{
if(b1==48)
{
disp_ch(b2,xl,yl);
disp_ch(b3,xl+8,yl);
Fx_flage=1;
disp_ch(32,xl+16,yl);
}
else
{
disp_ch(b1,xl,yl);
disp_ch(b2,xl+8,yl);
disp_ch(b3,xl+16,yl);
}
}
}
void Watertfset(uchar f)
{
if(f==WTFLG) Fx_flage=0;
else Fx_flage=1;
}
void Watertset()
{
Watertfset(0);
dispwatert(hotws,25,2);
Watertfset(1);
dispwatert(hotwd,25,4);
Watertfset(2);
dispwatert(codews,112,2);
Watertfset(3);
dispwatert(codewd,112,4);
Watertfset(4);
disp_str("保存",24,6);
Watertfset(5);
disp_str("退出",74,6);
}
void keyscan(uchar keyv,full)
{
keyvalue=keyv;
while(key4==1)
{
Watertset();
if(key1==0)
{
while(key1==0);
if(keyvalue<full) keyvalue++;
else keyvalue=0;
}
if(key2==0)
{
while(key2==0);
if(keyvalue>0) keyvalue--;
else keyvalue=full;
}
if(full==6)
WTFLG=keyvalue;
else
switch(WTFLG)
{
case 0: hotws=keyvalue;break;
case 1: hotwd=keyvalue; break;
case 2: codews=keyvalue;break;
case 3: codewd=keyvalue;break;
}
// Watertset();
}
while(key4==0);
}
void Mnue2()
{ //uchar d1=0;
EA=0;
Clear();
WTFLG=0;
Fx_flage=1;
hotws= Watertemp[0];hotwd=Watertemp[1];
codews=Watertemp[2];codewd=Watertemp[3];
disp_str("热水",8,0);
disp_str("设置",0,2);
disp_str("当前",0,4);
disp_str("冷水",96,0);
disp_str("设置",80,2);
disp_str("当前",80,4);
disp_ch(45,104,2);
disp_ch(45,104,4);
Watertset();
while (key3==1)
{
Watertset();
keyscan(WTFLG,6);
switch(WTFLG)
{
case 0:
keyscan(hotws,100);
break;
case 1:
keyscan(hotwd,100);
break;
case 2:
keyscan(codews,100);
break;
case 3:
keyscan(codewd,100);
break;
case 4:
Watertemp[0]=hotws;Watertemp[1]=hotwd;
Watertemp[2]=codews;Watertemp[3]=codewd;
goto waterover;
case 5: goto waterover;
// default: break;
}
while(key4==0);
}
waterover:
Clear();
Mnue();
EA=1;
}
/*******************************////////////////////////
void disptime(uchar f)
{
if(f==1) Fx_flage=0;
else Fx_flage=1;
b1 = hour/10+48;
b2 = hour%10+48;
disp_ch(b1,40,4);
disp_ch(b2,48,4);
if(f==0) Fx_flage=0;
else Fx_flage=1;
b1 = sec/10+48;
b2 = sec%10+48;
disp_ch(b1,64,4);
disp_ch(b2,72,4);
}
void timer0() interrupt 1
{
// EA=0;
TH0=0x3c; //Timer0置50ms定时初值dc00H(2^16=65536D,dc00H=56320D)
TL0=0xb0; //定时时间=(65536-50000)*(1/12)*12=50ms (f0=11.0592Mhz)
sec100++;
if(sec100 >= 5) //1秒时间 (100*10ms=1000ms=1s)
{sec100 = 0;
if(sec<59) sec++;
else
{sec=0;if(hour<23) hour++;
else hour=0;
}
}
disptime(2);
// EA=1;
}
void PanduanFlage1(uchar f)
{
if(ID0==f) Fx_flage=0;
else Fx_flage=1;
}
void Funcmnue()
{
PanduanFlage1(0);
disp_str("开始",5,0);
PanduanFlage1(1);
disp_str("停止",45,0);
PanduanFlage1(2);
disp_str("间隔",85,0);
PanduanFlage1(3);
disp_str("喷洒数",85,2);
PanduanFlage1(4);
disp_str("开",5,2);
PanduanFlage1(5);
disp_str("停",5,4);
Fx_flage=1;
disp_str(":",56,4);
PanduanFlage1(6);
disp_str("退出",102,6);
}
void Functionselection(uchar keyv,full)
{
keyvalue=keyv;
while(key4==1)
{
if(key1==0)
{
while(key1==0);
if(keyvalue<full) keyvalue++;
else keyvalue=0;
}
if(key2==0)
{
while(key2==0);
if(keyvalue>0) keyvalue--;
else keyvalue=full;
}
if(full==2)
{ IDF=keyvalue;disptime(IDF);}
if(full==6)
{ ID0=keyvalue;Funcmnue();disptime(2);}
else
{
if(full==59)
sec=keyvalue;
if(full==23)
hour=keyvalue;
disptime(IDF);
}
}
while(key4==0);
}
void time0int()
{
EA=0;
TMOD= 0x01;
TL0 = 0X3c;
TH0 = 0Xb0;
EX0=0;
EX1=0;
ET0 = 1;
TR0 = 1;
EA = 1;
}
void timesec()
{
while(IDF!=2)
{
Functionselection(IDF,2);
if(IDF==1) Functionselection(hour,23);
if(IDF==0) Functionselection(sec,59);
}
IDF=0;
}
void Mnue3()
{
EA=0;
Clear();
Funcmnue();
while (key3==1)
{
Functionselection(ID0,6);
switch(ID0)
{
case 0 :hour=starttime[0]; sec=starttime[1];disptime(2);timesec();starttime[0]=hour;starttime[1]=sec;break;
case 1 :hour=starttime[2]; sec=starttime[3];disptime(2);timesec();starttime[2]=hour;starttime[3]=sec;break;
case 2 :hour=starttime[4]; sec=starttime[5];disptime(2);timesec();starttime[4]=hour;starttime[5]=sec;break;
case 3 :disptime(0);goto Timeover; break;
case 4 :time0int();
while(key3==1)
{disptime(2);Functionselection(ID0,6);}
goto Timeover;break;
case 5 :goto Timeover; break;
case 6 : goto Timeover; break;
}
}
while(key3==0);
Timeover:
Clear();
Mnue();
EA=1;
}
void Scankey1() interrupt 0
{
if(key1==0)
{
while (key1==0);
if(ID<4)
ID+=1;
else ID=0;
Mnue();
}
}
void Scankey2() interrupt 2
{
if(key2==0)
{
while (key1==0);
if(ID>0)
ID-=1;
else ID=3;
Mnue();
}
}
void show_ad(void)
{
disp_ch(b1,0,0);
disp_ch(b2,8,0);
disp_ch(b3,16,0);
}
void ADchange()
{
b3 = readadc();
b1 = b3/100+48;
b2 = (b3%100)/10+48;
b3 = (b3%100)%10+48;
show_ad();
}
void main()
{
LcdInit();
// TMOD=0X01;
EA=1;
EX0=1;
EX1=1;
Mnue();
while(1)
{
if(key4==0)
{
switch(ID)
{
case 0:Mnue0();break;
case 1:Mnue1();break;
case 2:Mnue2();break;
case 3:Mnue3();break;
}
}
}
}
void Delayms(uint ms)
{
uchar j;
while(ms--)
for(j=0;j<=20;j++);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -