本人新手,C语言基础较差,最近设计一个红外防盗系统,要求加时钟显示时间和报警时段,然后自己通过仿真分别实现了红外防盗和时钟显示(报警时段还有纰漏),但是整合成一个的时候1602显示屏无法显示,因为水平较差,自己一个人难有进展,下面贴程序和仿真情况,请教各位大佬,希望能得到指导。
下面是两个程序的整合,希望大佬稍微指导一下
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit huang=P2^0;//??
sbit lv=P2^2;//??
sbit hong=P2^4;//??
sbit hongwai=P1^0;//???
sbit butter=P2^6;//??????????
sbit baojing=P1^2;//??????;
sbit bufang=P1^3;//????
sbit quxiao=P1^4;//????
sbit lcdrs=P1^5;
sbit lcden=P1^6;
uchar tt=0;//?????
uchar num=0;//???????
uchar flag=0;//???
uchar count,s1num,s4num;
char miao,shi,fen;
void timer1init(void)//???1,16???2
{ EA=0;
TMOD=0x11;//?????0?????1
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
ET0=1;//????0??
TR0=1;//?????0
tt=0;//
EA=0;//????
}
void delay(uint z)//????
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main()//???
{
huang=0;//?????
lv=0;//?????
hong=0;//?????
timer1init();//??????
while(1)
{
if(!baojing)//??????????
{
delay(5);//????
if(!baojing)//???????????
{
hong=1;//???
lv=0; //???
flag=7;//?????7
butter=0;//????
EA=0;//???
}
while(!baojing);//?????????
delay(5);//????????
while(!baojing);//???????
}
if((!bufang)&&(flag<4))//????????????????????
{
delay(5);//????
if(!bufang)//???????
{
EA=1; //????
flag=2;//?=2
}
while(!bufang);//????????
delay(5);//??
while(!bufang);//?????
}
if(!quxiao)//???????
{
delay(5);//????
if(!quxiao)//????????
{
flag=3;//FLAG??3
butter=1;//?????
tt=0;//
num=0;//????0
EA=0;//???
lv=0;//???
hong=0;//???
}
while(!quxiao);//??????
delay(5);//????
while(!quxiao);//??????
}
if(flag==4)//???????
{
tt=0;//????0
EA=0;//???
num=0;//??????
lv=1;//???
flag=5;//flag??5
}
if(hongwai)//?????????
huang=1;
else huang=0;//????????
if(flag==5)//??flag??5
{
if(hongwai)//??????
{
butter=0;//????
EA=1;//???
}
}
}
}
void write_com(uchar com)//???????
{
lcdrs=0;
lcden=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_date(uchar date)//???????
{
lcdrs=1;
lcden=0;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_alarm(uchar add1,uchar date1)//??????
{
uchar shi,ge;
shi=date1/10;//????2????????
ge=date1%10;
write_com(0x80+add1);//??????
write_date(0x30+shi);//????????
write_date(0x30+ge);//????????
}
void write_sfm(uchar add,uchar date)//??????
{
uchar shi,ge;
shi=date/10;//????2????????
ge=date%10;
write_com(0x80+0x40+add);//??????
write_date(0x30+shi);//????????
write_date(0x30+ge);//????????
}
void init()//?????
{
lcden=0;
shi=21;
fen=59;
miao=58;
count=0;
s1num=0;
s4num=0;
write_com(0x38);//???1602??
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);//????????
delay(5);
write_com(0x80+0x40+6);//???????????":"
write_date(':');
delay(5);
write_com(0x80+0x40+9);
write_date(':');
delay(5);
write_sfm(10,miao);//????????
write_sfm(7,fen);
write_sfm(4,shi);
TMOD=0x01;//?????0????
TH0=(65536-50000)/256;//??????
TL0=(65536-50000)%256;
EA=1; //????
ET0=1; //????0??
TR0=1; //?????0
}
void printer()//???
{
init();//????????
while(1)//????????
{
if(hongwai==1)
{
delay(5);
write_com(0x80+3);
write_date('*');
delay(5);
write_com(0x80+6);
write_date(':');
delay(5);
write_com(0x80+9);
write_date(':');
delay(5);
write_com(0x80+12);
write_date('*');
delay(5);
write_alarm(4,shi);//????????
write_alarm(7,fen);
write_alarm(10,miao);
}
}
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
tt++;
if(tt==10)
{tt=0; num++;}
if((flag==5)&&(num%2==0))//??15????flag=5 ,num?????
hong=1;
if((flag==5)&&(num%2==1))//??15????flag=5 ,num?????
hong=0;
if((flag==2)&&(num%2==0))//??????flag??2,num?????
lv=1;
if((flag==2)&&(num%2==1)) // ??????flag??2,num?????
lv=0;
if((flag==2)&&(num==30))//????,num=30?15?,?????????????
flag=4;
}
void timer1() interrupt 3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
count++; //??????
if(count==20)//20?50???1?
{
count=0;
miao++;
if(miao==60)//???60?????
{
miao=0;//??????
fen++;
if(fen==60)//????60?????
{
fen=0;//???????
shi++;
if(shi==24)//????24?????
{
shi=0;
}
write_sfm(4,shi);//24?????????????
}
write_sfm(7,fen);//??????????
}
write_sfm(10,miao);//?????????
}
}
估计是中断这一块出了问题,但是小白看不出来问题,望指教。
1602时钟源程序是这个
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit lcdrs=P1^5; //??1602??RS?
sbit lcden=P1^6;//??1602??LCDEN?
sbit hw=P1^0;
uchar count,s1num,s4num;
char miao,shi,fen;
void delay(uint z) //????
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com)//???????
{
lcdrs=0;
lcden=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_date(uchar date)//???????
{
lcdrs=1;
lcden=0;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_alarm(uchar add1,uchar date1)//??????
{
uchar shi,ge;
shi=date1/10;//????2????????
ge=date1%10;
write_com(0x80+add1);//??????
write_date(0x30+shi);//????????
write_date(0x30+ge);//????????
}
void write_sfm(uchar add,uchar date)//??????
{
uchar shi,ge;
shi=date/10;//????2????????
ge=date%10;
write_com(0x80+0x40+add);//??????
write_date(0x30+shi);//????????
write_date(0x30+ge);//????????
}
void init()//?????
{
lcden=0;
shi=21;
fen=59;
miao=58;
count=0;
s1num=0;
s4num=0;
write_com(0x38);//???1602??
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);//????????
delay(5);
write_com(0x80+0x40+6);//???????????":"
write_date(':');
delay(5);
write_com(0x80+0x40+9);
write_date(':');
delay(5);
write_sfm(10,miao);//????????
write_sfm(7,fen);
write_sfm(4,shi);
TMOD=0x01;//?????0????
TH0=(65536-50000)/256;//??????
TL0=(65536-50000)%256;
EA=1; //????
ET0=1; //????0??
TR0=1; //?????0
}
void main()//???
{
init();//????????
while(1)//????????
{
if(hw==0)
{
delay(5);
write_com(0x80+3);
write_date('*');
delay(5);
write_com(0x80+6);
write_date(':');
delay(5);
write_com(0x80+9);
write_date(':');
delay(5);
write_com(0x80+12);
write_date('*');
delay(5);
write_alarm(4,shi);//????????
write_alarm(7,fen);
write_alarm(10,miao);
}
}
}
void timer0() interrupt 1//???0??????
{
TH0=(65536-50000)/256;//????????
TL0=(65536-50000)%256;
count++; //??????
if(count==17)//20?50???1?
{
count=0;
miao++;
if(miao==60)//???60?????
{
miao=0;//??????
fen++;
if(fen==60)//????60?????
{
fen=0;//???????
shi++;
if(shi==24)//????24?????
{
shi=0;
}
write_sfm(4,shi);//24?????????????
}
write_sfm(7,fen);//??????????
}
write_sfm(10,miao);//?????????
}
}
按下按钮可以显示报警时间
望指教,十分感谢
|