当前位置:文档之家› 单片机时钟数码管显示程序

单片机时钟数码管显示程序

#include//函数头文件
#include//延时函数头文件
#include//中断头文件
const unsigned char led_7[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//数码管显示0-9对应段码
unsigned char position[4]={0xEF,0xDF,0xBF,0x7F};//控制4位数码管显示的段码值
unsigned char time[2];
volatile unsigned char dis_buff[4]; //显示缓冲区,存放要显示的4个字符段码值

unsigned char point_on=0xFF;//最高位电平控制小数点显示
volatile unsigned char a=0,b=0;//定义变量a,b,并初始化

volatile unsigned int time_1s_ok=0,time_counter,t=0;
unsigned char i;
ISR(INT1_vect)//INT0中断服务程序:实现秒表的暂停和继续计时
{
if(t==1||t==3)
{
dis_buff[t-1]=dis_buff[t-1]+1;
if(dis_buff[t-1]==10)
dis_buff[t-1]=0;
_delay_ms(2);
}
if(t==2||t==4)
{
dis_buff[t-1]=dis_buff[t-1]+1;
if(dis_buff[t-1]==6)
dis_buff[t-1]=0;
_delay_ms(2);
}


}

ISR(INT0_vect)//INT1中断服务程序:将秒表显示时间置为00.00
{


t=t+1;

TCCR2=0x00;
if(t>4)
{
t=0;

TCCR2=0x04;
}
}


void display(void) //扫描显示函数,执行时间为80ms
{
unsigned char i;
for (i=0;i<=3;i++)
{
PORTB = led_7[dis_buff[i]];
if(point_on&&(i==2))//小数点显示条件
PORTB&= ~(1<<7);
PORTD = position[i];

PORTD = 0xFF;//关闭数码管显示

}
}

ISR(TIMER2_OVF_vect)
{
TCNT2=6;
display();
if(++time_counter>=500)

{
time_counter=0;
time_1s_ok=1;
}

}

void time_to_disbuffer(void)//时间值送到显示缓冲区函数
{
unsigned char i,j = 0;
for(i = 0;i<2;i++)//将低两位和高两位的个位和十位分别分开
{
dis_buff[j++] = time[i] % 10;
dis_buff[j++] = time[i] / 10;
}
}

int main(void) //定义主函数
{

OSCCAL=0x9E;

PORTB = 0x00;//初始化
DDRB = 0xFF;
PORTD = 0x78;
DDRD = 0xFF;
time[1] = 20;time[0] = 00;
time_to_disbuffer();//将时间初始值送到显示缓冲区函数
GICR=0xc0;
MCUCR=0x0A;
GIFR=0xc0;


TIMSK|=(1<
TCCR2|=(1<TCNT2=6;//设定时间初值,定时时间为10ms


sei();


while(1)//执行无限次循环
{

//调用扫描显示函数
if(time_1s_ok)//当a=1时,满足条件
{
time_1s_ok=0;

if(++time[0]>=60)//低两位达到99,高两位进1,低两位置0
{
time[0] = 0;
if(++time[1]>=60)//当达到59秒时,高两位置0
{
time[1] = 0;
}
}

time_to_disbuffer();


}
if(t!=0)
{
if(t==1)
{

PORTD=0X7F;
_delay_ms(1);
PORTD=0XFF;
_delay_ms(1);
}
if(t==2)
{
PORTD=0XBF;
_delay_ms(1);
PORTD=0XFF;
_delay_ms(1);
}
if(t==3)
{
POR

TD=0XDF;
_delay_ms(1);
PORTD=0XFF;
_delay_ms(1);
}
if(t==4)
{
PORTD=0XEF;
_delay_ms(1);
PORTD=0XFF;
_delay_ms(1);
}

}








}
}


相关主题
文本预览
相关文档 最新文档