شكرا لك مهندس حسن ممكن تكتبها فى الكود لو سمحت
|
بالخدمه أخي سعيد
في رابط مرفق مشروعين تمت تنفيذهما عمليا
https://www.mediafire.com/?g76irhi6qpg979q
وهذا احدهما وهو كود لشركه مايكروشيب
كود:
// LCD module connections
sbit LCD_RS at LATB4_bit;
sbit LCD_EN at LATB5_bit;
sbit LCD_D4 at LATB0_bit;
sbit LCD_D5 at LATB1_bit;
sbit LCD_D6 at LATB2_bit;
sbit LCD_D7 at LATB3_bit;
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// End LCD module connections
unsigned int temp_res = 0;
float temp;
char txt[15];
void main() {
ANSELB = 0; // Configure PORTB pins as digital
ANSELE = 0x02; // Configure RE1 pin as analog
TRISE1_bit = 1; // Configure RE1 pin as input
ADC_Init(); // Initialize ADC
Lcd_Init(); // Initialize LCD
Lcd_Cmd(_LCD_CLEAR); // Clear display
Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off
Lcd_Out(1, 1, "Temperature :");
Lcd_Chr(2,8,223); // Different LCD displays have different
// char code for degree
Lcd_Chr(2,9,'C'); // Display "C" for Celsius
temp_res = 0;
do {
temp_res = ADC_Get_Sample(6); // Get 10-bit results of AD conversion
temp = (temp_res * 5)/10.240; // Calculate temperature in Celsuis
// change Vref constant according
// to the power supply voltage
FloatToStr(temp, txt); // Convert temperature to string
txt[4] = 0;
Lcd_Out(2,3,txt); // Write string in second row
Delay_ms(300);
} while(1);
}
طبعا تلاحظ هو قفل مصفوفه txt[4] = 0 هو شنو معناها بالضبط
احيانا يحدث خطأ وانت تخزن رساله من مصفوفه الى أخرى او مصفوفه عدد عناصرها 16 بس احتاج فقط 4 عناصر
وماذا تعني مشكله Stack Overflow يعني تحدث هذه في مصفوفات لان مؤشر اذا تجاوز عنصر الاخير في مصفوفه راح يصبح Stack Overflow فعال وكأنه يخبرك انت خزنت البيانات في أماكن غير محجوزه للمصفوفه وبتالي نتيجه ذلك تغير قيم بعض مواقع ذاكره قد تكون ريجيسترات مهمه
وعليه لازم نضع حد للبيانات مخرنه في مصفوفه
اذن لازم شنو سوي تعمل ريست للمؤشر خاص بالمصفوفه يعني لما تخبره
txt[4] = 0 معناعا مؤشر سيتوقف عند عنصر رابع ولن يكمل بعد وبتالي يصبح عدد بيانات في مصفوفه txt فقط 4 عناصر
طبعا يجب اضافه هذا الكود ان كنت تستخدم
1- 18f45k22
2- PLL وهو مضاعف تردد داخل مايكرو اي مثلا عندك كرستاله 8 ميكا وتريد تردد نظام 32 ميكا عندها سوف تفعل PLL
ولكن عمليا سوف تواجه مشكله عويصه خصوصا في LCD يعني مشروع لن يعمل معاك رغم انه سوف يعمل في البروتيس
لذا عليك اضافه هذا كود في داله الرئيسيه
كود:
SLRCON = 0; // Set output slew rate on all ports at standard rate