基于Atmega8的数字钟源程序

来源:本站
导读:目前正在解读《基于Atmega8的数字钟源程序》的相关信息,《基于Atmega8的数字钟源程序》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《基于Atmega8的数字钟源程序》的详细说明。
简介:本文给大家提供一个基于Atmega8的数字钟源程序。

/*

************************************************************

程序介绍:基于Atmega8的数字钟,实现六位显示“00:00:00”

************************************************************

*/

#i nclude <avr/io.h>

#i nclude <avr/interrupt.h>

#define uchar unsigned char

#define uint unsigned int

#define seg_code PORTD //数据口

#define seg_com PORTC //位选通

/*************************************************************************/

uchar seven_seg[10]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};

uchar scan[6]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,};

/*************************************************************************/

typedef struct

{

uchar hour;

uchar minute;

uchar second;

} time;

uint timer0_num=0;

uchar com=0;

time now;

/*

************************************************************

函数功能:端口初始化

输入参数:无

输出参数:无

返 回 值:无

************************************************************

*/

void PORT_Init(void)

{

DDRB=0XFF;

DDRC=0XFF;

DDRD=0XFF;

PORTB=0XFF;

PORTC=0XFF;

PORTD=0XFF;

}

/*

************************************************************

函数功能:定时器0初始化

输入参数:无

输出参数:无

返 回 值:无

************************************************************

*/

void TIMER0_Init(void)

{

TCCR0=0X02; //定时器0时钟源8分频,大约延时2ms(8*256/1000000)

TCNT0=0X00; //定时器赋初值

TIMSK=_BV(TOIE0); //开定时器0

}

/*

************************************************************

函数功能:主函数

输入参数:无

输出参数:无

返 回 值:无

************************************************************

*/

void main (void)

{

TIMER0_Init();

PORT_Init();

sei();

while (1);

}

/*

************************************************************

函数功能:定时器0溢出中断函数,时间的显示变化都在这里面

输入参数:无

输出参数:无

返 回 值:无

************************************************************

*/

ISR(TIMER0_OVF_vect)

{

timer0_num++;

if (timer0_num==500) //定时到1s时,执行相应的显示时间操作

{

timer0_num=0;

now.second++;

if(now.second==60)

{

now.minute++;

now.second=0;

if(now.minute==60)

{

now.hour++;

now.minute=0;

if(now.hour==24)

now.hour=0;

}

}

}

switch(com)

{

case 0 : seg_code=~seven_seg[now.second%10];break;

case 1 : seg_code=~seven_seg[now.second/10];break;

case 2 : seg_code=~seven_seg[now.minute%10];break;

case 3 : seg_code=~seven_seg[now.minute/10];break;

case 4 : seg_code=~seven_seg[now.hour%10];break;

case 5 : seg_code=~seven_seg[now.hour/10];break;

default: break;

}

seg_com=scan[com];

com++;

if(com==6) com=0;

}

提醒:《基于Atmega8的数字钟源程序》最后刷新时间 2024-03-14 01:00:16,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《基于Atmega8的数字钟源程序》该内容的真实性请自行鉴别。