اطلاعیه

Collapse
No announcement yet.

قفل رمز 8051

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    قفل رمز 8051

    برنامه زیر به زبان سی و با 8051 برای یک پروژه قفل رمز نوشته شده است که در همین سایت فایل پروتئوس آن نیز وجود دارد . از دوستان خواهش میکنم کمکم کنند . من این برنامه را با فرانکلین اجرا میکنم تا فایل هگز بگیرم اما ارور های زیادی میده که نمیدونم از چیه ؟!!! اگه کسی میدونه خواهش میکنم کمکم کنه . در ضمن میخوام یه خط برنامه اضاف کنم به این برنامه به این صورت که هر وقت رمز صحیح وارد شده یکی از پورت ها موتور دی سی را که به آن وصل هست را روشن کند و در غیر اینصورت خیر .. بازم خواهش میکنم راهنماییم کنید . فرصت جندانی ندارم .. ممنونم
    #include <AT89X51.H>

    #define EE_SCL P1_0
    #define EE_SDA P1_1
    #define LCD_E P1_7
    #define LCD_RW P1_6
    #define LCD_RS P1_5
    #define LCD_DATA P3

    void cmnwrt(int);
    void datawrt(char);
    char keypad_refresh();
    void init();
    void delay(unsigned i);
    void get_sntnc(char *);
    void print_msg(char*,char);


    void EE_write(unsigned int, char);
    char EE_read(unsigned int);
    void EE_strt();
    void EE_stop();
    char EE_shin();
    void EE_shout(char);


    //----------------------------------------
    //----------------------------------------


    int main(){
    char tmp[17],i,j;
    init();
    cmnwrt(0x80);


    while(1){


    if(EE_read(0) != 'p' || EE_read(1) != '=&#039{
    np: cmnwrt(1);
    print_msg("Enter new pass:\0",0x80);
    get_sntnc(tmp);
    EE_write(0,'p'
    EE_write(1,'='

    for(i=0; tmp[i]; i++)
    EE_write(i+2,tmp[i]);
    EE_write(i+2,0);
    }

    rpa:
    cmnwrt(1);
    print_msg("Enter the pass:\0",0x80);

    get_sntnc(tmp);

    for(i=0,j=0;;i++){
    if(tmp[i] != EE_read(i+2)){
    j=-1;
    break;
    }
    if(!tmp[i])
    break;
    }

    cmnwrt(1);
    if(j==-1){


    //******************* Agar password eshtebah bood in dastoorat ejra beshe: ***************************************




    print_msg("Pass is wrong!\0",0x80);
    delay(1000);
    goto rpa;





    }
    //******************* Agar password dorost bood in dastoorat ejra beshe: *****************************************



    print_msg("Pass is right!\0",0x80);
    delay(1000);




    //******************* Hala az karbar soal mishe ke mikhad pass ro taghyeer bede ya na? ***************************

    cmnwrt(1);
    print_msg("*=change pass\0",0x80);
    print_msg("#=back\0",0xc0);

    ka:
    do
    i=keypad_refresh();
    while(i==-1);

    if(i==0x3a) //agar kelide * feshar dade shode:
    goto np;
    else if(i==0x3c) //agar kelide # feshar dade shode:
    goto rpa;
    else
    goto ka;
    }

    }

    //------------------------------------
    //------------------------------------
    void print_msg(char *msg, char line){

    char i;
    cmnwrt(line);
    for(i=0; *(msg+i); i++)
    datawrt(*(msg+i));
    }



    //------------------------------------
    //------------------------------------

    char keypad_refresh(){
    char tmp,row,cl;

    P2 = 0xf0;
    if(!P2_4)
    row = 0;
    else if(!P2_5)
    row = 1;
    else if(!P2_6)
    row = 2;
    else if(!P2_7)
    row = 3;
    else
    return -1;

    P2 = 0xff;

    P2 = 0x0f;

    if(!P2_2)
    cl = 0;
    else if(!P2_1)
    cl = 1;
    else if(!P2_0)
    cl = 2;
    else
    return -1;


    tmp = row*3+cl+1;
    if(tmp == 11)
    tmp = 0;
    return tmp|0x30;


    }

    //--------------------------------------------------
    //--------------------------------------------------

    void get_sntnc(char *str) {
    char i,j,z;

    for(i=0; i<17; i++)
    *(str+i) = 0;

    i=0;
    while(1){
    cmnwrt(0xc0);
    for(z=0; z<16; z++)
    if(*(str+z))
    datawrt(*(str+z));
    else
    datawrt(' '

    delay(70);
    do
    j = keypad_refresh();
    while(j==-1);

    if(j==0x3c){ //agar kelide # feshar dade shode:
    *(str+i) = 0;
    break;

    }else if(j==0x3a){ //agar kelide * feshar dade shode:
    if(i>0){
    i--;
    *(str+i) = 0;
    }

    }else{
    if(i<=15){
    *(str+i) = j;
    i++;
    }
    }
    }

    }

    //--------------------------------------------------
    //--------------------------------------------------

    void init() {
    int i;

    P0=P1=P2=P3=0;

    //initialize LCD

    LCD_RS = 0;
    LCD_RW = 0;

    delay(30);
    cmnwrt(0x3f);
    delay(20);
    cmnwrt(0x3f);
    delay(10);
    cmnwrt(0x3f);
    delay(5);
    cmnwrt(0x38);
    cmnwrt(0x01);
    cmnwrt(0x0c);
    //initialize EEPROM

    EE_SDA = 1;
    for (i=0; i<10; i++) {
    EE_SCL = 1;
    i=i; //delay
    EE_SCL = 0;
    }
    }

    //--------------------------------------------------
    //--------------------------------------------------

    void delay(unsigned i) {

    TMOD = 1;
    for (;i>0;i--) {
    TH0 = 0xFc; //0xFFFF - 0xFc17 = 1000 (decimal) -> 1ms for 12MH crystal
    TL0 = 0x17;
    TR0 = 1;
    while(!TF0);
    TR0 = 0;
    TF0 = 0;
    }
    }

    //--------------------------------------------------
    //--------------------------------------------------

    void cmnwrt(int cmn) {

    LCD_DATA = cmn;
    LCD_RS = 0;
    LCD_RW = 0;
    LCD_E = 1;
    LCD_E = 0;
    delay(2);
    }

    void datawrt(char ch) {

    LCD_DATA = ch;
    LCD_RS = 1;
    LCD_RW = 0;
    LCD_E = 1;
    LCD_E = 0;
    delay(2);
    }

    //---------------------------------------------------
    //---------------------------------------------------

    //Write into EEPROM
    void EE_write(unsigned int addr, char dta){
    char chtmp;
    CY = 0;
    EE_strt();
    EE_shout(0xA0);
    chtmp = addr>>8;
    EE_shout(chtmp);
    chtmp = addr;
    EE_shout(chtmp);
    EE_shout(dta);
    EE_stop();

    delay(13);
    }

    //Reading from EEPROM
    char EE_read (unsigned int addr) {
    char chtmp;
    CY = 0;
    EE_strt();
    EE_shout(0xA0);
    chtmp = addr>>8;
    EE_shout(chtmp);
    chtmp = addr;
    EE_shout(chtmp);
    EE_strt();
    EE_shout(0xA1);
    chtmp = EE_shin();
    EE_stop();

    return chtmp;

    }

    //Start
    void EE_strt() {
    EE_SDA = 1;
    EE_SCL = 1;
    EE_SDA = 0;
    EE_SCL = 0;
    }

    //Stop
    void EE_stop() {
    EE_SCL = 0;
    EE_SDA = 0;
    EE_SCL = 1;
    EE_SDA = 1;
    }

    //Shift out
    void EE_shout(char sho) {
    unsigned char i,j;


    for (j=0, i=0; i<8; i++) {
    j /= 2;
    if (!j)
    j=128;
    if (sho&j)
    CY = 1;
    else
    CY = 0;
    EE_SDA = CY;
    EE_SCL = 1;
    j = j; //delay
    EE_SCL = 0;
    }
    EE_SDA = 1;
    EE_SCL = 1;
    j=j; //delay
    CY = EE_SDA;
    EE_SCL = 0;
    }

    //Shift in
    char EE_shin() {
    char i,shi = 0;

    EE_SDA = 1;
    for (i=0; i<8; i++) {
    CY = 10;
    shi <<= 1;
    EE_SCL = 1;
    i=i;
    CY = EE_SDA;
    EE_SCL = 0;
    if (CY)
    shi++;
    }
    EE_SDA = 1;
    EE_SCL = 1;
    i=i; //delay
    EE_SCL = 10;
    return shi;
    }


    #2
    پاسخ : قفل رمز 8051

    کسی جوابمو نمیده؟ :sad:

    دیدگاه

    لطفا صبر کنید...
    X