Browsing this Thread:
1 Anonymous Users
|
Re: dsPIC33FJ128MC708 控制 SN74LS164
|
|
新會員
![新會員](https://microchip.com.tw/uploads/rank3e632f95e81ca.gif)
Joined
: 2010/1/12 21:48 最後登入時間
: 2010/1/13 18:04
Group:
註冊會員
Level : 1 HP : 0 / 0 MP : 0 / 28 EXP : 2
|
在此附上我完整的原始碼程式。 懇請各位高手解答~
#include <p33FJ128MC708.h> #include <timer.h>
#define Fosc 7372800 // 頻率為 7.3728 MHz
/*////////////////////////////////////// int clk1 = 2 ; //74164 1 clk int data1 = 3 ; //74164 1 data int data2 = 5 ; //74164 2 data
int com1 = 6 ; //DSP COM1 int com2 = 7 ; //DSP COM2 int com3 = 8 ; //DSP COM3 int com4 = 9 ; //DSP COM4 int com5 = 10 ; //DSP COM5 int com6 = 11 ; //DSP COM6 int com7 = 12 ; //DSP COM7 int com8 = 13 ; //DSP COM8 //////////////////////////////////////*/
//long int time2_cnt = 0 , millis = 0 ;
int scan = 0 ; int dsp_a[10] , dsp_b[10] ;
int data_buf1 , data_buf2 ;
struct { unsigned T1_Flag : 1 ; } Timer ; unsigned char T1_Count = 0 ;
void p74164(void) ; void Init_Timer1(void); void delay(void) ;
void main () { TRISB = 0x0000 ; //點矩陣 LATB = 0x0000 ;
Init_Timer1() ;
// 0 為 亮 1 為 暗 //綠色 dsp_a[1] = 0xFF ; dsp_a[2] = 0xFF ; dsp_a[3] = 0xFF ; dsp_a[4] = 0xFF ; dsp_a[5] = 0xFF ; dsp_a[6] = 0xFF ; dsp_a[7] = 0xFF ; dsp_a[8] = 0xFF ;
//紅色 dsp_b[1] = 0x7F ; dsp_b[2] = 0x3F ; dsp_b[3] = 0x1F ; dsp_b[4] = 0x0F ; dsp_b[5] = 0x07 ; dsp_b[6] = 0x03 ; dsp_b[7] = 0x01 ; dsp_b[8] = 0x00 ;
while ( 1 ) { if ( Timer.T1_Flag == 1 ) Timer.T1_Flag = 0 ; // CLear update flagag } }
void _ISR _T1Interrupt(void) { switch ( scan ) { case 1 : LATB = 0x0040 ; data_buf1 = dsp_a[scan] ; data_buf2 = dsp_b[scan] ; p74164() ;
break ; case 2 : LATB = 0x0080 ; data_buf1 = dsp_a[scan] ; data_buf2 = dsp_b[scan] ; p74164() ;
break ; case 3 : LATB = 0x0100 ; data_buf1 = dsp_a[scan] ; data_buf2 = dsp_b[scan] ; p74164() ; break ; case 4 : LATB = 0x0200 ; data_buf1 = dsp_a[scan] ; data_buf2 = dsp_b[scan] ; p74164() ; break ; case 5 : LATB = 0x0400 ; data_buf1 = dsp_a[scan] ; data_buf2 = dsp_b[scan] ; p74164() ; break ; case 6 : LATB = 0x0800 ; data_buf1 = dsp_a[scan] ; data_buf2 = dsp_b[scan] ; p74164() ; break ; case 7 : LATB = 0x1000 ; data_buf1 = dsp_a[scan] ; data_buf2 = dsp_b[scan] ; p74164() ; break ; case 8 : LATB = 0x2000 ; data_buf1 = dsp_a[scan] ; data_buf2 = dsp_b[scan] ; p74164() ; break ; case 9 : scan = 0 ; break ; } scan ++ ;
//LED1=!LED1 ; // Flash the LED1 Timer.T1_Flag = 1 ; T1_Count ++ ; // Increase Timer1 display counter IFS0bits.T1IF = 0 ; // Clear Timer1 Interrupt Flag }
void p74164() { int a ;
for( a = 0 ; a <= 7 ; a++ ) { LATBbits.LATB2 = 0 ;
if( data_buf1 >= 128 ) { LATBbits.LATB3 = 1 ; data_buf1 = data_buf1 - 128 ; } else LATBbits.LATB3 = 0 ;
data_buf1 = data_buf1 << 1 ;
if(data_buf2 >= 128 ) { LATBbits.LATB5 = 1 ; data_buf2 = data_buf2 - 128 ; } else LATBbits.LATB5 = 0 ;
data_buf2 = data_buf2 << 1 ;
LATBbits.LATB2 = 1 ;
}
LATBbits.LATB2 = 0 ; }
/*************************************************/ // Timer 模組的初始化副程式 // 100mS Interrupt setting /*************************************************/ void Init_Timer1(void) { ConfigIntTimer1( T1_INT_PRIOR_7 & T1_INT_ON ) ; // Timer1 的中斷優先等級設 7 (最高) // Timer1 的中斷 ON
OpenTimer1( T1_ON & T1_IDLE_STOP & T1_GATE_OFF & // Timer1 Period as 2 Second T1_PS_1_256 & T1_SYNC_EXT_OFF & T1_SOURCE_INT , (long)((Fosc/4/1000)* 200 )/256 ) ; }
void delay() { long int i ; for( i = 0 ; i <= 10000 ; i++ ) continue; }
發表於: 2010/1/13 18:08
|
|
|
dsPIC33FJ128MC708 控制 SN74LS164
|
|
新會員
![新會員](https://microchip.com.tw/uploads/rank3e632f95e81ca.gif)
Joined
: 2010/1/12 21:48 最後登入時間
: 2010/1/13 18:04
Group:
註冊會員
Level : 1 HP : 0 / 0 MP : 0 / 28 EXP : 2
|
我正在使用 dsPIC33FJ128MC708 晶片連接至 SN74LS164 ,
來控制 點矩陣LED 做一些幾何圖形的顯示。(例如:小綠人)
目前只能整排及整列亮燈,而無法單一點或局部亮燈。
在此附上我的SN74LS164寫在PIC的程式碼。
void p74164() { int a ;
for( a = 0 ; a <= 7 ; a++ ) { LATBbits.LATB2 = 0 ;
if( data_buf1 >= 128 ) { LATBbits.LATB3 = 1 ; data_buf1 = data_buf1 - 128 ; } else LATBbits.LATB3 = 0 ;
data_buf1 = data_buf1 << 1 ;
if(data_buf2 >= 128 ) { LATBbits.LATB5 = 1 ; data_buf2 = data_buf2 - 128 ; } else LATBbits.LATB5 = 0 ;
data_buf2 = data_buf2 << 1 ;
LATBbits.LATB2 = 1 ;
}
LATBbits.LATB2 = 0 ; }
發表於: 2010/1/12 22:04
|
|
You can view topic.
你 不可以 發起新主題
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You cannot attach files to posts.
You cannot post without approval.
You cannot use topic type.
You cannot use HTML syntax.
You cannot use signature.
You cannot create PDF files.
You cannot get print page.