电子开发网

电子开发网电子设计 | 电子开发网Rss 2.0 会员中心 会员注册
搜索: 您现在的位置: 电子开发网 >> 电子开发 >> 单片机 >> 正文

STC12C2052AD单片机控制的数码管时钟程序及电路图

作者:佚名    文章来源:本站原创    点击数:    更新时间:2018-03-07


     STC12C2052AD单片机控制的数码管时钟,数码管是共阳4位时钟数码管,由于使用单片机真驱,电路比较简单,且使用的材料和工具也很简单,用数码管显示,单片机控制,两个按键调时,蜂鸣器整点报时。所需要的元件如下:

       材料有以下这些:
        STC12C2052AD单片机一片
        黄色共阳4位时钟数码管一块
        6mm×6mm按键两个
        杜邦线插针2p两个
        无源蜂鸣器一个
        20脚+14脚芯片座各一个
        洞洞板一块(截取一小部分)
        100欧电阻4个

单片机时钟实物图 

STC12C2052AD单片机控制的数码管时钟程序及电路图 

单片机时钟零件实物图 

程序如下:

/************************************************************************************/

#include <STC12C2052AD.h>  //声明头文件

sbit key1=P3^4;  //按键接口定义

sbit key2=P3^5;  //按键接口定义

sbit speaker=P3^7;  //蜂鸣器接口定义

/************************************************************************************/

unsigned char code LED[10]={0x20,0xA7,0x90,0x82,0x07,0x42,0x40,0xA6,0x00,0x02};//数码管段位码定义

unsigned int time; //全局秒基准定义

/*-------------------------------------延时函数-------------------------------------*/

void delayms (unsigned int a){

unsigned int i;

while( --a != 0){

for(i = 0; i < 600; i++);

}

}

/*----------------------------------蜂鸣器驱动函数----------------------------------*/

void beep (void)

{  

unsigned char i=30;

while(i--)

{

speaker=~speaker;

delayms(3);

    }

}

/*----------------------------------数码管驱动函数----------------------------------*/

void display (unsigned char hour,min)

{

unsigned char H1,H2,M1,M2;

P3=0xf8; //数码管位选

P1 = LED[H1];     //数码管段选

delayms (2); //扫描延时

P3=0xf4; //数码管位选

P1 = LED[H2];     //数码管段选

delayms (2); //扫描延时

P3=0xf2; //数码管位选

P1 = LED[M1];     //数码管段选

delayms (2); //扫描延时

P3=0xf1; //数码管位选

P1 = LED[M2];     //数码管段选

delayms (2); //扫描延时

/*--------------------------------------分定义--------------------------------------*/

M1=min/10;//取分十位

min=min%10;//取余 

M2=min;//取分个位

/*--------------------------------------时定义--------------------------------------*/

H1=hour/10;//取时十位

hour=hour%10;//取余 

H2=hour;//取时个位

}

/*-----------------------------------按键去抖函数-----------------------------------*/

void qudou (unsigned char hour,min)

{

unsigned char i;

for(i=0;i<25;i++){//循环显示,等于键盘去抖的功能

display (hour,min);

}

}

/*--------------------------------------主函数--------------------------------------*/

void main(void)

{

////定时器初始设置

TMOD=0x01;//定时器工作方式1

TH0=0x3C;//定时器初始产生50ms时基信号

TL0=0xB0;//定时器初始产生50ms时基信号

ET0=1;//开定时器中断

EA=1;//开总中断

TR0=1;//启动定时器

/*************************************************************************************/

while(1)

{

unsigned char hour,min;//定义时分


display (hour,min);//调用显示函数


if (time>59)//60秒向分进1

{

time=0;

min++;

   }

if (min>59)//60分向时进1

{

min=0;

hour++;

beep ();

    }

if (hour>23)//24时时分秒清零

{

hour=0;

min=0;

time=0;

}

/*-----------------------------------按键判断程序-----------------------------------*/

if(key1==0)

qudou (hour,min);

if (key1==0) {hour++;}


if(key2==0)

qudou (hour,min);

if (key2==0) {min++;}

}

}

/*-----------------------------------中断服务程序-----------------------------------*/

void Timer0_Routine(void) interrupt 1

{

unsigned char a;

TH0=0x3C;//定时器初始产生50ms时基信号

TL0=0xB0;//定时器初始产生50ms时基信号

    a++;//定时器循环计数20次为一秒

if (a==20){//定时器循环计数20次为一秒

a=0;//次数清零,从新循环计数

time++;//秒加一

}

}

 

/************************************************************************************/

Tags:单片机时钟,数码管时钟程序,单片机  
责任编辑:admin
请文明参与讨论,禁止漫骂攻击,不要恶意评论、违禁词语。 昵称:
1分 2分 3分 4分 5分

还可以输入 200 个字
[ 查看全部 ] 网友评论
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 在线帮助 - 文章列表
返回顶部
刷新页面
下到页底
晶体管查询