הביאו לי את התוכנית בבית ספר לצריבה. צרבתי וכמעט הכל עובד.
LCD, לוח מקשים עובדים
מנוע הצעד לא עובד. בפתיחה הוא עובד כמו שצריך אבל בסגירה הוא פשוט רועד ולא זז.
אחרי שבדקתי את המעגל והכל בסדר אז הבנתי שבעיה בתוכנית
מישהו רואה בתוכנית שהבאתי דבר לא תקין?
- קוד: בחר הכל
#include<8052.h>
#define E_lcd P3_0
#define RS P3_1
#define r1 P1_1
#define r2 P1_2
#define r3 P1_3
#define r4 P1_4
#define c1 P1_5
#define c2 P1_6
#define c3 P1_7
#define lock P3_5
char key,a,b,c,d;
data at 0x2f char m_control;
bit at 0x78 a5;
bit at 0x79 b5;
bit at 0x7a c5;
bit at 0x7b d5;
void keyboard();
void data_out_lcd(unsigned char data_out);
char code_ok,code_in[4],i=0,master_code[4];
//---------------פונקצית השהייה------------------//
void delay(float time_delay)
{
float j;
for(j=0;j<time_delay;j++);
}
//-------------------הוצאת הוראה לאל סי די"------------------//
void instruction_lcd(unsigned char cod)
{
P0=cod;
RS=0;
E_lcd=1;
E_lcd=0;
delay(20);
}
//------------------איתחול ה"אל סי די"-------------------//
void init_lcd()
{
char j;
for(j=0;j<4;j++)
instruction_lcd(0x38);
instruction_lcd(0x06);
instruction_lcd(0x0E);
instruction_lcd(0x01);
}
//-------------------הוצאת נתונים ל"אל סי די"------------------//
void data_out_lcd(unsigned char data_out)
{
if(data_out>0x80)
data_out-=0x40;
P0=data_out;
RS=1;
E_lcd=1;
E_lcd=0;
delay(5);
}
//------------------כתיבת שורה ראשונה-------------------//
void line1(unsigned char *str)
{
char j;
instruction_lcd(0x8f);
instruction_lcd(0x04);
for(j=0;j<16;j++)
data_out_lcd(*(str+j));
}
//------------------כתיבת שורה שניה-------------------//
void line2(unsigned char *str)
{
char j;
instruction_lcd(0xcf);
instruction_lcd(0x04);
for(j=0;j<16;j++)
data_out_lcd(*(str+j));
}
//------------------פונקציית מנוע פתיחה------------------//
void motor1()
{
m_control=(m_control<<1)+CY;
P2_2=a5;
P2_3=c5;
P2_4=b5;
P2_5=d5;
delay(20);
}
//------------------פונקציית מנוע סגירה------------------//
void motor2()
{
m_control=(m_control<<1)-CY;
P2_2=a5;
P2_3=c5;
P2_4=b5;
P2_5=d5;
delay(20);
}
//------------------פונקציית השוואה------------------//
//------------------פונקציית מקשים------------------//
void keyboard()
{
c1=0,c2=1,c3=1;
if(r1==0)
{
key='1';
goto SOF;
}
if(r2==0)
{
key='4';
goto SOF;
}
if(r3==0)
{
key='7';
goto SOF;
}
if(r4==0)
{
key='*';
goto SOF;
}
c1=1,c2=0,c3=1;
if(r1==0)
{
key='2';
goto SOF;
}
if(r2==0)
{
key='5';
goto SOF;
}
if(r3==0)
{
key='8';
goto SOF;
}
if(r4==0)
{
key='0';
goto SOF;
}
c1=1,c2=1,c3=0;
if(r1==0)
{
key='3';
goto SOF;
}
if(r2==0)
{
key='6';
goto SOF;
}
if(r3==0)
{
key='9';
goto SOF;
}
if(r4==0)
{
key='#';
goto SOF;
}
key=' ';
SOF:while(r1==0 || r2==0 || r3==0 || r4==0);
if(key!= ' ')
{
data_out_lcd(key);
code_in[i]=key;
i++;
if(i>4)
i=0;
}
}
//------------------תוכנית כללית-------------------//
void main()
{
int t;
char j;
code_ok=1;
lock=1;
init_lcd();
line1(" פרוייקט כספת ");
line2(" ");
delay(10000);
line1(" לפתיחה הקש קוד ");
line2(" ");
instruction_lcd(0xc5);
instruction_lcd(0x06);
a=0;
while (a<4)
{
keyboard();
if(key!=' ')
{
master_code[a]=key;
a++;
lock=0;
}
}
while(1)
{
keyboard();
if(i>=4)
{
for(j=0;j<4;j++)
{
if(code_in[j] != master_code[j])
code_ok=0;
}
if(code_ok == 1)
{
lock=1;
line1(" הכספת בפתיחה ");
line2(" ");
delay(1000);
m_control=0x99;
for(t=0;t<500;t++)
{
delay(10);
motor1();
//switch( t )
//{
//case 100:
//line2("## ");
//break;
//case 200:
//line2("##### ");
//break;
//case 300:
//line2("######## ");
//break;
//case 400:
//line2("########## ");
//break;
//case 499:
//line2("############# ");
//break;
//}
}
m_control=0x00;
motor1();
line1(" הכספת פתוחה ");
line2(" ");
delay(10000);
line1(" לנעילה הקש קוד ");
line2(" ");
instruction_lcd(0xc5);
instruction_lcd(0x06);
a=0;
while (a<4)
{
keyboard();
if(key!=' ')
{
master_code[a]=key;
a++;
}
}
while(key != ' ')
keyboard();
lock=0;
m_control=0x99;
line1(" הכספת בסגירה ");
line2(" ");
delay(1000);
for(t=0;t<1000;t++)
{
delay(10);
motor2();
}
m_control=0x00;
motor1();
line1(" הכספת נעולה ");
delay(5000);
line1(" לפתיחה הקש קוד ");
line2(" ");
instruction_lcd(0xc5);
instruction_lcd(0x06);
i=0;
}
else
{
line2(" ");
line1(" קוד שגוי ");
delay(5000);
code_ok=1;
line1(" לפתיחה הקש קוד ");
instruction_lcd(0xc5);
instruction_lcd(0x06);
}
i=0;
}
}
}