易于激发兴趣的电子钟制作

2014-03-25 04:35
中国新技术新产品 2014年6期
关键词:电子钟数码管单片机

(广东省高级技工学校,广东 博罗 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

猜你喜欢
电子钟数码管单片机
电子钟被拆之后
基于单片机的SPWM控制逆变器的设计与实现
Arduino编程
基于单片机的层次渐变暖灯的研究
基于STC80C51的电子钟研制
MC9S08FL16单片机数码管静态显示分析
基于单片机的便捷式LCF测量仪
单片机控制的四位数码管动态显示编程
基于Qt的数码管数字编码系统的设计与实现
Microchip推出两个全新PIC单片机系列