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

来源:本站
导读:目前正在解读《STC12C2052AD单片机控制的数码管时钟程序及电路图》的相关信息,《STC12C2052AD单片机控制的数码管时钟程序及电路图》是由用户自行发布的知识型内容!下面请观看由(电工学习网 - www.9pbb.com)用户发布《STC12C2052AD单片机控制的数码管时钟程序及电路图》的详细说明。


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

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

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

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

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++;//秒加一

}

}

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

提醒:《STC12C2052AD单片机控制的数码管时钟程序及电路图》最后刷新时间 2023-07-10 03:57:36,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《STC12C2052AD单片机控制的数码管时钟程序及电路图》该内容的真实性请自行鉴别。