?? msp430_7279.txt
字號:
/**********************************************************/
//時鐘設置:
////ACLK=N/A,MCLK=SMCLK=default(DCO~1MHz)
//硬件連接:
//// MSP430 Broad HD7279 Broad
//// ------------------ ------------------
//// | VCC | ------> | VCC |
//// | P1.3 | ------> | CS |
//// | P1.2 | ------> | CLK |
//// | P1.1 | <-----> | DAT |
//// | P1.0 | <------ | KEY(INT) |
//// | GND | ------> | GND |
//// ------------------ ------------------
//當前演示程序功能描述:
////當有按鍵按下時,430進入中斷讀取鍵值,顯示在LED數碼管上
/*********************************************************/
#include <MSP430X20X3.H>
#define HD7279_CS BIT3
#define HD7279_CLK BIT2
#define HD7279_DAT BIT1
#define HD7279_KEY BIT0
#define HD7279_DIR P1DIR
#define HD7279_OUT P1OUT
#define HD7279_IN P1IN
#define HD7279_INT_DIR P1DIR
#define HD7279_INT_IE P1IE
#define HD7279_INT_IES P1IES
#define HD7279_INT_IFG P1IFG //定義MSP430端口
#define HD7279_CS_LO HD7279_OUT &= ~HD7279_CS
#define HD7279_CS_HI HD7279_OUT |= HD7279_CS
#define HD7279_CLK_LO HD7279_OUT &= ~HD7279_CLK
#define HD7279_CLK_HI HD7279_OUT |= HD7279_CLK
#define HD7279_DAT_LO HD7279_OUT &= ~HD7279_DAT
#define HD7279_DAT_HI HD7279_OUT |= HD7279_DAT
#define HD7279_RESET HD7279_Send1(0xA4)
#define HD7279_TEST HD7279_Send1(0xBF)
#define HD7279_LMOV HD7279_Send1(0xA1)
#define HD7279_RMOV HD7279_Send1(0xA0)
#define HD7279_RLMOV HD7279_Send1(0xA3)
#define HD7279_RRMOV HD7279_Send1(0xA2) //定義HD7279功能
const unsigned char DelayConst = 0; //系統延時
const unsigned char Code[3]={ //顯示方式
0x80,0xC8,0x90
};
const unsigned char Keys[16]={ //按鍵編碼
//0x02,0x30,0x32,0x34,0x20,0x22,0x24,0x10,0x12,0x14,0x36,0x26,0x16,0x06,0x00,0x04
0x1D,0x07,0x1F,0x17,0x04,0x1C,0x14,0x06,0x1E,0x16,0x27,0x24,0x26,0x25,0x05,0x15
};
void HD7279_Delayt(unsigned int dtime);
void HD7279_Send1(unsigned char dat);
void HD7279_Send2(unsigned char add,unsigned char dat);
void HD7279_Show(unsigned char add,unsigned char coding,unsigned char d);
void HD7279_Init(void);
void OSC_Init(void);
unsigned char HD7279_ReadKey(void);
void main(void) {
WDTCTL = WDTPW + WDTHOLD;
BCSCTL1 = CALBC1_1MHZ; // Set DCO to 1MHz
DCOCTL = CALDCO_1MHZ;
HD7279_Init();
HD7279_INT_DIR &= ~HD7279_KEY;
HD7279_INT_IE |= HD7279_KEY;
HD7279_INT_IES |= HD7279_KEY;
_BIS_SR(GIE);
while(1);
}
//中斷服務程序
////讀取鍵值并顯示
#pragma vector=PORT1_VECTOR
__interrupt void PORT1_ISR (void) {
unsigned char keyword;
unsigned int i;
keyword = HD7279_ReadKey();
for(i=0;i<8;i++) {
HD7279_Show(i,1,keyword);
}
HD7279_INT_IFG = 0;
}
//初始化程序
////設定端口和中斷,初始化HD7279
void HD7279_Init(void) {
HD7279_DIR |= (HD7279_CS + HD7279_CLK + HD7279_DAT);
HD7279_CS_HI;
HD7279_CLK_LO;
HD7279_RESET;
}
//向HD7279發送一個字節(命令)
void HD7279_Send1(unsigned char dat) {
unsigned char itemp;
HD7279_CS_LO;
HD7279_Delayt(1);
for(itemp=0;itemp<8;itemp++) {
if((dat<<ITEMP) pre < } for(jtemp="0;jtemp<DelayConst;jtemp++);" for(itemp="0;itemp<8;itemp++)" itemp,jtemp; int unsigned { dtime) HD7279_Delayt(unsigned void itemp; return break; if(dat="=Keys[itemp])" HD7279_CS_HI; |="BIT0;" HD7279_DIR & dat="0x15;" else HD7279_DAT) if((HD7279_IN&HD7279_DAT)="=" dat<<="1;" HD7279_CLK_LO; HD7279_Delayt(1); HD7279_CLK_HI; HD7279_DAT_LO; HD7279_DAT_HI; BIT7) if((dat<<itemp) HD7279_CS_LO; dat; char HD7279_ReadKey(void) 向HD7279發送命令后,讀取按鍵鍵值,并查表返回結果 HD7279_Send2(Code[coding]+add,d); d) coding,unsigned add,unsigned HD7279_Show(unsigned 按照編碼方式顯示字符 if((add<<itemp) dat) HD7279_Send2(unsigned 向HD7279發送兩個字節(命令+數據)>
<SCRIPT src="/inc/gg_read2.js"></SCRIPT>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -