السلام عليكم
هذا الكود لعرض رساله طويله ولكن في نفس الوقت اريد اشير الى نصيحه مهمه جدا لانها قد تجد صعوبه في أيجاد حل لها لانك لن ترى اي مشكله في الكود
المكتبه الجديده طبعا تجاوزت هذه مشكله وأتمنى من أخوه الكرام أستخدامها
أنا وضعت هذا الموضوع لانه مهم
1- يوفر لك كل ماتريد
2- تتيح لك ربط عدد كبير من شاشات
3- تختصر لك الكود
4- تحل لك مشاكل برمجيه أنت قد تجد صعوبه في حلها
==============================================
هذا الكود بدون أستخدام مكتبه للبيك 16f628a,4mhz
كود:
// Lcd pinout settings
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D4 at RB0_bit;
// Pin direction
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D7_Direction at TRISB3_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D4_Direction at TRISB0_bit;
unsigned char x,y, kk , count;
char text_lcd[16];
const char txt[]=" Hello ....How is my friend .. my name is Hasan Iam from iraq ";
void main()
{
cmcon=7;
Lcd_Init();
lcd_cmd(_LCD_CURSOR_OFF);
lcd_cmd(1);
while(1)
{
kk=sizeof(txt);// calcaulate size of txt
for(x=0;x<16;x++)
{
text_lcd[x]=txt[x+y]; // 15+42
}
lcd_out(1,1,text_lcd);
//delay_ms(150);
count++;
delay_ms(10);
//lcd_out(1,1," ");// clear LCD
if(count==10)// to reducing time
{
y++;
if(y==kk-15)y=0;
count=0;
}
}
}
وهذا نفس مشروع وشوف فرق
كود:
// Lcd pinout settings
sbit LCD0_RS at RB4_bit;
sbit LCD0_EN at RB5_bit;
sbit LCD0_D7 at RB3_bit;
sbit LCD0_D6 at RB2_bit;
sbit LCD0_D5 at RB1_bit;
sbit LCD0_D4 at RB0_bit;
// Pin direction
sbit LCD0_RS_Direction at TRISB4_bit;
sbit LCD0_EN_Direction at TRISB5_bit;
sbit LCD0_D7_Direction at TRISB3_bit;
sbit LCD0_D6_Direction at TRISB2_bit;
sbit LCD0_D5_Direction at TRISB1_bit;
sbit LCD0_D4_Direction at TRISB0_bit;
unsigned char x,y, kk , count;
const char txt[]=" Hello ....How is my friend .. my name is Hasan Iam from iraq ";
void main()
{
cmcon=7;
Lcd0_Init();
Lcd0_Command(1);
while(1)
{
kk=sizeof(txt);// calcaulate size of txt
Lcd0_GotoYX(0,0);
Lcd0_CstrNout(txt+y,16);
count++;
delay_ms(10);
if(count==10)// to reducing time
{
y++;
if(y==kk-15)y=0;
count=0;
}
}
}
شوف فرق بحجم الكود هذه بالاعتماد على مكتبه مايكروسي برو
وهذا بعد أستخدام مكتبه
الان ماهي مشكله الي نريد التعامل معها
هو انك عندما تتعامل مع مصفوفه لابد من محاوله تصفير مصفوفه والا سيحدث فيها overwrited
اذا كنت تستخدم مكتبه مايكروسي برو فأنت يجب تعديل الكود بهذه طريقه
نفس الكود ولكن بعد التعديل
تلاحظون انه يتم زياده مصفوفه بمقدار 1 لكي نجعلها اخر قيمه لها =0 وطبعا هذا بأسكي كود يعني null وبتالي سيتوقف مصفوفه عند هذه نقطه دون حدوث overwrited
كود:
// Lcd pinout settings
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D4 at RB0_bit;
// Pin direction
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D7_Direction at TRISB3_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D4_Direction at TRISB0_bit;
unsigned char x,y, kk , count;
char text_lcd[17];
const char txt[]=" Hello ....How is my friend .. my name is Hasan Iam from iraq ";
void main()
{
cmcon=7;
Lcd_Init();
lcd_cmd(_LCD_CURSOR_OFF);
lcd_cmd(1);
while(1)
{
kk=sizeof(txt);// calcaulate size of txt
for(x=0;x<17;x++)
{
if(x==16){text_lcd[x]=0;break;}// reset text_lcd[x] this verry nessary for avoid overwrited
text_lcd[x]=txt[x+y]; // 15+42
}
lcd_out(1,1,text_lcd);
//delay_ms(150);
count++;
delay_ms(10);
//lcd_out(1,1," ");// clear LCD
if(count==10)// to reducing time
{
y++;
if(y==kk-15)y=0;
count=0;
}
}
}
ولكن كيف حلت هذه مشكله في مكتبه الجديده وهو أستخدام هذا الامر
كود:
Lcd0_CstrNout(txt+y,16);
وهو يعرض رساله طولها يعتمد على رقم الذي انت تضعه طبعا لازم يكون ضمن حدود مصفوفه وقد وضعت 16 فهو اتوماتيكيا يصفر مصفوفه
في مشاركه القادمه تكمله لموضوع لكي تشاهدون مشكله وكيفه حلها مره بأستخدام مكتبه شاشه مايكروسي برو ومره بمكتبه جديده