单片机原理与应用课程论文
- 格式:doc
- 大小:812.50 KB
- 文档页数:19
摘要
我这次做的是时钟计时器。时钟计时器要求6位LED数码管显示时、分、秒,以24小时计时方式运行,使用按键开关可以实现时、分调整功能。要求有3个按键:第一个按键按下去,时间停止等待调整;第二个按键按下去:调整分钟,每按一次则分钟加1;第三个按键按下去:调整小时,每按一次则小时加1.第一次按键再按一次,时钟则恢复计时功能。如此循环。
单片机和集成芯片的应用使得本设计硬件电路简化、编程方便,同时功能也更稳定。由于单片机可以重新写入不同程序这就便于时钟功能的扩充和改变,同时时钟芯片时间精确度高也可以保证系统的精度。
关键词:AT89C51,LED,数码管(7SEG-MPX6-CC),时钟
Abstract
This time what I do is timer clock. The timer clock requires six LED
digital tube display hours, minutes and seconds, in the running way
of 24 hours, used button switches can realize the function that can
adjust hours and minutes. It is required three buttons: When pressing
the first button, it will stop time and wait for adjustment; When
pressing the second button every time, if change minute, the minutes
will add 1; when pressing the third button, if adjust hour, the hours
will add 1. When click the first button again, the clock will restore
timing function. So cycle it is.
The circuit of hardware for this design become easy and the system
function become powerful along with MCU and integrated chip used.
Because the monolithic integrated circuit may reread in different
procedure this at your convenience to the clock function expansion
and the change, simultaneously the Real-time clock chip precision is
high may guarantee the system the precision.
Keywords : AT89C51,LED, Digital tube(7SEG-MPX6-CC),clock 正文
一、 引言
1、 实现什么功能
时钟计时器要求6位LED数码管显示时、分、秒,以24小时计时方式运行,使用按键开关可以实现时、分调整功能。要求有3个按键:第一个按键按下去,时间停止等待调整;第二个按键按下去:调整分钟,每按一次则分钟加1;第三个按键按下去:调整小时,每按一次则小时加1.第一次按键再按一次,时钟则恢复计时功能。如此循环。
2、 采用什么芯片
芯片 AT89C51
3、为什么要这样做
单片机和集成芯片的应用使得本设计硬件电路简化、编程方便,同时功能也更稳定。由于单片机可以重新写入不同程序这就便于时钟功能的扩充和改变,同时时钟芯片时间精确度高也可以保证系统的精度。
二、 基于单片机的设计
系统总体设计框图
模块
单片机最小系统
时钟电路
显示电路 键盘电路
AT89C51
P0
单片机控制器
P2 列驱动 6位LED显示器 按键开关
1、 系统硬件设计
(1) 单片机最小系统原理
本设计采用8位AT89C51单片机,已接时钟电路和复位电路成为最小系统。
(2) 数码管动态显示原理
动态驱动是将所有数码管的8个显示笔划“a,b,c,d,e,f,g,dp”的同名端连在一起,另外位每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是哪个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的COM端,就使各个数码管轮流受控显示。在轮流显示过程中,每位数码管的电亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就使一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。
(3) 系统方案
(a) 采用共阴7段LED显示器,PO口输出段码数据,P2.0-P2.5口作列扫描输出。
(b) P1.0,P1.1和P1.2口接3个按钮开关用以实现调时,调分功能。 (4) 器件选择
单片机(AT89C51)、数码管(7SEG-MPX6-CC)、按键(BUTTON)、电阻若干
硬件图:
2、 系统软件设计
(1) 数码管显示
数码管显示时要严格区分共组型数码管和共阴型数码管。
(2) 判断时间进度 (a) 从分到时的计时器是通过累加和数值比较实现的。
(b) 采用if…else…语句。对秒个位,秒十位,分个位,分十位,时个位,时十位分别进行采用条件判断,到达临界值则往高位进一。
(3) 判断有无按键
设置全局位变量flag,通过判断flag的值确定时钟处于计时状态还是调整时间状态。在检测按下时必须加入去抖延时。
(4) 定时1s
采用定时器TO进行定时,选择工作模式1。晶振频率12MHZ的单片机最大定时时间为65.536ms。选择可以整除1000ms的定时时间X。设置计数值byCounter,每次定时器/计数器中断到来时,将byCounter加1,若加到1000/X,则说明时间够了1秒,就将byCounter复0.
代码:
#include
#define uchar unsigned char
#define uint unsigned int
#define Input_data P0
uchar flag = 0;
uchar timer = 0;
sbit key1 = P1^0;
sbit key2 = P1^1;
sbit key3 = P1^2;
sbit select_miao_ge = P2^0;
sbit select_miao_shi = P2^1;
sbit select_fen_ge = P2^2;
sbit select_fen_shi = P2^3;
sbit select_shi_ge = P2^4;
sbit select_shi_shi = P2^5;
uchar
SEG_Data[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar num_miao_ge = 0;
uchar num_miao_shi = 0;
uchar num_fen_ge = 0;
uchar num_fen_shi = 0;
uchar num_shi_ge = 0;
uchar num_shi_shi = 0;
void timer0_init();
void display();
void key_scan();
void main()
{
timer0_init();
while(1)
{
display();
key_scan();
}
}
void timer0() interrupt 1
{
EA = 0;
timer++;
if(timer==70)
{
timer = 0;
num_miao_ge++; if(num_miao_ge==10)
{
num_miao_ge=0;
num_miao_shi++;
if(num_miao_shi==6)
{
num_miao_shi=0;
num_fen_ge++;
if(num_fen_ge==10)
{
num_fen_ge=0;
num_fen_shi++;
if(num_fen_shi==6)
{
num_fen_shi = 0;
num_shi_ge++;
if(num_shi_ge==10)
{
num_shi_ge=0;
num_shi_shi++;
if(num_shi_shi==3)
{
num_shi_shi=0;
}
}
}
}