棋牌的設計,附源碼和仿真圖
單片機源程序如下:
- #include <MSP430f249.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar const led_tab[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //共陰數碼管段選碼表,無小數點
- uchar key; //按鍵值
- uint flag1=0,flag2=0,flag3=0;
- void delayus(uint t)
- {
- uint i;
- while(t--)
- for(i=1300;i>0;i--);
- }
- void system_Initial(void)
- {
- P3SEL &= 0x00; //選擇P3為輸入/輸出口
- P3DIR |= 0XFF; //選擇P3為輸出功能
- P3OUT=0xFF;
-
- P1DIR = 0xFF; // 設置方向為輸出
- P4DIR = 0xFF; // 設置方向為輸出
- P2DIR = BIT0 + BIT1+BIT2+BIT3;
- P1OUT = 0x00; //LED輸出全部關閉
- P4OUT = 0x00; //LED輸出全部關閉
- P2OUT = BIT0 + BIT1+BIT2+BIT3;
- P2IE |= BIT4+BIT5+BIT6; //P2.2中斷使能
- P2IES |= BIT4+BIT5+BIT6; //P2.2下降沿中斷
- P2IFG &=~(BIT4+BIT5+BIT6); //P2.2清除中斷標志
- _EINT();
- }
- // 端口2中斷服務程序
- #pragma vector=PORT2_VECTOR
- __interrupt void Port_2(void)
- {
-
- P2IFG &= ~(BIT4+BIT5+BIT6); //清除中斷標志
- }
- //**********************************************************************
- int main(void)
- {
- uchar i;
- uchar count = 29; //計數值
- uchar disp_buf[4]; //顯示緩沖區
- WDTCTL = WDTPW + WDTHOLD; // 關閉看門狗
- system_Initial();
- while(1)
- {
- if(!(0x10 & P2IN)) {
- flag1=1;
- if(flag2==1)
- count=29;
- flag2=0;
-
- }
- if(!(0x20 & P2IN)) {
- flag2=1;
- if(flag1==1)
- count=29;
- flag1=0;
- }
- if(!(0x40 & P2IN)) {
- flag3=1;
- }
-
- if(flag1 == 1)
- {
- flag3=0;
- if(count>0)
- {
- disp_buf[1] = count / 10; //對計數值取十位數
- disp_buf[0] = count % 10; //對計數值取個位數
- for(i = 0;i < 25; i++) //總共循環25次,計時1s
- {
- P1OUT = 0;
- P1OUT = led_tab[disp_buf[1]];
- P2OUT = ~BIT0; //顯示十位數
- delayus(2); //軟件仿真時,取20不閃爍
- P1OUT = 0;
- P1OUT = led_tab[disp_buf[0]];
- P2OUT = ~BIT1; //顯示個位數
- delayus(2); //軟件仿真時,取20不閃爍
- }
- count--;
- }
- if(count==0)
- {
- P1OUT = 0;
- P1OUT = led_tab[0]; //30s倒計時結束,顯示0;
- P2OUT = ~BIT1;
- P3OUT=~BIT1;
- }
- }
-
- if(flag2 == 1)
- {
- flag3=0;
- if(count>0)
- {
- disp_buf[3] = count / 10; //對計數值取十位數
- disp_buf[2] = count % 10; //對計數值取個位數
- for(i = 0;i < 25; i++) //總共循環25次,計時1s
- {
- P4OUT = 0;
- P4OUT = led_tab[disp_buf[3]];
- P2OUT = ~BIT2; //顯示十位數
- delayus(2); //軟件仿真時,取20不閃爍
- P4OUT = 0;
- P4OUT = led_tab[disp_buf[2]];
- P2OUT = ~BIT3; //顯示個位數
- delayus(2); //軟件仿真時,取20不閃爍
- }
- count--;
- }
- if(count==0)
- {
- P4OUT = 0;
- P4OUT = led_tab[0]; //30s倒計時結束,顯示0;
- P2OUT = ~BIT3;
- P3OUT=~BIT0;
- }
- }
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
棋牌.rar
(152.8 KB, 下載次數: 18)
2018-1-10 04:08 上傳
點擊文件名下載附件
|