棋牌的设计,附源码和仿真图
单片机源程序如下:
- #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)
|