标题:
单片机数字钟程序Proteus仿真电路图
[打印本页]
作者:
yujingpiaomiao
时间:
2025-4-17 08:31
标题:
单片机数字钟程序Proteus仿真电路图
数字钟仿真,程序软·全套,第一次发帖大家多包涵
51hei.gif
(65.23 KB, 下载次数: 0)
下载附件
2025-4-18 17:30 上传
单片机源程序如下:
//********************数字钟程序************************
//程序:ex8-1.c
//功能:数字钟程序
#include "reg51.h"
typedef unsigned int u16;
typedef unsigned char u8;
//********************位名称定义*************************
sbit naodeng=P2^0; //闹钟开灯亮;否则灭
sbit K1=P3^0; //切换模式(开关闹钟,调闹钟)
sbit K2=P3^2; //调时
sbit K3=P3^3; //调分
sbit beep=P2^7; //蜂鸣器
//********************函数声明***************************
void shijian(); //计时时间显示
void Timer0Init(); //定时器中断初始化函数
void DigDisplay(); //LED动态显示扫描函数
void alarm(); //闹铃报警处理
void tiao_nao(); //闹钟时间设置
void moshi(); //闹钟模式设置
void delay(u16 i); //软件延时函数
//********************全局变量定义***************************
bit nao; //闹钟开关标志,nao=1闹钟开;nao=0闹钟关
u8 a=0; //记录K1按下次数,第一次按下修改闹钟时间,第2次按下切换闹钟开关
u8 display[]={0,0,0,0,0,0}; //显示缓冲区,对应六个数码管
u8 ssec,sec,min,hour,nao_hour=0,nao_min=0; //10毫秒、秒、分、小时、闹钟小时、闹钟分钟
//*************************延时函数****************************//
//函数名:delay
//函数功能:软件延时
//形式参数:无符号整型变量i,0-65535
//返回值:无
void delay(u16 i)
{
while(i--);
}
//*************************定时器中断初始化函数****************************//
//函数名:Timer0Init
//函数功能:定时器T0定时中断,interrupt 1,开放两个外部中断
//形式参数:无
//返回值:无
void Timer0Init()
{
TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。
EX0=1;
IT0=1; //外部中断0采用下降沿触发
PX0=1;
EX1=1;
IT1=0; //外部中断1采用低电平触发
TH0=0Xd8; //给定时器赋初值,定时10ms,12MHz晶振频率
TL0=0Xf0;
ET0=1; //开放定时器0中断允许
EA=1; //开放总中断
TR0=1; //定时器开始计数
}
//**************************6位LED显示函数**************************/
//函数名:DigDisplay
//函数功能:6位LED动态显示,将显示缓冲区display中的6个数依次扫描显示一遍
//形式参数:无
//返回值:无
void DigDisplay()
{
u8 i,j,m,temp;
u8 led[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//0-9的共阴极显示码
temp=0x01;
for(i=0;i<6;i++)
{
P1=0x00; //关显示
j=display[i];
P1=led[j]; //P1送段码
P0=~temp; //P0对应端口低电平选位
temp<<=1;
for(m=0;m<100;m++); //每一位显示延时
}
}
//******************************报警函数****************************/
//函数名:alarm
//函数功能:闹钟时分和当前时分相同、闹钟功能开启的情况下,蜂鸣器响15秒
//形式参数:无
//返回值:无
void alarm()
{
if(nao_hour==hour&&nao_min==min&&sec>=0&&sec<15&&nao==1)
{
beep=1;
delay(5);
beep=0;
delay(5);
}
}
//***********************闹钟时间调节**********************//
//函数名:tiao_nao
//函数功能:闹钟时间修改,修改小时和分钟,K1按下结束调节
// 设置完闹钟时间后,自动开启闹钟
//形式参数:无
//返回值:无
void tiao_nao()
{
IT0=0; //关溢出进1;否则调闹时针后时加1;
EX1=0; //关中断系统
EX0=0; //关中断系统
delay(10);
while(K1) //当K1没有按下时进行闹钟时间调节,当按下K1时,结束闹钟时间调节
{
if(K2==0) //闹钟小时调节
{delay(10);if(K2==0)nao_hour++;while(!K2);}
if(nao_hour>=24)nao_hour=0; //24小时后归0
if(K3==0) //闹钟分钟调节
{delay(10);if(K3==0)nao_min++;while(!K3); }
if(nao_min>=60)nao_min=0; //60分钟后归0
display[5]=0; //闹钟显示
display[4]=0;
display[3]=nao_min%10;
display[2]=nao_min/10;
display[1]=nao_hour%10;
display[0]=nao_hour/10;
DigDisplay(); //数码管显示函数
}
IT0=1;
EX1=1;
EX0=1;
nao=1; //退出闹钟调试,自动开启闹钟
}
//*************************闹钟功能设置***************************//
//函数名:moshi
//函数功能:按键K1用来控制闹钟功能的开启和关闭,以及闹钟时间设置
// 按下进入闹钟时间设置,在该状态下再次按下K1结束闹钟时间设置并同时开启闹钟功能
// 在闹钟开启或闹铃响期间,按下K1关闭闹钟功能
//形式参数:无
//返回值:无
void moshi()
{
if(K1==0)
{
delay(100);
if(K1==0)
{
a++; //记录K1按下次数
if(a>=2)a=0;
while(!K1);
switch(a)
{
case(0):nao=~nao;break;
case(1):tiao_nao();break;
}
}
} while(!K1);
}
//***********************当前时间显示**********************//
//函数名:shijian
//函数功能:将当前计时时间的"小时"、"分钟"和"秒"拆分到显示缓冲区并调用LED显示扫描函数实现时间的显示。
//形式参数:无
//返回值:无
void shijian()
{
display[5]=sec%10;
display[4]=sec/10;
display[3]=min%10;
display[2]=min/10;
display[1]=hour%10;
display[0]=hour/10;
DigDisplay(); //LED显示扫描函数
}
//***********************T0中断服务函数**********************//
//函数名:Timer0
//函数功能:每10ms中断一次,进行10ms、秒、分、小时计数
//形式参数:无
//返回值:无
void Timer0() interrupt 1
{
TH0=0Xd8; //给定时器赋初值,定时10ms
TL0=0Xf0;
ssec++;
if(ssec>=100) //1s
{
ssec=0;
sec++;
if(sec>=60)
{
sec=0;
min++;
if(min>=60)
{
min=0;
hour++;
if(hour>=24)
{hour=0;
}
}
}
}
}
//***********************外部中断0服务函数**********************//
//函数名:int0
//函数功能:小时调节
//形式参数:无
//返回值:无
void int0() interrupt 0
{
delay(10); //采用下降沿触发,延时去抖
hour++;
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei附件下载:
数字钟仿真.7z
(66.56 KB, 下载次数: 0)
2025-4-18 17:31 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1