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

stc12c2052ad单片机控制的数码管时钟,数码管是共阳4位时钟数码管,由于使用单片机真驱,电路比较简单,且使用的材料和工具也很简单,用数码管显示,单片机控制,两个按键调时,蜂鸣器整点报时。所需要的元件如下:
材料有以下这些:
stc12c2052ad单片机一片
黄色共阳4位时钟数码管一块
6mm×6mm按键两个
杜邦线插针2p两个
无源蜂鸣器一个
20脚+14脚芯片座各一个
洞洞板一块(截取一小部分)
100欧电阻4个
程序如下:
/************************************************************************************/
#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++;//秒加一
}
}
/************************************************************************************/

盘点各地方政府在人工智能领域的重要布局
FPC未来空间广阔, HDI需求攀升
锂电池起火的三个原因
语音芯片的作用
充电宝哪个品牌质量好
STC12C2052AD单片机控制的数码管时钟程序及电路图
加速制造智能化升级 中科创达赋予工业机器“智慧眼睛”
小米6首现真身:配置最终确认,骁龙835+6GB
Linux驱动函数接口说明
【知识】 防水连接器的保养方法
FAST馈源舱的静态定标和动态跟踪
GGII预计2024快充大规模应用元年将至
BOSCH焊接控器手动焊钳控制的温度传感器连接故障分析
新能源汽车测试技术发展论坛召开,主要是关于动力电池的安全可靠性分析
现代 AI技术加持,修复巴黎圣母院并非难事
哈工大教授提出新型柔性触觉传感器阵列
Linux驱动开发-编写MMA7660三轴加速度传感器
富士康大陆裁员转移印度_市场转向东南亚?
5G随身WiFi不如二手旧手机?实测结果出乎意料
Littelfuse的≥2 kVHV分立硅MOSFET器件介绍