السلام عليكم
مؤخرا تعلمت التعامل مع مسجل الازاحه من نوع 74hc595
واستطعت ارسال الداتا اليه بالميكروكنترولر نوع 16f877a
ولكن بطريقه بدائيه جدا
حيث ان الكود كان طويييييييل جدا جدا لارسال 8 بت
وكان المشروع 7segmant فما بالك اذا اردت تحريك النص او استخدام عارضه اكبر المستخدمه كانت 8*8
ارجوا من حضراتكم ان تدلونى على طريقه بسيطه للتعامل معها فى لغه ميكروسى
|
السلام عليكم
نعم ممكن ذلك بطريقه ماتركس
اليك هذا مشروع
http://up.top4top.net/downloadf-top4...59571-rar.html
كود:
#define Check_bit(var,pin) var & (1<<pin)
sbit ST1 at RB0_bit; // for display
sbit DS1 at RB1_bit;
sbit SH1 at RB2_bit;
////////********************************************************************///
char num1[16];//
//const char segment[]={63,6,91,79,102,109,125,7,127,111}; //for CC
const char segment[]={192,249,164,176,153,146,130,248,128,144}; // for CA
const char segbit[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
char x=0 ,dd,ggg,colomn1,colomn ;
unsigned int number1,number2, cont;
char segmant2[1];// 1 this mean only 8 7seg if has 16 7seg then char segmant2[2]
void display_7seg();
//***************************************************************************//
//Timer0
//Prescaler 1:16; TMR0 Preload = 6; Actual Interrupt Time : 2 ms
//Place/Copy this part in declaration section
void InitTimer0(){
OPTION_REG = 0x83;
TMR0 = 6;
INTCON = 0xA0;
}
void Interrupt(){
if (TMR0IF_bit){
TMR0IF_bit = 0;
TMR0 = 6;
//Enter your code here
ggg++;
cont++;
}
}
void main ()
{
char mm=0;
trisb=0;
portb=0;
InitTimer0();
cmcon=7; // Configure AN pins as digital
while(1)
{
if(cont>500)
{
number1++;
if(number2 !=0)number2--;
if(number2==0)number2=9999;
if(number1>=10000)number1=0;
num1[0]=number1/1000; // ÚÏÇÏ ÊÕÇÚÏí
num1[1]=number1/100%10;
num1[2]=number1/10 %10;
num1[3]=number1%10;// ÚÏÇÏ ÊäÇÒáí
num1[4]=number2/1000;
num1[5]=number2/100%10;
num1[6]=number2/10 %10;
num1[7]=number2%10;
num1[8]=1;
num1[9]=2;
num1[10]=3;
num1[11]=4;
num1[12]=5;
num1[13]=6;
num1[14]=7;
num1[15]=8;
cont=0;
}
if(ggg>=3){ggg=0; display_7seg();}
}
}
///*****************************************************************//
void display_7seg()
{ char y;
dd=8;
for(x=0;x<32;x++){ds1=1;sh1=1;sh1=0;}// OFF all 7 seg
ST1=1;st1=0;
// data2 enable data1 enable
for(y=0;y<2;y++) // åäÇ ÚäÏäÇ 16 ÓÝä ÓßãäÊ ÝäÍä äÊÚÇãá ãÚ ßá 8 Úáì ÍÏå áÐÇ äÚÏ Çáì 2
{
for(x=0;x<8;x++) // äÑÓ ÊÝÚíá Çáßãä áÇäå íÑÓá Çæá íÙåÑ Èá ÇÎíÑ
{
if(Check_bit(segbit[7-colomn],7-x))ds1=1;
else DS1=0;
SH1=0;SH1=1;
}
for(x=0;x<8;x++) //
{
if(Check_bit(segment[num1[colomn1+dd]],7-x))DS1=1;
else DS1=0;
SH1=0;SH1=1;
}
if(dd>=8)dd=dd-8;
}
ST1=1; ST1=0;
colomn++;
colomn1++;
if(colomn==8)colomn=0;
if(colomn1==8)colomn1=0;
}
//******************************************************************************//