#include <msp430f2491.h>
#define CPU_F ((double)1000000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
const int a[10]={0xc0,0xf9,0xa4,0x60,0x99,0x92,0x82,0xf8,0x80,0x90};
int juli_cm[4];
int T_COUNT;
float d;
int D;
void init_port( )
{
P1DIR=0x10; //P1端口输入模式
P2DIR=0xFF; //P2端口输出模式
P1SEL=0x10; //P1端口引脚功能选择器,变为功能端口,作为中断使用
P1IE=0x01; //P1端口允许中断
P1IES=0x00; //P1端口上升沿产生中断
P4DIR=0xFF; //P4端口初始化,为输出模式
P6DIR=0xFF; //P6端口初始化,为输出模式
}
void disp( ) //显示模块
{
//P6OUT=0x01; //依次使用数码管,再将值赋给数码管
//P4OUT=a[1];
P6OUT=0x07;
delay_us(1000);
P4OUT=juli_cm[3];
// P4OUT=a[2];
delay_us(1000);
P6OUT=0x0B;
delay_us(1000);
P4OUT=juli_cm[2];
delay_us(1000);
// P4OUT=a[3];
P6OUT=0x0D;
delay_us(1000);
P4OUT=juli_cm[1];
delay_us(1000);
// P4OUT=a[4];
P6OUT=0x0E;
delay_us(1000);
P4OUT=juli_cm[0];
delay_us(1000);
}
#pragma vector=PORT1_VECTOR //中断服务子程序
__interrupt void P1_IRQ(void)
{
// while(P1IN&0x01==0x01); //如果持续着高电平,就让中断程序等在那边等待低电平调变
TACTL=0x02C0; //中断模式关闭
T_COUNT=TAR;
TAR=0;
d=T_COUNT*0.017;
D=d*10+0.5;
juli_cm[3]=a[D/1000];
juli_cm[2]=a[D%1000/100];
juli_cm[1]=a[D%100/10];
juli_cm[0]=a[D%10];
P1IFG=0x00;
}
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
init_port(); //调入初始化函数
_EINT();
P1IFG=0x00;
while(1) //进入循环
{
P2OUT=0x01; //P2端口输出高电平
TACTL=0x02E0; //中断模式开启,同时进行计数,连续计数模式
delay_us(1); //延时20us
P2OUT=0x00; //P2端口跳变为低电平
delay_us(1); //延时20us
P2OUT=0x01;
disp( ); //调入显示模块
}
}
这是我的程序 麻烦大神们看一下
|