下面的函数是一个用按键来控制数码管显示,我通过P1的中断来实现不断地计数加一显示,最大的显示数字是999,但是现在我的程序老是不能得到我想要的结果,那位大神能够帮我解决这个问题。
#include <msp430x14x.h>
typedef unsigned char uchar;
typedef unsigned int uint;
uchar Table[10]={0xc0,0Xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//所需的段的位码
#define wei_h P5OUT|= BIT5
#define wei_l P5OUT&= ~BIT5
#define duan_l P6OUT &= ~BIT6
#define duan_h P6OUT |= BIT6
uint x,y,z,v, date=0;//定义数据类型
void DelayMS(uint i)
{
uint j;
for(;i!=0;i--)
{
for(j=200;j!=0;j--);
}
}
void Pre_Display()
{
x=date/1000; //求千位
y=date%1000/100;//求百位
z=date%100/10; //求十位
v=date%10; //求个位
P4OUT=Table[z]; //显示千位
duan_h;
duan_l;
P4OUT = 0XEF;
wei_h;
wei_l;
DelayMS(5); //延时
P4OUT=Table[x]; //显示百位
duan_h;
duan_l;
P4OUT = 0XDF;
wei_h;
wei_l;
DelayMS(5); //延时
P4OUT=Table[z]; //显示十位
duan_h;
duan_l;
P4OUT = 0XBF;
wei_h;
wei_l;
DelayMS(5); //延时
P4OUT=Table[v]; //显示个位
duan_h;
duan_l;
P4OUT = 0X7F;
wei_h;
wei_l;
DelayMS(5); //延时
}
void main(void)//主函数
{
P2DIR = 0xFF;
P2OUT = 0xFF;
P4DIR = 0XFF; //设置P4口为输出
P5DIR = 0XFF; //设置P5口为输出
P6DIR = 0xFF;
P1DIR = 0x00;
P1IE = 0xff;
P1IES = 0xff;
P1IFG=0;
WDTCTL=WDTPW+WDTHOLD;//关闭看门狗
_BIS_SR(LPM3_bits + GIE); //CPU进入LPM3低功耗模式,同时打开全局中断
}
#pragma vector=PORT1_VECTOR
__interrupt void P1VECTOR(void)
{
if(P1IFG&0x08!=0)
{
Pre_Display();
date++;
if(date>=999)
date=0;
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
可是我该过程序后任然是把扫描放到中断里面能够看到现象,就是每按一次键会出现闪的一下,之后就只有个位辉=会显示出数字而十位百位千位不会显示。我调整扫描时间还是不行,会不会因为中断只进入一次,过去以后就会消失,请大神指教。
是有点问题,但是还不知道怎么解决,谢谢你的解答。
一周热门 更多>