السلام عليكم ورحمة الله وبركاته.
يوجد مشكلة معي في الشاشة الـLCD على بروتس.
هذا هو الكود:
كود:
unsigned int xx;
char yy[6];
char zz[6];
sbit LCD_RS at Rc2_bit;
sbit LCD_EN at Rc3_bit;
sbit LCD_D7 at Rc7_bit;
sbit LCD_D6 at Rc6_bit;
sbit LCD_D5 at Rc5_bit;
sbit LCD_D4 at Rc4_bit;
sbit LCD_RS_Direction at TRISc2_bit;
sbit LCD_EN_Direction at TRISc3_bit;
sbit LCD_D7_Direction at TRISc7_bit;
sbit LCD_D6_Direction at TRISc6_bit;
sbit LCD_D5_Direction at TRISc5_bit;
sbit LCD_D4_Direction at TRISc4_bit;
void main()
{
ANSELa=0;ANSELb=0;ANSELc=0;
ANSELd=0;ANSELE=0;
C1ON_bit=0;C2ON_bit=0;
RBPU_bit=0;
delay_ms(200);
Lcd_Init();
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Out(1,1,"besm allah");
delay_ms(200);
Lcd_Out(2,1,"press K1");
while(portb.f0){}
Lcd_Cmd(_LCD_CLEAR);
xx=12349;
WordToStr(xx, yy);
zz[0]='a';
zz[1]='b';
zz[2]='c';
zz[3]='d';
zz[4]='e';
zz[5]='f';
Lcd_Out(1,1,zz);
Lcd_Out(2,1,"K1 pressed");
}
وهذه هي شكل المعاينة على البروتس قبل الضغط على الزر K1:
وأما عن شرح أول أوامر الكود فهي باختصار تعطيل الانالوج ثم تعطيل المقارن ثم تفعيل مقاومات الرفع على بورت B.
ولكن المفروض عندما أضغط على الزر K1 يكتب على السطر الأول abcdef ويكتب على السطر الثاني K1 pressed.
لاحظ أن المتغير xx و yy لا فائدة منهما... المفروض أنهما لا علاقة لهما بالظهور على الشاشة وإنما zz فقط هو الذي سيظهر.
لكن عند الضغط على K1 يصبح الشكل هكذا:
وجربت شيئا زاد من المشكلة.. حيث جعلت أطراف الشاشة بعضها على بورت C وبعضها على بورت A هكذا:
حيث جعلت A0 بدل C3 و A1 بدل C2
وهذا زاد الأمر سوءا حيث عندما ضغطت على الزر K1 أصبح الشكل هكذا:
وجربت شيئا آخر زاد الأمر سوءا... انظروا إلى آخر الكود:
غيرت الترتيب فجعلته هكذا:
فعند استخدام بورت C فقط لتشغيل الشاشة كان الشكل هكذا بعد الضغط على الزر:
وأما عند استخدام بورت C مع بورت A أصبح الشكل هكذا:
وجربت أن ألغي أوامر xx و yy هكذا:
ولكن كانت النتيجة هكذا:
ملحوظة هامة:
أنا أعرف أنني إذا أردت إظهار abcdef على الشاشة فالطريقة التقليدية هي:
char zz[ ]="abcdef";i
ولكن الطريقة التي استخدمتها في الكود نجحت معي أحيانا وخرفت أحيانا وأنا أحتاج هذه الطريقة... وجزاكم الله خيرا.