易于激发兴趣的电子钟制作
2014-03-25
(广东省高级技工学校,广东 博罗 516100)
易于激发兴趣的电子钟制作
王 战
(广东省高级技工学校,广东 博罗 516100)
当前学习单片机的学生相当多,为激发初学者学习单片机的兴趣,本文介绍一款很有趣味性的小型电子钟的设计和制作过程,非常适合电子制作爱好者们业余仿作,以锻炼动手能力和操作技能、激发和培养学习兴趣和实践热情。
激发;单片机;电子钟
“教、学、做”,突出“做”。通过“做”,让学生对学习专业技术感兴趣,通过“做”,让学生提高动手能力。如何提高学生学习的积极性,提高学生的动手实操能力,现介绍一种易操作,又能激发学生兴趣的电子钟制作方法,给无线电爱好的同学参考。
本范例是采用单片机内部时钟信号作为触发源的一款简易型电子钟,采用8位数码管显示,其电路简单,具备电子钟的基本功能。可惜的就是存在时间误差较大及无停电走时及记忆功能。
1 控制电路组成及其工作原理
如图1 所示为单片机内部触发源数码管显示简易电子钟Protues虚拟电路图。其中电路主要由 74245芯片驱动的8位共阳数码管显示电路、3位独立简易型按键和蜂鸣器驱动电路组成。
注:本电路对晶振频率有着严格的要求,本范例编程时是按12MHz晶振来设计的。
本范例是使用定时器T0以50ms中断1次同时以20次中断作为1秒钟来实现时间单位的控制。子程序模块除了显示、蜂鸣器控制常规程序模块以外,主要包含50ms及1s单位时间中断程序模块、时分秒进位处理程序模块、时、分和秒时间设置模块。
1.1 控制程序
主程序中是通过控制模式代码寄存器GN变化于0~3间分别代表时间显示模式、小时设置模式、分钟设置模式和秒钟设置模式。在主程序中控制扫描计数器“biao”每扫描1轮(约8位数码管扫描显示1轮的时间)加1,并达到30时清零,用以在时间设置时控制对应数据闪烁显示。
请认真阅读“//”后的中文注释达成对每行语句含义的初步认识。
图1 单片机内部触发源数码管显示简易电子钟Protues虚拟电路图
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define WM_OUT P2
#define DM_OUT P0
sbit SET=P1^7; sbit jia=P1^5;sbit jian=P1^6;
sbit BEEP=P3^7;
uchar GN=0;
uchar biao;
uchar shi,fen,miao,count_50ms;
void delay(uint ms)
uchar code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff,0xbf};
uchar code wm[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
uchar time[8];
void Beep()
void disp(uchar *p)
void chuli()
{
if(miao==60)
{
fen++;
miao=0;
if(fen==60)
{
shi++;
fen=0;
if(shi==24)shi=0;
}
}
time[0]=shi/10;
time[1]=shi%10;
time[2]=17;
time[3]=fen/10;
time[4]=fen%10;
time[5]=17;
time[6]=miao/10;
time[7]=miao%10;
}
void shi_hm()
{
if(!jia)
{
Beep();
if(++shi==24)shi=0;
while(!jia)disp(time);
}
if(!jian)
{
Beep();
if(--shi==255)shi=23;
while(!jian)disp(time);
}
if(biao>15){time[0]=16;time[1]=16;}
disp(time);
}
void fen_hm()
{
if(!jia)
{
Beep();
if(++fen==60)fen=0;
while(!jia)disp(time);
}
if(!jian)
{
Beep();
if(--fen==255)fen=59;
while(!jian)disp(time);
}
if(biao>15){time[3]=16;time[4]=
16;}
disp(time);
}
void miao_hm()
{
if(!jia)
{
Beep();
if(++miao==60)miao=0;
while(!jia)disp(time);
}
if(!jian)
{
Beep();
if(--miao==255)miao=59;
while(!jian)disp(time);
}
if(biao>15){time[6]=16;time[7]=
16;}
disp(time);
}
void main()
{ TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)/256;
IE=0X82;
TR0=1;
while(1)
{biao=(biao+1)%30;
if(!SET)
{GN=(GN+1)%4;
Beep();
while(!SET)disp(time);
}
chuli();
if(GN==0)disp(time);
else if(GN==1)shi_hm();
else if(GN==2)fen_hm();
else if(GN==3)miao_hm();
}
}
void timer0()interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)/256;
if(++count_50ms==20)
{
miao++;count_50ms=0;
以上电子钟制作制作方案,是我院实施“教、学、做”一体化教学模式,创新教育教学环境和培养学生的动手实操能力,在机电一体化专业开展的工学结合实践操作模式课程。
[1]李广第,朱月秀,王秀山.单片机基础[M].北京:北京航空航天大学出版社,2001.
TP36
A