当前位置:文档之家› 单片机,数字时钟课程设计完整版

单片机,数字时钟课程设计完整版

课程设计任务书学生姓名:江勇峰专业班级:自动化0607 指导教师:刘教瑜工作单位:武汉理工大学自动化学院题目: 简易数字时钟初始条件:用C语言编写程序,实现简易数字时钟的功能。

要求完成的主要任务:(1)简易数字时钟能实现时、分、秒的数字显示;(2)可以对时钟、分钟进行调节并且校正。

近几年,单片机在各个领域得到广泛的使用。

从工业到人们的日常生活,大部分的科技产品都是通过单片机来控制。

在它问世之前,自动控制设备不能被广泛的使用,这是因为控制设备的体积庞大,耗电量大,价格昂贵。

在第一台微处理器成功研制不久,第一个单片机就问世了。

因为其小巧的体积,低功耗,以及高效的性能,单片机受到了大家的欢迎。

今天,单片机成为了解决低复杂度,中等复杂度控制问题的传统选择。

文章介绍了单片机在定时方面的基本功能。

生活中,我们发现:时间的准确显得格外的重要。

我们选择的方法是单片机开发设计使用的传统方法,通过本次设计,可以了解整个单片机开发的流程。

文章首先介绍了单片机的基本知识,然后同时给出了框图,流程图等。

论文涵盖了从需求分析,系统设计,编程,原理图等产品开发的基本过程。

关键词:单片机,软件仿真,原理图AbstractSingle Chip Microcomputer has achieved a immemse popularity in all fileds in recent years.From industry to people’s common lives,most of technical applications are controlled by SCM. Before it appeared,the automatic devices could’t be widely used because of their huge size ,large quantity of power cost and high price.The first SCM appeared as soon as the first MCU(MicroController Unit) was successfully developed.Due to its small size,low power cost and high performance,it has been welcomed by people.Nowadays, SCM has been selected as a traditional solution for low or medium complexity problems about devices controlling.This essay shows a basic application of SCM in timing for people’s life. Time accuracy is a vital factor that effects the results.The approach we choose is the common way for SCM developing from which we can get an acknowledge about the SCM develop flowing process.The paper first introduces knowledge on 51 serial SCM,then At it also shows block diagrams,flowing process diagrams and so on. It presents the process including requirement analysis ,system design,SCM programming ,program emulation , which forms a complete procedure for product manufacture。

Key words: SCM,software emulation,schemetic目录1单片机的基本知识 (3)1.1数码管动态显示原理 (3)1.2键盘扫描原理 (4)2程序说明和流程图 (6)2.1程序说明 (6)2.2流程图 (8)3程序设计 (9)4实验仿真和验证 (13)5心得体会 (14)6参考文献 .................................................................................... 错误!未定义书签。

简易数字时钟1单片机的基本知识1.1数码管动态显示原理GNDabcdefgdpgfedcba(a)(b)图1数码管显示原理图如图1数码管显示原理图所示,使用LED显示器时,要注意是共阴还是共阳,要注意区分这两种不同的接法。

为了显示数字或字符,必须对数字或字符进行编码。

七段数码管加上一个小数点,共计8段。

因此为LED显示器提供的编码正好是一个字节。

我们用的是共阴LED显示器,根据电路连接图显示16进制数的编码已列在下表。

0x3f , 0x06 , 0x5b , 0x4f , 0x66 , 0x6d ,0 1 2 3 4 50x7d , 0x07 , 0x7f , 0x6f , 0x77 , 0x7c ,6 7 8 9 A B0x39 , 0x5e , 0x79 , 0x71 , 0x00C D E F 无显示动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效,由另一位控制显示码值。

选亮数码管采用动态扫描显示。

所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。

动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。

我们这里正是利用的数码管动态显示来完成显示功能。

1.2键盘扫描原理键盘分编码键盘和非编码键盘,键盘上闭合键的识别由专用的硬件编码器实现,并产生按键编码号或键值的称为编码键盘,如计算机键盘。

而靠软件编程来识别的称为非编码键盘,在单片机组成的各种系统中,用的最多的是非编码键盘,也有用到编码键盘的,我们这里用的就是非编码键盘。

如图2键盘图所示,当按钮按下时;端口会变成低电平,我们设计一段扫描程序来判断那个端口是低电平来判断是否有按键按下。

