دوستان توی این پست در مورد روشها و تکنیکهای بهینه برنامه نویسی در هر زبانی بحث و گفتکو خواهد شد
لطفا بحث ها رو سخت افزاری نکنید و هر سوالی در این مورد داشته باشید بپرسید تا دوستان یا بنده اگر بتونیم جواب بدیم تا با روشهای همدیگه اشنا بشیم.
برای ابتدا در مورد روشهای اسکن 7 سگمنت من از این روش استفاده میکنم نظر شما چیه ؟
موارد نیاز
1 - یکی از تایمرهارو با پروید حدود 10 تا 50 کلو هرتز تنظیم میکنم
2 - جدول یا یه ارایه با مقادیر مورد نیاز برای نمایش اعداد یا حروف روی سگمنت ایجاد میکنم
3 - اگر فرض رو بر این بزاریم که 8 تا سگمنت داریم به دو پرت میکرو نیاز دارم (مشترک این سگمنتهارو SCAN و دیتا رو DATA دیفاین میکنم)
حالا پروسه برنامه داخل اینتراپت تایمر
1- مقدار SCAN رو صفر میکنم
2 - یه تاخیر خیلی کوچیک برای حذف سایه و خاموش شدن سگمنتها
3 - مقدار متناسب رو بعد از محاسبه از جدول که قبلا درست کردم داخل پرت DATA میریزم
4 - بعد بیت متناظر با متغیر dg رو از پرت SCAN یک میکنم
5 - یک واحد به مقدار متغیر dg اضافه میکنم
6 - چک میکنیم که متغیر dg از 7 بزرگتر نشه اگر بشه صفر میکنیم و از اینتراپت خارج میشیم
یه برنامه کوچیک هم میزارم البته من این برنامرو توی C نوشتم ولی شما روش رو یاد بگیرید میتونید خودتون توی هر زبانی استفاده کنید نه ؟
#define DATA PORTA
#define SCAN PORTB
unsigned char Cdgit[8];
unsigned char dg;
flash unsigned char nom[]=
{
// ! " # $ % & ' ( ) * + , - . /
0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,64 ,0 ,0 ,
// 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
63 ,6 ,91 ,79 ,102,109,125,7 ,127,111,0 ,0 ,0 ,0 ,0 ,0 ,
// @ A B C D E F G H I J K L M N O
0 ,119,124,57 ,94 ,121,113,61 ,118,48 ,14 ,120,56 ,85 ,84 ,63 ,
// P Q R S T U V W X Y Z [ \ ] ^ _
115,103,80 ,109,120,62 ,50 ,29 ,100,110,73 ,0 ,0 ,0 ,0 ,0 ,
// ` a b c d e f g h i j k l m n o
99 ,119,124,88 ,94 ,121,113,61 ,116,48 ,14 ,120,56 ,85 ,84 ,92 ,
// p q r s t u v w x y z { | } ~
115,103,80 ,109,120,28 ,50 ,29 ,100,110,73 ,0 ,0 ,0 ,0 ,
};
interrupt [TIM2_COMP] void timer2_comp_isr(void)
{
SCAN = 0;
delay_us(5);
DATA = nom[Cdgit[dg] - 32];
SCAN |= (1<<dg);
dg++;
if(dg > 7)dg = 0;
}
لطفا بحث ها رو سخت افزاری نکنید و هر سوالی در این مورد داشته باشید بپرسید تا دوستان یا بنده اگر بتونیم جواب بدیم تا با روشهای همدیگه اشنا بشیم.
برای ابتدا در مورد روشهای اسکن 7 سگمنت من از این روش استفاده میکنم نظر شما چیه ؟
موارد نیاز
1 - یکی از تایمرهارو با پروید حدود 10 تا 50 کلو هرتز تنظیم میکنم
2 - جدول یا یه ارایه با مقادیر مورد نیاز برای نمایش اعداد یا حروف روی سگمنت ایجاد میکنم
3 - اگر فرض رو بر این بزاریم که 8 تا سگمنت داریم به دو پرت میکرو نیاز دارم (مشترک این سگمنتهارو SCAN و دیتا رو DATA دیفاین میکنم)
حالا پروسه برنامه داخل اینتراپت تایمر
1- مقدار SCAN رو صفر میکنم
2 - یه تاخیر خیلی کوچیک برای حذف سایه و خاموش شدن سگمنتها
3 - مقدار متناسب رو بعد از محاسبه از جدول که قبلا درست کردم داخل پرت DATA میریزم
4 - بعد بیت متناظر با متغیر dg رو از پرت SCAN یک میکنم
5 - یک واحد به مقدار متغیر dg اضافه میکنم
6 - چک میکنیم که متغیر dg از 7 بزرگتر نشه اگر بشه صفر میکنیم و از اینتراپت خارج میشیم
یه برنامه کوچیک هم میزارم البته من این برنامرو توی C نوشتم ولی شما روش رو یاد بگیرید میتونید خودتون توی هر زبانی استفاده کنید نه ؟
#define DATA PORTA
#define SCAN PORTB
unsigned char Cdgit[8];
unsigned char dg;
flash unsigned char nom[]=
{
// ! " # $ % & ' ( ) * + , - . /
0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,64 ,0 ,0 ,
// 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
63 ,6 ,91 ,79 ,102,109,125,7 ,127,111,0 ,0 ,0 ,0 ,0 ,0 ,
// @ A B C D E F G H I J K L M N O
0 ,119,124,57 ,94 ,121,113,61 ,118,48 ,14 ,120,56 ,85 ,84 ,63 ,
// P Q R S T U V W X Y Z [ \ ] ^ _
115,103,80 ,109,120,62 ,50 ,29 ,100,110,73 ,0 ,0 ,0 ,0 ,0 ,
// ` a b c d e f g h i j k l m n o
99 ,119,124,88 ,94 ,121,113,61 ,116,48 ,14 ,120,56 ,85 ,84 ,92 ,
// p q r s t u v w x y z { | } ~
115,103,80 ,109,120,28 ,50 ,29 ,100,110,73 ,0 ,0 ,0 ,0 ,
};
interrupt [TIM2_COMP] void timer2_comp_isr(void)
{
SCAN = 0;
delay_us(5);
DATA = nom[Cdgit[dg] - 32];
SCAN |= (1<<dg);
dg++;
if(dg > 7)dg = 0;
}
دیدگاه