您的位置 首页 厂商

AT89S52单片机完成多功能数字钟的规划

AT89S52单片机实现多功能数字钟的设计-实现原理:利用单片机定时器及计数器产生定时效果通过编程形成数字钟效果,再利用数码管动态扫描显示单片机内部处理的数据。同时通过端口读入当前外部控制状态来改变程序的不同状态,实现不同功能。

一:电路原理和器材挑选

制造电路:单片机(AT89S52)完成多功用数字钟

性能指标:该数字钟完成时钟运转,调整,倒计时,秒表功用,且精确度经调试一天的差错在2S内。

完成原理:使用单片机守时器及计数器发生守时作用经过编程构成数字钟作用,再使用数码管动态扫描显现单片机内部处理的数据。一起经过端口读入当时外部操控状况来改动程序的不同状况,完成不同功用。

AT89S52单片机完成多功用数字钟的规划

电路首要模块及原理图:

1.数码显现硬件驱动

数码管驱动电路

2.单片机最小体系:

单片机最小体系

3.LED及单片机电源原理图

LED及单片机电源

4.外部操控状况输入模块原理图

外部操控状况输入模块原理图

首要元器材挑选:

单片机:AT89S52选用市场上比较常用的AT89S52,这儿选用AT89S52而不是AT89S51是为了最大极限减小差错,由于要完成多功用(例如秒表,时钟,倒计时)为了相互之间不搅扰而要用到3个守时/计数器,而51系列只要2个,而52系列有3个,故选用52系列

三极管:用来进行数码管显现的位选,这儿选用PNP管

数码管:选用共阳级四位数码管

晶振:选用的是11.0592MHZ的晶振

电源部分:选用5V电压供电,选用的是L7805稳压芯片供电(加滤波)

电阻:大部分时限流电阻,阻值为4.7K或10K,1K

端口分配及衔接:

P0:LED数码管显现内容经过P1口从单片机传送到数码管

P2.4-P2.7:数码管位选操控端口

P2.0-P2.3:别离衔接开关K0,K1,K2,K3经过不同的组合完成外部操控程序状况

P1.0:蜂鸣器,倒计时结束发生鸣响

P1.2-P1.5:四个发光二极管,显现当不时钟状况

完好的源程序如下:

附程序源代码及注释

#include

#include

#define uint unsigned int

#define uchar unsigned char

/*界说P2口各管脚*/

sbit K0=P2^2;

sbit K1=P2^1;

sbit K2=P2^0;

sbit K3=P2^3;

sbit D0=P2^4;

sbit D1=P2^5;

sbit D2=P2^6;

sbit D3=P2^7;

/*界说P1口各管脚*/

sbit beep=P1^0;

sbit L0=P1^5;

sbit L1=P1^4;

sbit L2=P1^3;

sbit L3=P1^2;

uchar data BUFFER[4]={0,0,0,0}; //显现缓冲区(顺次从低位到高位,共四位数码管)

uchar data CLOCK[4]={0,0,0,0}; //寄存时钟时刻(顺次是百分秒,秒,分,时)

uchar data SECOND[3]={0,0,0}; //寄存秒表时刻(顺次时百分秒,秒,分)

uchar data SEVER[4]={0,0,0,0}; //寄存倒计时时刻(顺次是百分秒,秒,分,时)

/*界说程序运转状况*/

uchar data STATE=0;

/*STATE=0;时钟运转*/

/*STATE=1;时钟分调整*/

/*STATE=2;未界说状况,可增加*/

/*STATE=3;时钟时调整*/

/*STATE=4;倒计时分调整*/

/*STATE=5;倒计不时调整*/

/*STATE=6;秒表*/

/*STATE=7;倒计时运转*/

/*界说辅佐计时全局变量*/

uchar m=60;

/*共阳数码管显现“0”-“9”,“-” */

uchar code TABLE[]={0xC0,0xf9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x98,0xbf};

/*自界说子函数*/

void display(); //显现函数

void delay(); //显现延时函数

void intsvr(); //调整时刻时加1子函数

void delay10ms(); //延时函数

/*主函数体*/

void main(void)

{

EA=1;ET0=1; //开总中止源,开T0中止

TMOD=0x61; //T1方法2计数,T0方法1计时

TH0=-9460/256;TL0=-9460%256; //初始化计数器初值

TH1=0xff;TL1=0xff;

T2CON=0;TH2=-9452/256;TL2=-9452%256;

K0=1;K1=1;K2=1; //初始化操控状况位

STATE=P2&0x07;

for(;;)

{

switch(STATE)

{

case 1: //时钟分调整程序

{

TR0=0;ET0=0;EX0=0;TR2=0; //封闭守时器,时钟中止运转,一起封闭外中止IT0

L3=0;L1=0;L2=0;L0=1;

intsvr(); //调用加1函数

BUFFER[0]=CLOCK[2]%10; //数码管显现分钟个位

BUFFER[1]=CLOCK[2]/10; //数码管显现分钟十位

BUFFER[2]=10; //显现“-”

BUFFER[3]=10; //显现“-”

}break;

case 3: //时钟时调整程序

{

TR0=0;ET0=0;EX0=0;TR2=0; //封闭守时器,时钟中止运转

L3=0;L1=0;L2=0;L0=1;

intsvr(); //调用加1函数

BUFFER[0]=CLOCK[2]%10; //数码管显现分钟个位
来历;21ic

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/344209.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部