标题:
51单片机电子钟显示器Proteus仿真程序(新手上路勿喷)
[打印本页]
作者:
M阿
时间:
2022-5-20 11:01
标题:
51单片机电子钟显示器Proteus仿真程序(新手上路勿喷)
电子秒表显示器C51仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
51hei.gif
(184.52 KB, 下载次数: 32)
下载附件
2022-5-20 16:06 上传
单片机源程序如下:
#include "reg51.h"
#include "stdio.h"
#define uint unsigned int
#define uchar unsigned char
uchar data second=23,minute=10,hour=4;
uchar data disbuf[6]={0};
uchar bdata FLAG=0;
sbit H_M=FLAG^1; //小时 分钟切换标志位 启动后默认为分钟设置状态
sbit P1_0=P1^0; //增1键
sbit P3_2=P3^2; //小时,分钟切换键
//定义共阴段码 0-9
uchar code table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//计数变量
uchar data count=0;
//定时器0的中断服务程序 50ms
void timer0(void) interrupt 1 using 1
{TH0=-50000/256;
TL0=-50000%256;
count++;
if(count==20)
{count=0;
second++;
if(second==60)
{second=0;
minute++;
if(minute==60)
{minute=0;
hour++;
if(hour==24)
{hour=0;}
}
}
}
return;
}
//延时程序
void dlms(void)
{uchar i;
for(i=2000;i>0;i--){}
}
//外部中断0的中断服务程序
void int0(void) interrupt 0 using 2
{
while(!P3_2) //等待按键弹起
{
dlms();
}
dlms( );
if(P3_2) //按键弹起
H_M=!H_M;
}
//显示程序
void disp(void)
{uchar i,j;
uchar bdata sel;
disbuf[0]=second%10;
disbuf[1]=second/10;
disbuf[2]=minute%10;
disbuf[3]=minute/10;
disbuf[4]=hour%10;
disbuf[5]=hour/10;
P2=0XFF; //关闭所示数码管显示
sel=0x01;
for(i=0;i<6;i++)
{j=disbuf[i];
P2=(sel^0xff); //得到位选
P0=table[j]; //送段码
dlms();
P2=0XFF;
sel=sel<<1; //位选左移1位
}
}
//加1处理程序
void increa(void)
{if(H_M) //H_M为1 表示小时设置
{hour++;
if(hour==24)
{hour=0;
disbuf[4]=0;
disbuf[5]=0;
}
}
else //H_M为0 表示分钟设置
{minute++;
if(minute==60)
{minute=0;
disbuf[2]=0;
disbuf[3]=0;
}
}
}
int main( )
{
TCON=0x01;
TMOD=0x01;
TH0=-50000/256;
TL0=-50000%256;
EA=1;
ET0=1;
EX0=1;
TR0=1;
while(1)
{disp();
if(!P1_0)
{while(!P1_0)
dlms();
if(P1_0)
increa();
}
}
}
复制代码
本人初学,仅供参考,存在错误和不足之处,请大家回帖多多指教,切勿照搬,文件下载:
Keil代码与Proteus8.8仿真下载::
实验4-电子钟.7z
(35.15 KB, 下载次数: 29)
2022-5-20 11:00 上传
点击文件名下载附件
内涵源码和proteus仿真8.6
下载积分: 黑币 -5
作者:
ggo468
时间:
2023-1-4 19:57
用四位八段数码管,显示四位,小时和分钟怎么做
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1