图2键盘图2程序说明和流程图2.1程序说明此实时时钟的设计和实现,主要采用了6只LED数码管,加Atmega128单片机,包括显示模块,运算模块和校时模块三大功能模块。

显示模块:用Atmega128控制,用数码管的显示功能来设计。

显示部分硬件用六只LED 为显示管,这些LED发光二极管的阴极是互相连接在一起的,所以称为共阴极数码管。

通过在这8只发光二极管的阳极加+5 V或0 V的电压使不同的二极管发光,形成不同的数字。

该模块主要是将运算模块和校时模块运算出来的十进制表示的时位、分位和秒位数值,并通过6只数码管显示出来。

该模块实现的硬件是7seg-mpx6-ca单元,采用软件译码,即在程序中设置一个段选码表。

CPU直接往LED输出八段代码,省去了硬件译码器。

A0~A3作为8段数据输出口到达各LED。

只要做到每送一次段选码时也送一次位扫描码,并且每送一次位扫描码后,位码中的0右移一位作为下一次的位扫描码,即可实现由左向右使6只LED依次出现数字显示。

运算模块:该模块的主要功能是对时、分、秒的运算,并把运算出的最终结果存到事先已经开辟的内存单元里,以便显示模块即时地显示出来。

该模块可以细分为秒定时模块和运算模块。

延时程序实现延时功能,由于CPU运算模块中的指令消耗一定的时间,所消耗的时间可以用来延时。

当演示完成后才能让秒单元内的数值加1。

在主程序里,必须对秒、分和时的单元内的数值进行判断,当秒加到60时,分必须加1 、秒清零;当分加到60时,时加1、分清零。

当时加到24时,直接清零。

然后转到调用处。

校时模块:该模块主要功能是修改时、分、秒内存单元的数值。

每按一次键,对应的显示值便加1。

分、秒加到59后变为00;小时加到23后再按键即变为00.再调校时均不向上一单位进位(例如分加到59后变为00;但小时不发生改变)。

2.2流程图1.主函数2.3程序设计#include <iom128v.h>#include <macros.h>//#pragma interrupt_handler t1_int:13unsigned char led_table[26]= //数码管段码表{ 0xC0,/*0*/0xF9,/*1*/0xA4,/*2*/0xB0,/*3*/0x99,/*4*/0x92,/*5*/0x82,/*6*/0xF8,/*7*/0x80,/*8*/0x90,/*9*/};unsigned int m;unsigned char m6,m5,m4,m3,m2,m1; void display(){DDRE=0XFF;DDRB=0XFF;PORTE=0X00;PORTB=0Xff;PORTE|=BIT(0);PORTB=led_table[m6];delay(3);PORTB=0XFF;PORTE=0X00;PORTE|=BIT(1);PORTB=led_table[m5]-0X80;delay(2);PORTB=0XFF;PORTE=0X00;PORTE|=BIT(2);PORTB=led_table[m4];delay(2);PORTB=0XFF;PORTE=0X00;PORTE|=BIT(3);PORTB=led_table[m3]-0X80;delay(2);PORTB=0XFF;PORTE=0X00;PORTE|=BIT(4); PORTB=led_table[m2]; delay(2);PORTE=0X00;PORTB=0X00;PORTE|=BIT(5); PORTB=led_table[m1]; delay(2);}void delay(int m) { int i,j;for(i=0;i<m;i++)for(j=0;j<500;j++);} void main(){unsigned char q;m=0;DDRB=0XFF;PORTB=0XFF;DDRF=0X00;PORTD=0X00;DDRD=0XFF;PORTD=0XFF;while(1){m6=m/100000;m5=m%100000/10000; m4=m%10000/1000;m3=m%1000/100;m2=m%100/10;m1=m%10;m++;if(m2==5&&m1==9){m+=100;m-=59;}if(m3==9&&m4==5&&m1==9&&m2==5){m+=10000;m-=5900;}for(q=0;q<10;q++){ display();PINF==0X00;if(PINF==0X01){m=m+100;delay(50);}if(PINF==0X02){m=m-100;delay(50);}if(PINF==0x04){m=m+10000;delay(50);}if(PINF==0X08){m=m-10000;delay(50);}}}}4实验仿真和验证我们跟据试验原理设计了仿真图,将程序在Iccv7中运行后,将生成的HEX档加载、运行,来看是否能实现我们要求的功能,并看是否有错误。

相关主题