AVR单片机的时钟设计_单片机时钟设计
AVR单片机的时钟设计由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“单片机时钟设计”。
基于AVR单片机Mega16的时钟设计报告
1摘 要
近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断地走向深入,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,因此越来越广泛地应用各个领域.本文的电子钟系统是以单片机(ATmega16)为核心,时钟芯片、数码管显示驱动芯片等元器件组成。具体介绍应用Proteus的ISIS软件进行单片机系统的电子钟设计与仿真的实现方法。该方法既能准确验证所设计的系统是否满足技术要求,又能提高系统设计的效率和质量,降低开发成本,具有推广价值。
关键词:单片机; 时钟芯片 ;数码管显示驱动芯片 ;电子钟
2引 言
单片机电子时钟系统可以用多种技术手段实现。本文借助于Proteus仿真系统进行系统虚拟开发成功之后再进行实际操作,可以节约开发时间,降低开发成本,具有很大的灵活性和可扩展性。在国外有包括斯坦福、剑桥等在内的几千家高校将Proteus作为电子工程学位的教学和实验平台;在国内也有众多大学正在体验Proteus的独一无二的功能并申报大学计划。该方法具有普遍意义。通过实际应用发现,采用该方法可以大大简化硬件电路测试和系统调试过程中电路板制作、元器件安装、焊接等过程。很明显,使用该方法可以提高开发效率、降低开发成本、提升开发…
AVR系列的单片机不仅具有良好的集成性能,而且都具备在线编程接口,其中的系列还具备仿真和下载功能;含有片内看门狗电路、片内程序FLASH、同步串行接口SPI;多数AVR单片机还内嵌了A/D转换器、EEPROM、模拟比较器、PWM定时计数器等多种功能;AVR单片机的I/O接口具有很强的驱动能力,灌人电流可直接驱动继电器、LED等元件,从而省去驱动电路,节约系统成本。
3设计思路
利用单片机(ATmega16)制作简易电子时钟,由六个LED数码管分别显示小时十位、小时个位、分钟十位、分钟个位、秒钟十位、秒钟个位。6个PNP管分别控制六个数码管的亮灭,此外还可以实现时间调整、等多种实用功能。整个设计分硬件和软件两大部分。硬件部分采用MEGA16单片机作为可编程芯片,字符液晶作为信号显示;软件部分利用C语言作为设计语言,对MEGA16进行编程实现各种功能。
硬件设计电路分解为单片机、晶体振荡器和数码管3个部分,其结构简单,经济实惠。单片机内部晶体振荡器的外接电路。由两个电容和晶体振荡器构成,其电路如图1所示。图中X1和X2分别接MEGA16的两个脉冲控制端,使得MEGA16的内部脉冲电路为电子时钟和整个系统时钟提供脉冲。
图1所示给出了采用单片机外加电源及晶体振荡器构成最小单片机系统。配合单片机开发的设计、调试和下载,最终将时钟信息从端口输出到字符液晶显示。
图26位模式与单片机的端口相连。
4软件设计及调试过程
软件设计包括Proteus的ISIS软件、Code Vision AVR编辑软件和AVRStudio4调试。利用ISP将生成程序timer.cof 下载到目标板。其主要程序如下:
void display(void)// 6 位LED 数码管动态扫描函数
{
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
{
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:5
5posit = 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;
}
} time_to_disbuffer();// 新调整好的时间送显示缓冲区
5总结心得
这次设计报告培养了学生综合运用所学知识,发现,提出,分析和解决问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。
回顾起此次单片机设计,我仍感慨颇多,的确,从选题到定稿,从理论到仿真,在这些日子里,我学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说不懂一些元器件的使用方法,对单片机汇编语言掌握得不好……通过这次课程设计之后,一定把以前所学过的知识重新温故。
这次设计终于顺利完成了,在设计中遇到了很多编程问题,最后在老师的辛勤指导下,终于游逆而解。同时,在老师那里我学得到很多实用的知识,在次我表示感谢!同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!
}结束语
单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。尤其是AVR单片机可以用高级语言编程,极容易地实现系统移植,并且加快了软件的开发过程。这次设计通过对它的学习、应用,以Mage16单片机为核心,辅以必要的电路,采用高级C语言编程,设汁了一个简易的电子时钟,由
4.5 V直流电源供电,通过数码管能够准确显示时间。