单片机电子时钟论文设计.doc
文本预览下载声明
基于AVR单片机的数字时钟设计
摘要:本设计是基于ATmeg16单片机开发平台和自动控制原理的基础上实现的一种高精度、智能化的数字时钟系统。该系统采用ATmeg16单片机作为控制核心,通过编程去驱动8个数码管实现的。时钟芯片、数码管显示驱动芯片Proteus型ISIS实物仿真软件单片机的电子钟既能准确验证所设计的是否满足技术要求,又能提高设计的效率和质量,降低成本,具有推广价值。; 时钟芯片 ;数码管显示驱动芯片
时钟中断程序流程图:
按键程序流程图:
第一图为时钟和闹钟的调节.
(2)实物仿真图:
以下为ISIS软件仿真图,验证设计是成功的!
图A 图B
(3)软件设计及调试 在这次设计中用到Proteus的ISIS软件Code Vision AVR编辑软件和AVRStudio4调试。其程序如下:
{
PORTC = 0xff;
PORTA = led_7[dis_buff[posit]];
if (point_on (posit==2||posit==4)) PORTA |= 0x80;
PORTC = position[posit];
if (++posit =6 ) posit = 0;
}
// Timer 0 比较匹配中断服务
interrupt [TIM0_COMP] void timer0_comp_isr(void)
{
display(); // 调用LED 扫描显示
if (++time_counter=100)
{
time_counter = 0;
time_1s_ok = 1;
}}
void time_to_disbuffer(void) // 时钟时间送显示缓冲区函数
{
char i,j=0;
for (i=0;i=2;i++)
{
dis_buff[j++] = time[i] % 10;
dis_buff[j++] = time[i] / 10;
}}
// INT0 中断服务程序
interrupt [EXT_INT0] void ext_int0_isr(void)
{
if (++time[2]=24) time[2] = 0;
}
// INT1 中断服务程序
interrupt [EXT_INT1] void ext_int1_isr(void)
{
if (++time[1]=60) time[1]=0;
}
void main(void)
{
PORTA=0x00; // 显示控制I/O 端口初始化
DDRA=0xFF;
PORTC=0x3F;
DDRC=0x3F;// T/C0 初始化
PORTA=0xFF;
DDRA=0xFF;
GICR|=0xC0; // 允许INT0、INT1 中断
MCUCR=0x0A; // INT0、INT1 下降沿触发
GIFR=0xC0; // 清除INT0、INT1 中断标志位
TCCR0=0x0B; // 内部时钟,64 分频(4M/64=62.5KHz),CTC 模式
TCNT0=0x00;
OCR0=0x7C; // OCR0 = 0x7C(124),(124+1)/62.5=2ms
TIMSK=0x02; // 允许T/C0 比较匹配中断
time[2] = 14; time[1] = 01; time[0] = 55; // 设时间初值23:58:55
posit = 0;
time_to_disbuffer();
#asm(sei) // 开放全局中断
while (1)
{
if (time_1s_ok) // 1 秒到
{
time_1s_ok = 0;
point_on = ~point_on;
if (++time[0] = 60) // 以下时间调整
{
time[0] = 0;
if (++time[1] = 60)
{
time[1] = 0;
if (++time[2] = 24) time[2] = 0;
}}
(4) 结束语
、、、、、、、、尤其是AVR单片机可以用高级语言编程,极容易地实现系统移植,并且加快了软件的开发过程。、以Mage16单片机为核心,辅以必要的电路,采用高级C语言编程,汁了一个简易的电子时钟,由4.5 V直流电源供电,通过能够准确显示时间。
定时器及中断寄存器初始化
开始
是否设定参数
执行显示程序
执行时钟、秒表、闹钟设定程序
显示全部