欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
MSP430單片機控制LED數(shù)碼管顯示4X4矩陣鍵盤鍵值C語言程序
[打印本頁]
作者:
xueren
時間:
2013-7-14 04:54
標題:
MSP430單片機控制LED數(shù)碼管顯示4X4矩陣鍵盤鍵值C語言程序
MSP430F149單片機開發(fā)板矩陣鍵盤控制程序,通過數(shù)碼管顯示按鍵值,采用逐行掃描,4X4鍵盤接在P1口,通過控制IO口狀態(tài)變化,逐行掃描按鍵是否按下。調(diào)試環(huán)境:EW430 V5.30
Config.h頭文件
#define CPU_F ((double)8000000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
/*當BRCLK=CPU_F時用下面的公式可以計算,否則要根據(jù)設置加入分頻系數(shù)*/
#define baud 9600 //設置波特率的大小
#define baud_setting (uint)((ulong)CPU_F/((ulong)baud)) //波特率計算公式
#define baud_h (uchar)(baud_setting>>8) //提取高位
#define baud_l (uchar)(baud_setting) //低位
#define LED8PORT P2OUT //P2接8個LED燈
#define LED8SEL P2SEL //P2接8個LED燈
#define LED8DIR P2DIR //P2接8個LED燈
#define DATAPORT P4OUT //數(shù)據(jù)口所在端口P4
#define DATASEL P4SEL //數(shù)據(jù)口功能寄存器,控制功能模式
#define DATADIR P4DIR //數(shù)據(jù)口方向寄存器
#define CTRPORT P6OUT //控制線所在的端口P6
#define CTRSEL P6SEL //控制口功能寄存器,控制功能模式
#define CTRDIR P6DIR //控制口方向寄存器
#define DCTR0 P6OUT &= ~BIT4 //數(shù)碼管段控制位信號置低
#define DCTR1 P6OUT |= BIT4 //數(shù)碼管段控制位信號置高
#define WCTR0 P6OUT &= ~BIT3 //數(shù)碼管位控制位信號置低
#define WCTR1 P6OUT |= BIT3 //數(shù)碼管位控制位信號置高
#define KEYPORT P1OUT //按鍵所在的端口P1
#define KEYSEL P1SEL //控制口功能寄存器,控制功能模式
#define KEYDIR P1DIR //控制口方向寄存器
#define KEYIN P1IN //鍵盤掃描判斷需要讀取IO口狀態(tài)值
uchar key; //鍵值變量
//***********************************************************************
// 共陰數(shù)碼管顯示的斷碼表
//***********************************************************************
uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//***********************************************************************
// 系統(tǒng)時鐘初始化
//***********************************************************************
void Clock_Init()
{
uchar i;
BCSCTL1&=~XT2OFF; //打開XT2振蕩器
BCSCTL2|=SELM1+SELS; //MCLK為8MHZ,SMCLK為8MHZ
do{
IFG1&=~OFIFG; //清楚振蕩器錯誤標志
for(i=0;i<100;i++)
_NOP();
}
while((IFG1&OFIFG)!=0); //如果標志位1,則繼續(xù)循環(huán)等待
IFG1&=~OFIFG;
}
//***********************************************************************
// MSP430內(nèi)部看門狗初始化
//***********************************************************************
void WDT_Init()
{
WDTCTL = WDTPW + WDTHOLD; //關閉看門狗
}
//***********************************************************************
// 關閉數(shù)碼管
//***********************************************************************
void Close_LED()
{
DATASEL = 0x00; //設置IO口為普通I/O模式,此句可省
DATADIR = 0xFF; //設置IO口方向為輸出
DATAPORT = 0xFF; //P4口初始設置為FF
CTRSEL = 0x00; //設置IO口為普通I/O模式,此句可省
CTRDIR |= BIT3 + BIT4; //設置IO口方向為輸出,控制口在P63,P64
CTRPORT = 0xFF; //P6口初始設置為FF
DCTR1; //關掉數(shù)碼管,以免顯示亂碼
WCTR1;
DATAPORT=0xFF; //關數(shù)碼管
WCTR0;
}
復制代碼
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1