📄 lcdtst.c
字号:
}
}
void dis_adjweek()
{ lcdcls();
showhz(2,0x00,3);//设
showhz(2,0x10,4);//置
showhz(2,0x20,1);//星
showhz(2,0x30,2);//期
showchar(2,0x40,0x3a);//:
showhz(4,0x30,1);//星
showhz(4,0x40,2);//期
showcharf(4,0x50,0x30+(temp1&0x0f));
}
void dis_adjbote()
{ lcdcls();
showhz(1,0x00,14);//波
showhz(1,0x10,15);//特
showhz(1,0x20,16);//率
showhz(1,0x30,20);//为
showchar(1,0x40,0x3a);//:
showchar(3,0x10,0x39);//
showchar(3,0x18,0x36);//
showchar(3,0x20,0x30);//
showchar(3,0x28,0x30);//
showchar(3,0x30,0x20);//
showchar(3,0x38,0x42);//B
showchar(5,0x10,0x34);//
showchar(5,0x18,0x38);//
showchar(5,0x20,0x30);//
showchar(5,0x28,0x30);//
showchar(5,0x30,0x20);//
showchar(5,0x38,0x42);//B
if (flag_1==0)
{showhz(3,0x00,21);
showhz(5,0x00,22);
}
else
{showhz(3,0x00,22);
showhz(5,0x00,21);
}
}
//显示电压,临时函数,调试用
void disvoltage()
{
showchar(2,0x50,0x30+voltage1);//
showchar(2,0x58,0x2e);//.
showchar(2,0x60,0x30+voltage2);//
showchar(2,0x68,0x30+voltage3);//
}
//延迟函数
delay10ms()
{ uchar i,j;
for(j=0;j<25;j++)
{
for(i=0;i<255;i++)
{nop;
nop;
nop;
nop;
nop;
nop;
}
}
}
void main()
{
//液晶初始化:
initlcd();
//7289初始化:
clk = 0;
cs = 1;
//ds12887初始化:
ds_areg=0x20;
ds_breg=0x02;//BCD显示,24小时进制
//开中断:
EA = 1;
ES = 1;
EX0 = 1;
PX0 = 1;
IT0 = 1; //下降沿触发外部中断
EX1 = 1;
IT1 = 1;
PX1 = 0;
//设置串行通信控制寄存器
SCON = 0x50; //方式1,不允许多级通信,允许接收
//设置定时器T1
TMOD = 0xd0;//定时器1工作在模式1,受int1控制,计数方式。
TH1 = 0x00;
TL1 = 0x00;
TR1 = 1;
//设置定时器,设置波特率
T2CON = 0x34; //设置定时器2为波特率发生器
TH2 = 0xff;
TL2 = 0xd9;
RCAP2H = 0xff;
RCAP2L = 0xd9; //设置波特率为9600
//状态和标志位清零
state = 0;
state_s = 0;
flag = 0;
//报警温度初始化
tem_alm = 0x35;
tem = 0x34;
//设置时间
/* settime();
setdate();
setweek(); */
while(1)
{
while((ds_creg & 0x10)==0)
{//nop;
if (flag_3 ==1&&flag_5==1) /*如果有新温度数据要传送,且允许传送,则传送*/
{SBUF= tem; /*传送完毕会产生中断,所以需要在发送中断中*/
flag_5 =0; /*清标志位,否则一直产生中断,程序不能正常运行*/
}
}
if (state == 0)
{flag_4 = 1;
EX0 = 0;
EX1 = 0;
dis_main();
flag_4 = 0;
if (flag_0 ==1&&tem>tem_alm)
{ if(flag_6 ==0)
{ flag_3 = 0;
SBUF = 0xff;}
}
else
flag_6 = 0;
EX0 = 1;
EX1 = 1;
}
}
}
//外部中断1,7135busy触发
void int1() interrupt 2
{
/*uint n;
float x;
EX1 = 0;
n = TH1;
n = n<<8;
n = n+TL1;
n = n-10000;
x = n/10000.0;
voltage1 = (uchar)x;
x = (x-voltage1)*10;
voltage2 = (uchar)x;
x = (x-voltage2)*10;
voltage3 = (uchar)x;
if(state == 0)
{ EX0 = 0;
disvoltage();
EX0 =1;
}
TH1 = 0x00;
TL1 = 0x00;
EX1 = 1;*/
uint n;
uchar x;
uchar y;
uchar x1,y1,x2,y2;
n = TH1<<8;
n = n+TL1;
n = n-10000;
x = n>>8;
y = n&0x00ff;
x1 = x>>4;
x2 = x&0x0f;
y1 = y>>4;
y2 = y&0x0f;
if(x1>9)
x1= x1+7;
if(x2>9)
x2= x2+7;
if(y1>9)
y1= y1+7;
if(y2>9)
y2= y2+7;
if(state ==0)
{EX0 = 0;
showchar(2,0x50,0x30+x1);
showchar(2,0x58,0x30+x2);
showchar(2,0x60,0x30+y1);
showchar(2,0x68,0x30+y2);
EX0 = 1;
}
tem = ((0x30+y1)<<4)+ 0x30+y2;
flag_5 = 1;
TH1 = 0;
TL1 = 0;
}
//串口中断
void serial() interrupt 4
{
uchar s_data;
if(RI == 1)
{ RI = 0;
s_data = SBUF;
switch(state_s)
{case 0x00: switch(s_data)
{case 0x11: state_s = 1;
break;
case 0x22: state_s = 2;
break;
case 0x33: state_s = 3;
break;
case 0x44: state_s = 4;
break;
case 0x55: flag_3 = 1;
SBUF = tem;
flag_5 = 0;
break;
case 0x66: flag_3 = 0;
break;
case 0x77: flag_6 = 1;
break;
default: break;
}
break;
case 0x01: temp1 = s_data;
state_s = 0x11;
break;
case 0x11: temp2 = s_data;
state_s = 0x21;
break;
case 0x21: temp3 = s_data;
state_s = 0x00;
settime(temp1,temp2,temp3);
break;
case 0x02: temp1 = s_data;
state_s = 0x12;
break;
case 0x12: temp2 = s_data;
state_s = 0x22;
break;
case 0x22: temp3 = s_data;
state_s = 0x00;
setdate(temp1,temp2,temp3);
break;
case 0x03: temp1 = s_data;
state_s = 0x00;
setweek(temp1);
break;
case 0x04: temp1 = s_data;
state_s = 0x00;
tem_alm = temp1;
break;
default :break;
}
}
if(TI ==1)
{TI = 0;
/*if(flag_3==1&&flag_5 ==1)
{
SBUF = tem;
flag_5 = 0;
}*/
}
}
//外部中断1,键盘中断
void int0() interrupt 0
{
uchar data key_value;
key_value = getkey();
delay10ms();
switch (state)
{case 0x00: if (key_value == OK)
{ state = 1;
dismenu(1);
}
break;
case 0x01: switch(key_value)
{case CANCEL: state = 0;
dis_main();
break;
case DOWN: state = 2;
dismenu(2);
break;
case UP: state = 4;
dismenu(4);
break;
case OK:
case ONE: state = 5;
dis_adjmenu(1);//显示时间调整选择菜单
break;
case TWO: state = 2;
flag_0 =! flag_0;
dismenu(2);
break;
case THREE: state = 8;
dis_adjtem(1);
t_temalm = tem_alm;
break;
case FOUR: state = 9;
flag_2 = flag_1;
dis_adjbote();
break;
default: break;
}
break;
case 0x02: switch(key_value)
{case CANCEL: state = 0;
dis_main();
break;
case DOWN: state = 3;
dismenu(3);
break;
case UP: state = 1;
dismenu(1);
break;
case OK:
case TWO: flag_0 =! flag_0;
dismenu(2);
state = 2;
break;
case ONE: state = 5;
dis_adjmenu(1);//显示时间调整选择菜单
break;
case THREE: state = 8;
dis_adjtem(1);
t_temalm = tem_alm;
break;
case FOUR: state = 9;
flag_2 = flag_1;
dis_adjbote();
break;
default: break;
}
break;
case 0x03: switch(key_value)
{case CANCEL: state = 0;
dis_main();
break;
case DOWN: state = 4;
dismenu(4);
break;
case UP: state = 2;
dismenu(2);
break;
case OK:
case THREE: state = 8;
dis_adjtem(1);
t_temalm = tem_alm;
break;
case ONE: state = 5;
dis_adjmenu(1);//显示时间调整选择菜单
break;
case TWO: flag_0 =! flag_0;
dismenu(2);
state = 2;
break;
case FOUR: state = 9;
flag_2 = flag_1;
dis_adjbote();
break;
default: break;
}
break;
case 0x04: switch(key_value)
{case CANCEL: state = 0;
dis_main();
break;
case DOWN: state = 1;
dismenu(1);
break;
case UP: state = 3;
dismenu(3);
break;
case OK:
case FOUR: state = 9;
flag_2 = flag_1;
dis_adjbote();
break;
case ONE: state = 5;
dis_adjmenu(1);//显示时间调整选择菜单
break;
case TWO: flag_0 =! flag_0;
dismenu(2);
state = 2;
break;
case THREE: state = 8;
dis_adjtem(1);
t_temalm = tem_alm;
break;
default: break;
}
break;
case 0x05: switch(key_value)
{case CANCEL: state = 1;
dismenu(1);
break;
case DOWN: state = 0x06;
dis_adjmenu(2);
break;
case UP: state = 0x07;
dis_adjmenu(3);
break;
case OK:
case ONE: state = 0x0a;
temp1 = ds_year;
temp2 = ds_month;
temp3 = ds_daymonth;
dis_adjdate(1);
break;
case 2: state = 0x0b;
temp1 = ds_hour;
temp2 = ds_minute;
temp3 = ds_second;
dis_adjtime(1);
break;
case 3: state = 0x0c;
temp1 = ds_dayweek;
dis_adjweek();
break;
default: break;
}
break;
case 0x06: switch(key_value)
{case CANCEL: state = 1;
dismenu(1);
break;
case DOWN: state = 0x07;
dis_adjmenu(3);
break;
case UP: state = 0x05;
dis_adjmenu(1);
break;
case OK:
case TWO: state = 0x0b;
temp1 = ds_hour;
temp2 = ds_minute;
temp3 = ds_second;
dis_adjtime(1);
break;
case 1: state = 0x0a;
temp1 = ds_year;
temp2 = ds_month;
temp3 = ds_daymonth;
dis_adjdate(1);
break;
case 3: state = 0x0c;
temp1 = ds_dayweek;
dis_adjweek();
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -