 |
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
|
|
نشاط [ حسن هادي محمود ]
قوة السمعة:
|
|
08-05-2014, 05:17 PM
المشاركة 59
|
|
أضافه معلومات جديده حول تشغيل عدد كبير من سفن سكمنت بأستخدام 74hc595
السلام عليكم
أثناء بحثي عن سفن سكمنت وجدت طريقه وهي موجوده ضمن ملف
http://arabsh.com/files/0c334c4860f3...595_2-rar.html
يوجد pdf لرسم دائره
يعني نفس دائره ادناه
http://www.china-electronics-gadgets...ver-p-525.html
طبعا فكره كتالي وفقا للمثال ترسل البيانات بهذا الشكل
data2 enable data 1 enable
هذه الطريقه تحتاج فقط 3 اسلاك
هذا هو الكود
كود:
#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;
}
//******************************************************//
طبعا الكود بلون احمر هو مسؤول عن عرض البيانات على سفن سكمنت
|
السلام عليكم
هذا نفس مشروع ولكن بأستخدام spi بروتوكول وهنا أصبح كود بسيط
كود:
#define Check_bit(var,pin) var & (1<<pin)
// Software SPI module connections
sbit Chip_Select at RB0_bit;
sbit SoftSpi_SDI at RB3_bit;
sbit SoftSpi_SDO at RB1_bit;
sbit SoftSpi_CLK at RB2_bit;
sbit Chip_Select_Direction at TRISB0_bit;
sbit SoftSpi_SDI_Direction at TRISB3_bit;
sbit SoftSpi_SDO_Direction at TRISB1_bit;
sbit SoftSpi_CLK_Direction at TRISB2_bit;
// End Software SPI module connections
////////********************************************************************///
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;
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
Chip_Select = 1; // Deselect DAC
Chip_Select_Direction = 0; // Set CS# pin as Output
Soft_SPI_Init(); // Initialize Soft_SPI
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>=1){ggg=0; display_7seg();}
}
}
///*****************************************************************//
void display_7seg()
{
for(x=0;x<4;x++)Soft_SPI_Write(255);// OFF all 7 seg
Chip_Select=0;Chip_Select=1;
Soft_SPI_Write( segbit[7-colomn]);
Soft_SPI_Write(segment[num1[colomn1+8]]);
Soft_SPI_Write( segbit[7-colomn]);
Soft_SPI_Write(segment[num1[colomn1]]);
Chip_Select=0;Chip_Select=1;
colomn++;
colomn1++;
if(colomn==8)colomn=0;
if(colomn1==8)colomn1=0;
}
الكود بلون احمر هو كود جديد بأستخدام بروتوكول spi
التعديل الأخير تم بواسطة : حسن هادي محمود بتاريخ 08-05-2014 الساعة 06:37 PM
|